欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

webpack2.0搭建前端項目的教程詳解

 更新時間:2017年04月05日 10:21:22   作者:懶洋洋的兜兜君  
這篇文章主要給大家介紹了關(guān)于webpack2.0搭建前端項目的相關(guān)資料,文中介紹的非常詳細,對大家學習或者使用webpack2.0具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

一、什么是webpack:

webpack可以看做是模塊打包機:它做的事情是,分析你的項目結(jié)構(gòu),找到JavaScript模塊以及其它的一些瀏覽器不能直接運行的拓展語言(Scss,TypeScript等),并將其打包為合適的格式以供瀏覽器使用。

注意: 目前最新為webpack2.0版本,與1.0有一些出入

二、初始化項目

npm init

npm install webpack --save-dev

三、安裝loader,stylus以及postCss

npm install style-loader css-loader stylus-loader stylus --save-dev
npm install --save-dev postcss-loader autoprefixer

四、目錄結(jié)構(gòu)大致如下

五、添加webpack.config.js 配置如下:

// 該配置基于webpack2.0 詳情查看 https://webpack.js.org/guides/migrating/
const path = require('path'); // 導入路徑包

module.exports = {
 entry: './src/main.js', //入口文件
 output: {
 path: path.resolve(__dirname, 'build'), // 指定打包之后的文件夾
     // publicPath: '/assets/', // 指定資源文件引用的目錄,也就是說用/assests/這個路徑指代path,開啟這個配置的話,index.html中應該要引用的路徑全部改為'/assets/...'
 // filename: 'bundle.js' // 指定打包為一個文件 bundle.js
 filename: '[name].js' // 可以打包為多個文件
 },
 // 使用loader模塊
 module: {
 /* 在webpack2.0版本已經(jīng)將 module.loaders 改為 module.rules 為了兼容性考慮以前的聲明方法任然可用,
      同時鏈式loader(用!連接)只適用于module.loader,
      同時-loader不可省略 */
 rules: [{
  test: /\.css$/,
  use: [
  'style-loader', {
   loader: 'css-loader',
   options: {
   // modules: true // 設(shè)置css模塊化,詳情參考https://github.com/css-modules/css-modules
   }
  }, {
   loader: 'postcss-loader',
   // 在這里進行配置,也可以在postcss.config.js中進行配置,詳情參考https://github.com/postcss/postcss-loader
   options: {
   plugins: function() {
    return [
    require('autoprefixer')
    ];
   }
   }
  }
  ]
 }, {
  test: /\.styl(us)?$/,
  use: [
  'style-loader', 'css-loader', {
   loader: "postcss-loader",
   options: {
   plugins: function() {
    return [
    require('autoprefixer')
    ];
   }
   }
  }, 'stylus-loader'
  ]
 }]
 }
}

在index.html中引入'/build/main.js'。main.js 代碼如下

require('./common/css/style.css'); require('./common/css/stylus.styl');

六、通過webpack-dev-server實現(xiàn)頁面的自動刷新。

首先安裝webpack-dev-server

npm install --save-dev webpack-dev-server

然后修改package.json配置文件中:

"scripts": {
 "start": "webpack-dev-server",
 "build": "webpack"
 }

使用npm start 啟動服務。npm的 start是一個特殊的腳本名稱,它的特殊性表現(xiàn)在,在命令行中使用npm start就可以執(zhí)行相關(guān)命令,如果對應的此腳本名稱不是start,想要在命令行中運行時,需要這樣用npm run {script name} ,所以打包命令修改為npm run build

這里如果使用webpack-dev-server 命令來啟動就必須全局安裝 devServer:

npm install webpack-dev-server -g

在webpack的配置文件中可以對devServer進行配置

// 配置devServer各種參數(shù)
 devServer: {
 contentBase: "./", // 本地服務器所加載的頁面所在的目錄
 historyApiFallback: true, // 不跳轉(zhuǎn)
 inline: true // 實時刷新
 }
 npm install html-webpack-plugin --save-dev 

修改webpack配置文件,添加以下配置:

...
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
 ....,
 plugins: [
 new HtmlWebpackPlugin({
  template: './index.html' // 模版文件
 })
 ]
}

七、sourcemap 讓開發(fā)更易于調(diào)試

