轉載自:https://www.cnblogs.com/ye-hcj/p/7087205.htmlcss
webpack.dev.conf.js詳解html
//引入當前目錄下的utils.js文件模塊
var utils = require('./utils')
//node的path模塊 var path = require('path')
//內置模塊 var webpack = require('webpack')
//引入config目錄下的index.js文件 var config = require('../config')
//進行合併對象,相同項目會進行覆蓋 var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
// 下面是一個自動生成html的插件,可以把資源自動加載到html文件中
// 詳情請看 (1) var HtmlWebpackPlugin = require('html-webpack-plugin')
// 下面這個插件是用來把webpack的錯誤和日誌收集起來,漂亮的展現給用戶
// 詳情請看 (2) var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
//=======================靜態編譯ssi資源==================================
var SSICompileWebpackPlugin = require('ssi-webpack-plugin') // add hot-reload related code to entry chunks
// Object.keys(obj) Object.keys() 方法會返回一個由一個給定對象的自身可枚舉屬性組成的數組,
//數組中屬性名的排列順序和使用 循環遍歷該對象時返回的順序一致 (二者的主要區別是 一個 for-in 循環還會枚舉其原型鏈上的屬性)。
Object.keys(baseWebpackConfig.entry).forEach(function (name) {
// 下面這個結果就是把webpack.base.conf.js中的入口entry改爲以下配置
// app: ['./build/dev-client','./src/main.js'] //即數組多加了一個元素 baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) })
// 下面是合併配置對象,將這個配置文件特有的配置添加替換到base配置文件中 module.exports = merge(baseWebpackConfig, { module: {
// 下面是把utils配置中的處理css相似文件的處理方法拿過來,而且不生成cssMap文件 rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) }, // cheap-module-eval-source-map is faster for development
// devtool是開發工具選項,用來指定如何生成sourcemap文件,cheap-module-eval-source-map此款soucemap文件性價比最高
devtool: '#source-map', plugins: [
// DefinePlugin內置webpack插件,專門用來定義全局變量的,下面定義一個全局變量 process.env 而且值是以下
/* 'process.env': { NODE_ENV: '"development"' }
這樣的形式會被自動轉爲 'process.env': '"development"'
各位騷年看好了,development若是不加雙引號就當作變量處理,程序會報錯 */ new webpack.DefinePlugin({ 'process.env': config.dev.env }), //提取公共代碼塊 babel-polyfill只能有一個實例
new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', chunks: ['index', 'admin'], minChunks: function (module, count) { return ( module.resource &&
/\.js$/.test(module.resource) && module.resource.indexOf( path.join(__dirname, '../node_modules') ) === 0 ) } }), // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
new webpack.HotModuleReplacementPlugin(),
// 下面這個插件比較簡單,就是當webpack編譯錯誤的時候,來中端打包進程,防止錯誤代碼打包到文件中,你還不知道 new webpack.NoEmitOnErrorsPlugin(), // https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', favicon: './src/assets/images/favicon.ico', excludeChunks: ['admin'], inject: true }), new HtmlWebpackPlugin({ filename: 'admin.html', template: 'admin.html', favicon: './src/assets/images/favicon.ico', excludeChunks: ['index'], inject: true }), new SSICompileWebpackPlugin({ publicPath:'', localBaseDir:'C:/Developer/newWorkspace', minify:false }), new FriendlyErrorsPlugin() ] })for...in
(1)html-webpack-plugin插件是用來生成html文件的,有很靈活的配置項,下面是基本的一些用法 plugins: [ new HtmlWebpackPlugin(), // Generates default index.html new HtmlWebpackPlugin({ // Also generate a test.html filename: 'test.html', // 生成的文件的名稱 title: 'Custom template', // 文件的標題 template: 'my-index.ejs' //能夠指定模塊html文件 }) ] 下面是模板文件my-index.ejs的內容 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> <title><%= htmlWebpackPlugin.options.title %></title> //這裏使用特殊的表示插入配置項的title </head> <body> </body> </html> (2)friendly-errors-webpack-plugin插件,把webpack編譯出來的錯誤展現給咱們,方便調試 安裝 npm install friendly-errors-webpack-plugin --save-dev 基本使用 plugins: [ new FriendlyErrorsWebpackPlugin(), ] 注意點,使用這個插件要遵照下點 您須要關閉全部的錯誤日誌記錄,將webpack配置靜默選項設置爲true 也就是遵循如下三點便可 在使用webpack-dev-middleware插件,關於這個插件的解釋在個人dev-sever-js配置文件中有解釋,設置如下內容 app.use(require('webpack-dev-middleware')(compiler, { quiet: true, // 必須設置 publicPath: config.output.publicPath, })); 使用webpack-dev-server時設置以下 { devServer: { quiet: true } } 使用webpack-hot-middleware中間件,關於這個插件的解釋也在個人dev-server-js文章中 app.use(require('webpack-hot-middleware')(compiler, { log: () => {} })); 作到以上幾點,就能夠正常使用這個插件了,這個插件還有一些配置項,感興趣自行了解 (3) HotModuleReplacementPlugin解釋以下 老哥們知道什麼是webpack模塊不 webpack支持以下模塊 CoffeeScript TypeScript ESNext (Babel) Sass Less Stylus 這些模塊支持以下導入的方式 ES2015 import 語句 CommonJS require() 語句 AMD define 和 require 語句 css/sass/less 文件中的 @import 語句。 樣式(url(...))或 HTML 文件(<img src=...>)中的圖片連接(image url) 看到了把,webpack就是這麼強大,幾乎囊括了前端全部的東西 這個插件的做用就是當你的程序在運行時,而你如今要替換、添加或刪除某個模塊,又不想從新加載頁面, 這個插件幫助你實現無刷新加載,關於內部實現原理,其實有點意思,各位請自行查看