VueCli多页配置

标签: Vue 分类: Javascript 创建时间:2019-07-08 07:46:27 更新时间:2023-10-20 11:23:26

在vue cli3.0中,添加了对多页面的支持,主要是在vue.config.js中添加pages配置项,pages配置项是”一个指定了 entry, template, filename, title 和 chunks 的对象 (除了 entry 之外都是可选的);”,所以使用vue create exame创建一个单页面应用,然后改造目录结构,删掉不需要的main.js、App.vue、route.js等,添加pages文件夹,文件夹下新建页面文件夹,类似于这样:

然后添加vue.config.js,在其中加入对pages的配置:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
let path = require('path')
let glob = require('glob')
const fs = require('fs')
//配置pages多页面获取当前文件夹下的html和js
function getEntry(globPath) {
let pages = {},basename, tmp, pathname;
let pathArray=glob.sync(globPath);
if(pathArray.length<=0){
return {'main':"./src/main.js"};
}
glob.sync(globPath).forEach(function(entry) {
basename = path.basename(entry, path.extname(entry));
tmp = entry.split('/').splice(-3);
pathname = basename; // 正确输出js和html的路径
let pageJs = tmp.join('/') + '/index.js'
//如果入口文件不存在,跳过
if (!fs.existsSync(pageJs)) {
console.log(pageJs+",页面入口文件不存在。");
return;
}
let pageHtml = tmp.join('/') + '/index.html'
//如果模板文件不存在使用默认的模板文件
if (!fs.existsSync(pageHtml)) {
pageHtml = './public/index.html'
}

pages[pathname] = {
entry: pageJs,
template: pageHtml,
title: tmp[2],
filename: tmp[2]
};
});
return pages;
}

let pages = getEntry('./src/pages/**?');
module.exports = {
lintOnSave: false, //禁用eslint
publicPath:process.env.NODE_ENV === "production"?'/':'./',
productionSourceMap: false,
pages:pages,
devServer: {
host: '',
port: 8088,
https: false,
hotOnly: false,
}
}

主要是添加了getEntry函数,还有就是添加了module.exports添加了pages字段,至于其他的更多的配置,自己可以继续的优化,比如chainWebpack,configureWebpack,可以根据自己的需要进行添加。然后运行yarn serve,打开localhost:8088/home即可查看到页面home了。

完整代码:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
let path = require('path')
let glob = require('glob')
const fs = require('fs')
//配置pages多页面获取当前文件夹下的html和js

let home="";//浏览器打开的页面
function getEntry(globPath) {
let pages = {},basename, tmp, pathname;
let pathArray=glob.sync(globPath);
if(pathArray.length<=0){
return {'main':"./src/main.js"};
}
glob.sync(globPath).forEach(function(entry) {
basename = path.basename(entry, path.extname(entry));
tmp = entry.split('/').splice(-3);
pathname = basename; // 正确输出js和html的路径
let pageJs = tmp.join('/') + '/index.js'
//如果入口文件不存在,跳过
if (!fs.existsSync(pageJs)) {
console.log(pageJs+",页面入口文件不存在。");
return;
}
let pageHtml = tmp.join('/') + '/index.html'
//如果模板文件不存在使用默认的模板文件
if (!fs.existsSync(pageHtml)) {
pageHtml = './public/index.html'
}
if(!home){
home="/"+tmp[2];
}

pages[pathname] = {
entry: pageJs,
template: pageHtml,
title: tmp[2],
filename: tmp[2]
};
});
return pages;
}

let pages = getEntry('./src/pages/**?');
module.exports = {
publicPath:process.env.NODE_ENV === "production"?'/':'./',
productionSourceMap: false,
pages:pages||null,
devServer: {
host: '',
port: 8088,
https: false,
hotOnly: false,
open: true,
openPage:home?home:"/"
},
chainWebpack: config => {
config.module
.rule('images')
.use('url-loader')
.loader('url-loader')
.tap(options => {
// 修改它的选项...
options.limit = 100
return options
})
Object.keys(pages).forEach(entryName => {
config.plugins.delete(`prefetch-${entryName}`);
});
if(process.env.NODE_ENV === "production") {
config.plugin("extract-css").tap(() => [{
path: path.join(__dirname, "./dist"),
filename: "css/[name].[contenthash:8].css"
}]);
}
},
// configureWebpack: config => {
// if(process.env.NODE_ENV === "production") {
// config.output = {
// path: path.join(__dirname, "./dist"),
// filename: "js/[name].[contenthash:8].js"
// };
// }
// }
}
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。