一直以來更多的是進行單頁面開發。但在與其他同行的交流中,發現多頁面項目也是業務的一種需求,趁着今天有時間,今天搞了一下。
多頁面的配置,自然也可以根據路由的mode分為hash和history模式。
先說本人更熟悉的hash模式。
一,多頁面要有多個入口
默認使用vue-cli 2初始化的項目,需要修改webpack的entry參數,修改兩個入口,如下
// 原來
entry: {
app: './src/main.js'
},
// 修改后
entry: {
index: './src/index/main.js',
testp:'./src/testp/main.js'
}
二,利用HtmlWebpackPlugin插件配置兩個html文件。
// 文件1
new HtmlWebpackPlugin({
filename: 'index.html',
template: './index.html',
chunks: ["index"],
minify: {
removeComment: true,
collapseWhitespace: true
},
inject: true
}),
// 文件2
new HtmlWebpackPlugin({
filename: 'testp.html',
template: './testp.html',
chunks: ["testp"],
minify: {
removeComment: true,
collapseWhitespace: true
},
inject: true
})
當然需要創建兩個html,即index.html和testp.html。
三,改寫配置文件webpack.dev.conf.js
devServer: {
clientLogLevel: 'warning',
historyApiFallback: {
rewrites: [
// { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
{ from: /\/testp/, to: path.posix.join(config.dev.assetsPublicPath, 'testp.html') },
],
},
………………
這個是核心的。
最后hash模式下訪問需要類似這樣訪問http://localhost:8080/testp/#/。
至於mode為history模式,在開發環境下基本一致,除了訪問方式沒有#。另外就是多頁面的hash模式在生產環境下也需要后端配置的。
后續
如果是vue-cli3的項目,多頁面配置使用的是參數pages,類似下面這種形式
pages: {
ui: {
// page 的入口
entry: "src/views/index/main.js",
// 模板來源
template: "public/index.html",
// 在 dist/index.html 的輸出
filename: "index.html",
// 當使用 title 選項時,
// template 中的 title 標簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: "Index Page",
// 在這個頁面中包含的塊,默認情況下會包含
// 提取出來的通用 chunk 和 vendor chunk。
chunks: ["chunk-vendors", "chunk-common", "ui"]
},
hh: {
// page 的入口
entry: "src/views/ui/main.js",
// 模板來源
template: "public/ui.html",
// 在 dist/index.html 的輸出
filename: "ui.html",
// 當使用 title 選項時,
// template 中的 title 標簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: "Index Page",
// 在這個頁面中包含的塊,默認情況下會包含
// 提取出來的通用 chunk 和 vendor chunk。
chunks: ["chunk-vendors", "chunk-common", "hh"]
},
……………………
