vue+webpack 多页面配置
2019-04-08 本文已影响0人
小枫学幽默
其实多页面的根本就是
webpack
多入口和HtmlWebpackPlugin
的多页面输出
要生成的多页面配置(pageConfig.js)
module.exports=[
{
entry_name:"login",
title:"爱问医生-登录"
},
{
entry_name:"register",
title:"爱问医生-注册"
},
{
entry_name:"pw_retrieve",
title:"爱问医生-找回密码"
},
{
entry_name:"user_edit",
title:"爱问医生-个人信息"
}
];
生成多入口【build\webpack.base.conf.js】
var appPageArr = require("../src/pageConfig");
var configEntry = {};
appPageArr.forEach((page) => {
configEntry[page.entry_name] =`./src/pages/${page.entry_name}.js`;
});
module.exports = {
entry: configEntry,
output: {
path: config.build.assetsRoot,
filename: "[name].js",
publicPath: process.env.NODE_ENV === "production"
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
...
}
开发服务器生成多页面
//多入口生成
var appPageArr = require("../src/pageConfig");
//生成多个html文件
var configHtmlWebpackPlugin = [];
appPageArr.forEach((page) => {
configHtmlWebpackPlugin.push(new HtmlWebpackPlugin({
chunks:["manifest", "vendor",page.entry_name],
filename: page.entry_name+".html",
title: page.title,
template: "index.html",
inject: true
})
);
});
//===========================
module.exports = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
},
// cheap-module-eval-source-map is faster for development
devtool: "#cheap-module-eval-source-map",
plugins: [
new webpack.DefinePlugin({
"process.env": config.dev.env
}),
// https://github.com/glenjamin/webpack-hot-middleware#installation--usage
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
...configHtmlWebpackPlugin,
new FriendlyErrorsPlugin()
]
});
打包配置(打包成多个文件)
var appPageArr = require("../src/pageConfig");
var configHtmlWebpackPlugin = [];
appPageArr.forEach((page) => {
configHtmlWebpackPlugin.push(new HtmlWebpackPlugin({
chunks:["manifest", "vendor",page.entry_name],
filename: page.entry_name+".html",
template: "index.html",
title: page.title,
inject: true,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: "dependency"
})
);
});
//接下来引用
var webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true
})
},
devtool: config.build.productionSourceMap ? "#source-map" : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath("js/[name].[chunkhash].js"),
chunkFilename: utils.assetsPath("js/[id].[chunkhash].js")
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new injectScriptPlugin({
paths: [],
condition: "<!-- codeInject -->",
injectCode: "<script>var __init_res_code= '${res.code}';var __init_res_msg= '${res.msg}';</script>"
}),
new webpack.DefinePlugin({
"process.env": env
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
sourceMap: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath("css/[name].[contenthash].css")
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: {
safe: true
}
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
...configHtmlWebpackPlugin,
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: "vendor",
minChunks: function (module, count) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, "../node_modules")
) === 0
);
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: "manifest",
chunks: ["vendor"]
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, "../static"),
to: config.build.assetsSubDirectory,
ignore: [".*"]
}
])
]
});