module.exports = {
 devtool: 'eval-source-map',//配置生成Source Maps,選擇合適的選項
 ....
 }
}

八、使用ES6語法

webpack2.0增加了對ES6模塊的支持,無需額外的配置,并且可以與 AMD 和 CommonJS混用。webpack 2可以分析理解所有的ES6代碼并且只在檢測到是ES6模塊時才使用tree-shaking。然而,只有import導入和export導出的模塊才會被編譯為ES5,如果希望所有的打包文件都編譯為ES5,你需要使用一個轉(zhuǎn)譯器來處理剩下來的文件。這里我使用babel。首先babel:

npm install --save-dev babel-core babel-loader babel-preset-es2015

在根目錄下添加.babelrc文件,并添加配置

如果bable的配置仍然為:

{
 presets: ['es2015']
}

那么無用的代碼也會被打包(Babel會將ES 6模塊通過commonJs模塊轉(zhuǎn)換輸出,然后webpack 2就不能進行tree-shaking分析了)。這塊兒大致原理是這樣的。。。

因此我們將配置文件改為:

{
 "presets": [
  ["es2015", {"modules": false}]
 ]
}

并且在webpack的配置文件中加入如下loader(此處一定不能用use,不知道為啥)

{
 test: /\.js$/,
 loader: 'babel-loader', //此處不能用use,不知道為啥
 exclude: /node_modules/ //需要排除的目錄
}

九、熱加載模塊(HMR)

webpack配置文件中,devServer的“inline”選項會為入口頁面添加“熱加載”功能,“hot”選項則開啟“熱替換(Hot Module Reloading)”,即嘗試重新加載組件改變的部分(而不是重新加載整個頁面)。如果兩個參數(shù)都傳入,當資源改變時,webpack-dev-server將會先嘗試HRM(即熱替換),如果失敗則重新加載整個入口頁面。要使用HRM,首先需要在webpack配置文件中配置plugin:

 plugins: [
  ...
  new webpack.HotModuleReplacementPlugin() // 熱加載插件
 ]

到這一步,實際上改變css可以實現(xiàn)hrm,然而js只會刷新整個頁面,index.html直接不刷新了。。。不知道為啥。react可以通過react-transform-hrm來搞定。非react框架現(xiàn)在考慮用webpack-dev-middleware 來嘗試一下

十、生產(chǎn)環(huán)境

 通過以上步驟基本的開發(fā)環(huán)境就搭建完畢了,那么實際上在生產(chǎn)環(huán)境里可能會有其他的要求,例如分離js與css(目前css是打包到j(luò)s中去的),例如壓縮代碼等。

首先創(chuàng)建一個webpack.production.config.js,然后在package.json中配置修改為:

"scripts": {
 "start": "webpack-dev-server",
 "build": "set NODE_ENV=production&&webpack --config ./webpack.production.config.js"
 }

當運行 npm run build 的時候,會設(shè)置環(huán)境變量"NODE_ENV"為"production"。

var prod = process.env.NODE_ENV === 'production' ? true : false;

現(xiàn)在分別介紹幾個常用的插件:

      1.提取公共模塊插件(webpack內(nèi)置) CommonsChunkPlugin

      2.壓縮js插件(webpack內(nèi)置) UglifyJsPlugin

      3.分離css文件: ExtractTextPlugin 注意該插件由于和webpack2不兼容,需要指定版本。。在webpack.production.config.js 中的配置,注意與1.x版本loader的寫法不同。

      4.清除文件夾: clean-webpack-plugin

運用[hash]使得產(chǎn)生的文件名帶有哈希值,合理使用緩存。

項目地址: https://github.com/Dyzzi/webpack-demo-project

本地下載:點擊這里

總結(jié)

以上就是這篇文章的全部內(nèi)容了,至此大致的開發(fā)以及生產(chǎn)環(huán)境已經(jīng)搭建完畢。希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持

相關(guān)文章

  • js阻止事件追加的具體實現(xiàn)

    js阻止事件追加的具體實現(xiàn)

    可以使用 e.stopPropagation(); e.preventDefault();來阻止事件冒泡,和默認事件的執(zhí)行。但不能阻止事件的追加,如要追加,請看下面的實現(xiàn)方法
    2014-10-10
  • 最新評論