vuecli 3パッケージ仕様
4284 ワード
VUECLIを使用するプロジェクトのパッケージがオンラインになったとき、パッケージは大きく、jsもcssもchunk-vendorsにあることが分かった.jsとchunk-vendors.cssファイルの下.VUECLI 3に統合されたwebpack 4は、オンデマンド導入などのパッケージ作業を手伝ってくれますが、開発の過程ではまだ十分ではありません.最近のシロの開発過程で行われたパッケージ操作を簡単に説明します.
1.最も重要なのは最も基本的な操作であり、mapファイルをvueに生成しない.config.jsファイル(プロジェクトルートディレクトリの下で手動で新規作成されていない場合)で構成
mapファイルの役割:プロジェクトのパッケージ化後、コードはすべて圧縮暗号化され、実行時にエラーが発生した場合、出力されたエラー情報はどこのコードがエラーを報告したのか正確に知ることができません.mapがあれば暗号化されていないコードのように、正確な出力がどの行のどの列に間違っているかを知ることができます.
2.ルーティングベースの動的ロード
もちろんルーティングのグループ化(コンポーネントをブロック化)もできます
もちろん、webpackが2.4より大きい場合は、requireの代わりにvueでimport()を使用することを参照してください.Ensure()コードパッケージング分離を実現
3.コンポーネントオンデマンドロード現在のコンポーネントの多くはすでに実装されており、例えば私の前のvuecli 3 elementオンデマンドロードオンデマンド導入(スタイルを含む)について説明しています.
4.サーバーオープンGzip(vue-cli 3.0はすでにオープンしており、これは注目する必要はありません)5.CDNアクセラレータを有効にし、vue、vuex、routerなどの静的リソースをサーバにロードします.6.Bundle splittingインストールプラグイン
vueを変更します.config.jsファイル
参考Webパフォーマンスの最適化:Webpackを使用してデータを分離する正しい方法
1.最も重要なのは最も基本的な操作であり、mapファイルをvueに生成しない.config.jsファイル(プロジェクトルートディレクトリの下で手動で新規作成されていない場合)で構成
module.exports = {
// sourceMap
productionSourceMap:false
}
mapファイルの役割:プロジェクトのパッケージ化後、コードはすべて圧縮暗号化され、実行時にエラーが発生した場合、出力されたエラー情報はどこのコードがエラーを報告したのか正確に知ることができません.mapがあれば暗号化されていないコードのように、正確な出力がどの行のどの列に間違っているかを知ることができます.
2.ルーティングベースの動的ロード
// AMD require
const Home = resolve => require(['./Home.vue'], resolve);
//
const router = new VueRouter({
routes: [
{
path: '/home',
component: Home
}
]
})
もちろんルーティングのグループ化(コンポーネントをブロック化)もできます
// require.ensure Webpack , code-split point
const Home = r => require.ensure([], () => r(require('./Home.vue')), 'group-foo')
const Login = r => require.ensure([], () => r(require('./Login.vue')), 'group-foo')
もちろん、webpackが2.4より大きい場合は、requireの代わりにvueでimport()を使用することを参照してください.Ensure()コードパッケージング分離を実現
3.コンポーネントオンデマンドロード現在のコンポーネントの多くはすでに実装されており、例えば私の前のvuecli 3 elementオンデマンドロードオンデマンド導入(スタイルを含む)について説明しています.
4.サーバーオープンGzip(vue-cli 3.0はすでにオープンしており、これは注目する必要はありません)5.CDNアクセラレータを有効にし、vue、vuex、routerなどの静的リソースをサーバにロードします.6.Bundle splittingインストールプラグイン
npm install uglifyjs-webpack-plugin -S
vueを変更します.config.jsファイル
const path = require("path");
const UglifyPlugin = require("uglifyjs-webpack-plugin");
module.exports = {
lintOnSave: false, // eslint-loader
// see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
// webpack
// eslint-disable-next-line no-unused-vars
chainWebpack: config => {},
configureWebpack: config => {
if (process.env.NODE_ENV === "production") {
// ...
config.mode = "production";
// js
let optimization = {
runtimeChunk: "single",
splitChunks: {
chunks: "all",
maxInitialRequests: Infinity,
minSize: 20000,
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name(module) {
// get the name. E.g. node_modules/packageName/not/this/part.js
// or node_modules/packageName
const packageName = module.context.match(
/[\\/]node_modules[\\/](.*?)([\\/]|$)/
)[1];
// npm package names are URL-safe, but some servers don't like @ symbols
return `npm.${packageName.replace("@", "")}`;
}
}
}
},
minimizer: [
new UglifyPlugin({
uglifyOptions: {
compress: {
drop_console: true, // console
drop_debugger: false,
pure_funcs: ["console.log"] // console
}
}
})
]
};
Object.assign(config, {
optimization
});
} else {
// ...
config.mode = "development";
}
Object.assign(config, {
//
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
"@c": path.resolve(__dirname, "./src/components"),
"@p": path.resolve(__dirname, "./src/pages")
} //
}
});
},
productionSourceMap: false, // sourceMap
// css
css: {
extract: true, // css ExtractTextPlugin
sourceMap: false, // CSS source maps?
loaderOptions: {
css: {}, // css-loader
postcss: {} // postcss-loader
}, // css
modules: false // CSS modules for all css / pre-processor files.
},
parallel: require("os").cpus().length > 1 // Babel TypeScript thread-loader。 CPU , 。
};
参考Webパフォーマンスの最適化:Webpackを使用してデータを分離する正しい方法