1.使用alias簡化路徑
alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src') }
2.overlay介面彈出編譯錯誤
devServer: { overlay: { errors: true, warnings: true } }
3.import語句指定chunkName
webpack2用import來代替require.ensure,其無法直接指定chunkName,可以使用註釋的方式指定
import(/* webpackChunkName: "my-chunk-name" */ 'module');
4.Tree-shaking
只打包引用的方法,模組的為引用方法不被打包
什麼是 tree shaking,即 webpack 在打包的過程中會將沒用的程式碼進行清除(dead code)。一般 dead code 具有一下的特徵:
1. 程式碼不會被執行,不可到達
2. 程式碼執行的結果不會被用到
3. 程式碼只會影響死變數(只寫不讀)
Tree shaking 生效必要條件
1. 模組引入要基於 ES6 模組機制,不能使用 commonjs 規範,因為 es6 模組的依賴關係是確定的,和執行時的狀態無關,可以進行可靠的靜態分析,然後清除沒用的程式碼。而 commonjs 的依賴關係是要到執行時候才能確定下來的。
2. 開啟 UglifyJsPlugin 這個外掛對程式碼進行壓縮
5.Scope Hoisting
webpack以前使用獨立的函式包裝一個個模組檔案,webpack3可以將所有模組連線到一個閉包裡面,放入一個函式,執行速度更快,體積也會更小
scope hoisting,顧名思義就是將模組的作用域提升,在 webpack 中不能將所有所有的模組直接放在同一個作用域下,有以下幾個原因:
1. 按需載入的模組
2. 使用 commonjs 規範的模組
3. 被多 entry 共享的模組
想要webpack3開啟Scope Hoisting,必須在 plugins 中新增 ModuleConcatenationPlugin
6.不用使用DllPlugin外掛
7.內聯少量的css,減少請求
plugins: [ new StyleExtHtmlWebpackPlugin({ minify: true }) ]
8.preload外掛優化請求時間
plugins: [ new PreloadWebpackPlugin({ rel: 'preload', as: 'script', include: 'all' }) ]
9.UglifyJsPlugin配置優化
new UglifyJsPlugin({ // 最緊湊的輸出 beautify: false, // 刪除所有的註釋 comments: false, compress: { // 在UglifyJs刪除沒有用到的程式碼時不輸出警告 warnings: false, // 刪除所有的 `console` 語句 // 還可以相容ie瀏覽器 drop_console: true, // 內嵌定義了但是隻用到一次的變數 collapse_vars: true, // 提取出出現多次但是沒有定義成變數去引用的靜態值 reduce_vars: true, } })
10.引用某個資料夾中的所有檔案(webpack1有效,webpack2以上版本未知)
如果你希望達到如下的效果:
require('./behaviors/*') /* Doesn't work! */
你需要使用require.context:
//出處 http://stackoverflow.com/a/30652110/873870 function requireAll (r) { r.keys().forEach(r) } requireAll(require.context('./behaviors/', true, /\.js$/))s
各種require引用用法,參考此文
參考:https://juejin.im/post/59b9d2336fb9a00a636a3158
http://web.jobbole.com/93676/