摘要:使用打包的基本上都是獨立庫文件,這類文件有一個特性就是變化不大。修改往添加一個配置只針對的模塊化有效配置文件詳情請點擊
基于vue-cli優化的webpack配置
大概分為以下幾點
通過 externals 配置來提取常用庫,引用外鏈
配置CommonsChunkPlugin提取公用代碼 (vue-cli已做)
善用alias(vue-cli配置了一部分)
啟用DllPlugin和DllReferencePlugin預編譯庫文件
happypack開啟多核構建項目
將webpack-parallel-uglify-plugin來替換webpack本身的UglifyJS來進行代碼壓縮混淆
升級webpack至3.x版本開啟Scope Hoisting
externalsCommonsChunkPlugin文檔地址 https://doc.webpack-china.org...
防止將某些 import 的包(package)打包到 bundle 中,而是在運行時(runtime)再去從外部獲取這些擴展依賴(external dependencies)。
resolve.alias文檔地址 https://doc.webpack-china.org...
CommonsChunkPlugin 插件,是一個可選的用于建立一個獨立文件(又稱作 chunk)的功能,這個文件包括多個入口 chunk 的公共模塊。通過將公共模塊拆出來,最終合成的文件能夠在最開始的時候加載一次,便存起來到緩存中供后續使用。這個帶來速度上的提升,因為瀏覽器會迅速將公共的代碼從緩存中取出來,而不是每次訪問一個新頁面時,再去加載一個更大的文件。
DllPlugin和DllReferencePlugin文檔地址 https://doc.webpack-china.org...
創建 import 或 require 的別名,來確保模塊引入變得更簡單。例如,一些位于 src/ 文件夾下的常用模塊:
文檔地址 https://doc.webpack-china.org...
Dll打包以后是獨立存在的,只要其包含的庫沒有增減、升級,hash也不會變化,因此線上的dll代碼不需要隨著版本發布頻繁更新。使用Dll打包的基本上都是獨立庫文件,這類文件有一個特性就是變化不大。,只要包含的庫沒有升級, 增減,就不需要重新打包。這樣也提高了構建速度。
一般是用于打包階段
在build文件夾下新建webpack.dll.conf.js文件
var path = require("path"); var webpack = require("webpack"); var AssetsPlugin = require("assets-webpack-plugin"); var CleanWebpackPlugin = require("clean-webpack-plugin"); var config = require("../config"); var env = config.build.env; module.exports = { entry: { libs: [ "babel-polyfill", "vue/dist/vue.esm.js", "vue-router", "vuex", "element-ui", "echarts", "mockjs", ], }, output: { path: path.resolve(__dirname, "../libs"), filename: "[name].[chunkhash:7].js", library: "[name]_library", }, plugins: [ new webpack.DefinePlugin({ "process.env": env, }), new webpack.DllPlugin({ path: path.resolve(__dirname, "../libs/[name]-mainfest.json"), name: "[name]_library", context: __dirname, // 執行的上下文環境,對之后DllReferencePlugin有用 }), new ExtractTextPlugin("[name].[contenthash:7].css"), new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false, }, }), new AssetsPlugin({ filename: "bundle-config.json", path: "./libs", }), new CleanWebpackPlugin(["libs"], { root: path.join(__dirname, "../"), // 絕對路徑 verbose: true, dry: false, }), ], module: { rules: [ { test: /.js$/, loader: "babel-loader", }, ], }, };
在build文件夾下新建build-dll.js文件
var path = require("path"); var webpack = require("webpack"); var dllConfig = require("./webpack.dll.conf"); var chalk = require("chalk"); var rm = require("rimraf"); var ora = require("ora"); var spinner = ora({ color: "green", text: "building for Dll..." }); spinner.start(); rm(path.resolve(__dirname, "../libs"), err => { if (err) throw err; webpack(dllConfig, function(err, stats) { spinner.stop(); if (err) throw err; process.stdout.write( stats.toString({ colors: true, modules: false, children: false, chunks: false, chunkModules: false }) + " " ); console.log(chalk.cyan(" build dll succeed !. ")); }); });
修改webpack.prod.conf.js文件
var bundleConfig = require("../libs/bundle-config.json"); ... ... plugins: [ // 增加DllReferencePlugin配置 new webpack.DllReferencePlugin({ context: __dirname, manifest: require("../libs/libs-mainfest.json") // 指向生成的manifest.json }), ... ... new HtmlWebpackPlugin({ ... // 增加兩個變量 libJsName: bundleConfig.libs.js, libCssName: bundleConfig.libs.css, }), ... ... // 增加一個靜態文件目錄 new CopyWebpackPlugin([ ... ... { from: path.resolve(__dirname, "../libs"), to: config.build.assetsSubDirectory, ignore: ["*.json"] } ]) ]
修改模版文件index.html
<% if (htmlWebpackPlugin.options.libCssName){ %> <% } %> <% if (htmlWebpackPlugin.options.libJsName){ %> <% } %>
修改package.json,增加scripts
"scripts": { // 增加 "dll": "node build/build-dll.js" },
npm run dll先執行預編譯,然后在打包項目文件,如果引入的類庫文件沒有變更就不再需要再次執行預編譯
happypack文檔地址 https://github.com/amireh/hap...
一般node.js是單線程執行編譯,而happypack則是啟動node的多線程進行構建,大大提高了構建速度。
在插件中new一個新的happypack進程出來,然后再使用使用loader的地方替換成對應的id
修改webpack.base.conf.js文件
var HappyPack = require("happypack"); var os = require("os"); var happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); ... ... // 增加plugins plugins: [ new HappyPack({ id: "happy-babel-js", loaders: ["babel-loader?cacheDirectory=true"], threadPool: happyThreadPool, }) ] ... ... // 修改對應loader { test: /.js$/, loader: "happypack/loader?id=happy-babel-js", include: [resolve("src"), resolve("test")], }webpack-parallel-uglify-plugin
文檔地址 https://github.com/gdborton/w...
webpack提供的UglifyJS插件由于采用單線程壓縮,速度很慢 ,
webpack-parallel-uglify-plugin插件可以并行運行UglifyJS插件,這可以有效減少構建時間。
修改webpack.prod.conf.js文件
var ParallelUglifyPlugin = require("webpack-parallel-uglify-plugin"); ... ... // 刪掉webpack提供的UglifyJS插件 // new webpack.optimize.UglifyJsPlugin({ // compress: { // warnings: false, // drop_console: true // }, // sourceMap: true // }), // 增加 webpack-parallel-uglify-plugin來替換 new ParallelUglifyPlugin({ cacheDir: ".cache/", uglifyJS:{ output: { comments: false }, compress: { warnings: false } } }),webpack 3
webpack3新特性一覽 https://juejin.im/entry/59714...
webpack 3.x 提供了一個新的功能:Scope Hoisting,又譯作“作用域提升”。只需在配置文件中添加一個新的插件,就可以讓 Webpack 打包出來的代碼文件更小、運行的更快。
修改webpack.prod.conf.js
... ... plugins: [ // 往plugins添加一個配置 // ps 只針對es6的模塊化有效 new webpack.optimize.ModuleConcatenationPlugin(), ]
ps:配置文件詳情請點擊 https://github.com/liaoyinglo...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89322.html
摘要:作為目前最熱門最具前景的前端框架之一,其提供了一種幫助我們快速構建并開發前端項目的新的思維模式。的新版本,的簡稱。的包管理工具,用于同一管理我們前端項目中需要用到的包插件工具命令等,便于開發和維護。 Vue.js作為目前最熱門最具前景的前端框架之一,其提供了一種幫助我們快速構建并開發前端項目的新的思維模式。本文旨在幫助大家認識Vue.js,了解Vue.js的開發流程,并進一步理解如何通...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:在谷歌找多頁面,實例還是比較少,功夫不負有心人,在那找到了,具體可以到這個,非常感謝童鞋,今天要講的內容是基于童鞋的多頁面實例上再優化的。有需要一起交流的可以加我的微信,,記得備注技術交流哈。 vue+webpack是否有多頁面 目前使用vue來做項目,估計大部分都是單頁面(SPA)應用,一個輕型的 MVVM 框架,誰用了MVVM框架,就再也回不去JQ時代了,哈哈。 在手機端的項目,使...
閱讀 3016·2021-10-08 10:18
閱讀 732·2019-08-30 15:54
閱讀 1067·2019-08-29 18:43
閱讀 2441·2019-08-29 15:33
閱讀 1305·2019-08-29 15:29
閱讀 1604·2019-08-29 13:29
閱讀 1026·2019-08-26 13:46
閱讀 1702·2019-08-26 11:55