最近升級了基於vue2.0+webpack1.0開發的基礎cms框架,vue升級爲最新2.5版本,webpack升級爲3.8版本。升級過程當中順便作了下項目的構建優化,具體圍繞如下幾點來實踐:html
vue-loader
配置webpack
外部擴展(Externals) 配置webpack DllPlugin
和DllReferencePlugin
配置happypack
多進程loader構建配置vue
webpack-parallel-uglify-plugin
生成環境多進程構建配置node
Webpack 3 的新功能:Scope Hoistingjquery
vue-loader相較之前有了大的改變,之前的 loader:"vue" 需更改成 loader:"vue-loader",須要詳細配置options的相關參數。android
vue-cli 工具生成的vue-loader 配置比較完整,但文件比較多,咱們應該按照本身的項目按需配置。webpack
具體options參數請參考:vue-loader.vuejs.org/zh-cn/ios
本項目loader配置以下:git
解釋:防止將某些 import 的包(package)打包到 bundle 中,而是在運行時(runtime)再去從外部獲取這些擴展依賴(external dependencies)。es6
所以不少框架和庫咱們能夠放在CDN,編譯時不須要打包到生產文件中。github
參考連接:doc.webpack-china.org/configurati…
以官方的JQUERY爲例子:
1.jquery在html內映入
2.webpack.base.config.js 新增以下配置
至此能夠在項目的任何地方 import $ from 'jquery' 使用
參考連接:doc.webpack-china.org/plugins/dll…
DLLPlugin 和 DLLReferencePlugin 用某種方法實現了拆分 bundles,同時還大大提高了構建的速度。
解析:咱們經常使用的框架或者包是不會頻繁更新的,甚至是引入第一次以後就不會再作更改,針對於這種狀況,爲何不把它單獨的拆分爲一個或多個bundles呢。
DllPlugin 的核心就在這裏,拆分不須要常常更改的包,而沒必要每次都重新編譯。
具體體現到本項目以下:
參考連接:www.npmjs.com/package/hap…
HappyPack makes webpack builds faster by allowing you to transform multiple files in parallel.
HappyPack使webpack構建更快,容許你並行轉換多個文件。
項目對.vue.、js、.sass 文件進行了happyPack配置以下:
參考連接:www.npmjs.com/package/web…
webpack提供的UglifyJS插件是單線程編譯的,這個插件爲每一個可用的cpus的線程並行運行的uglify,所以能夠加快webpack的生產構建過程。
webpack.product.config.js新增以下配置:
uglifyES的參數請參考:www.npmjs.com/package/ugl…
uglifyJS的參數請參考:www.npmjs.com/package/ugl…
此配置簡單就是在webpack.product.config.js 配置webpack.optimize.ModuleConcatenationPlugin 插件
備註:此插件只對ES2015語法有效,所以使用babel編譯以後的代碼沒有多大的提高。
參考連接:www.npmjs.com/package/bab…
babel-preset-env 是一個新的preset,新版 babel-loader 推薦使用的環境預設插件,它的功能很強大,經過根據您的目標瀏覽器或運行時環境自動肯定您須要的Babel插件。
最強大的使用就在 targets 配置,支持 chrome, opera, edge, firefox, safari, ie, ios, android, node, electron.
具體的target配置請參考:www.npmjs.com/package/bro…
此篇文章,有完整的項目源碼,vue2.5+webpack3.8
搭建的集成cms框架 ,後期有新的優化也會實時更新,再此給你們一個參考做用
關注個人博客:zane的我的博客