本篇记录尝试用vue-cli4构建一个多页应用的过程。
参照官方文档的说明,构建一个多页应用,只需要利用vue.config.js
中的page
option即可。
从[官方配置参考]可看到,page
option默认是undefined,只要按照配置要求,进行了配置,vue-cli会根据该配置的内容,自动进行多页应用的构建。不想再搬运官方文档对page
option的说明,我直接做了一个demo来了解这个过程。demo地址:vue-multi-page-demo
demo的项目结构:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26public/
favicon.ico
index.html
src/
assets/
logo.png
components/
HelloWorld.vue
pages/
about/
App.vue
main.js
index/
App.vue
some/
module/
App.vue
.browserslistrc
.editorconfig
.eslintrc.js
.gitignore
README.md
babel.config.js
package-lock.json
package.json
vue.config.js
如你所见,多页应用在src
下面新增了pages
文件夹,来存储多页的页面结构。 每个叶子文件夹代表一个可访问的页面,每个页面包含App.vue
作为它的入口组件,每个页面包含的main.js
作为该页被构建时的入口文件。
最关键的vue.config.js
配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17const createPage = (name, title, chunk = '')=>{
return {
entry: `src/pages/${name}/main.js`,
template: 'public/index.html',
filename: `${name}.html`,
title,
chunks: ['chunk-vendors', 'chunk-common', chunk || name]
}
}
module.exports = {
pages: {
index: createPage('index', '首页'),
about: createPage('about', '关于我们'),
'some_module': createPage('some/module', '某一个子页面', 'some_module'),
}
}
新增了一个简单的createPage
函数,来简化每个页面的配置对象的创建逻辑,每个页面的配置对象,都使用相同的template
option,也就是public/index.html
这个文件。 为了让title
option生效,必须将public/index.html
文件内的title修改为:1
<title><%= htmlWebpackPlugin.options.title %></title>
其它模板内容可根据项目情况自行添加,或者新增其它页面作为模板,假如public/index.html
不能满足项目需求的情况时。
官方文档有提醒:
当在 multi-page 模式下构建时,webpack 配置会包含不一样的插件 (这时会存在多个 html-webpack-plugin 和 preload-webpack-plugin 的实例)。如果你试图修改这些插件的选项,请确认运行 vue inspect。
这个需要在项目中注意。