この記事では主に vue-cli の webpack3 構築と総合的な高速化の最適化についての詳細な説明を紹介し、参考にさせていただきます。
前書き
vue のグローバル化に伴い、初期の element-ui から vux、iview、その他のますます高品質なプロジェクトに至るまで、vue はすでにフロントエンドに使用されています。これはエンジニアリング、モジュラー、アジャイルなものです
この中で、多くの人は公式の vue-cli 初期化プロジェクト テンプレートを選択し、サードパーティのコンポーネント フレームワークとツールを導入して開発および構築すると思います。このアプローチをお勧めします。ただし、vue-cli によって初期化されるプロジェクト テンプレートは結局のところすべての開発者向けであり、互換性の点である程度の妥協が必要になります。多くの人がさまざまな Webpack ビルド最適化に関する記事を検索したと思いますが、その多くは古すぎたり、厳密ではなかったりします
この記事では、時間のかかる最適化とビルドのパフォーマンス向上のバランスをとること、つまり、時間を最小限に抑えることを目指しています。公式テンプレートへの最小限の変更でビルド パフォーマンスを最大限に向上させる
アイデア
vue-cli と webpack2 の初期バージョンでは、次のような最適化された構成がインターネット上に出回っていましたが、実際には vue-cli と webpack2 の新しいバージョンでは、 cli と webpack3 は不要になりました
ParallelUglifyPlugin を使用して UglifyPlugin を置き換えます (新しいバージョンの UglifyPlugin はデフォルトでマルチスレッド並列ビルドをすでにサポートし、有効にしているため、この手順は必要ありません)
webpack3 のスコープホイスティングを有効にします(新しいバージョンの vue-cli は webapck3 で設定されており、この設定はデフォルトでオンになっています)
エイリアスを上手に活用してください (新しいバージョンの vue-cli はすでにこの作業を行っています)
パブリック コードを抽出するように CommonsChunkPlugin を設定します (vue-cli の新しいバージョンではこの作業がすでに行われています)
vue-cli と webpack3 の新しいバージョンでは、次の簡単な設定によりビルド速度が少なくとも 2 倍向上します最適化後
オンデマンドで参照
happypack マルチコアビルドプロジェクトを有効にする
ソースマップ構成を変更する
DllPlugin および DllReferencePlugin のプリコンパイルされたライブラリ ファイルを有効にする
練習
1. オンデマンド リファレンス
1.1 ほとんどすべてのサードパーティ コンポーネント フレームワークは、iview を例として、コンポーネントのオンデマンド リファレンスを提供します。プラグイン babel-plugin-import を使用すると、コンポーネントをオンデマンドでロードし、ファイル サイズを減らすには、.babelrc ファイルを変更するだけです
npm install babel-plugin-import --save-dev // .babelrc { "plugins": [["import", { "libraryName": "iview", "libraryDirectory": "src/components" }]] }
happypack マルチコア ビルド プロジェクトを有効にします
/build/webpack.base.conf.js ファイルimport { Button } from 'iview' Vue.component('Table', Table)
npm install happypack --save-dev // /build/webpack.base.conf.js const HappyPack = require('happypack') const os = require('os') const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }) // 增加HappyPack插件 plugins: [ new HappyPack({ id: 'happy-babel-js', loaders: ['babel-loader?cacheDirectory=true'], threadPool: happyThreadPool, }) ] // 修改引入loader { test: /\.js$/, // loader: 'babel-loader', loader: 'happypack/loader?id=happy-babel-js', // 增加新的HappyPack构建loader include: [resolve('src'), resolve('test')] }
// /config/index.js dev环境:devtool: 'eval'(最快速度) prod环境:productionSourceMap: false(关闭source-map)
// /src/main.js const isDebug_mode = process.env.NODE_ENV !== 'production' Vue.config.debug = isDebug_mode Vue.config.devtools = isDebug_mode Vue.config.productionTip = isDebug_mode
const path = require("path") const webpack = require("webpack") module.exports = { // 你想要打包的模块的数组 entry: { vendor: ['vue/dist/vue.esm.js', 'axios', 'vue-router', 'iview'] }, output: { path: path.join(__dirname, '../static/js'), // 打包后文件输出的位置 filename: '[name].dll.js', library: '[name]_library' }, plugins: [ new webpack.DllPlugin({ path: path.join(__dirname, '.', '[name]-manifest.json'), name: '[name]_library', context: __dirname }), // 压缩打包的文件 new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }) ] }
new webpack.DllReferencePlugin({ context: __dirname, manifest: require('./vendor-manifest.json') })
"dll": "webpack --config ./build/webpack.dll.config.js"
<script src="/static/js/vendor.dll.js"></script>
上記は私が皆さんのためにまとめたものであり、今後皆さんのお役に立てれば幸いです。
関連記事:
jestを使ってテストする方法を詳しく解説ネイティブコンポーネントに反応します
データバインディングと取得を実現するためにvueですべてを選択します
以上がvue-cli での webpack3 速度の最適化に関連する問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。