作者:Pingac | 来源:互联网 | 2023-09-25 17:20
模板工程-githubsrc目录结构因为是自定义的设置,src下的目录结构需要固定,约定大于配置嘛。src目录结构:srccomponentsmodules#多页面index#in
模板工程-github
src目录结构
因为是自定义的设置,src下的目录结构需要固定,约定大于配置嘛。
src目录结构:
src/
components/
modules/ # 多页面
index/ # index 单页面
index.html
main.js # 入口文件
page1/
index.html
main.js
group/
page2/
index.html
main.js
build中的配置
utils.js 增加:
// match files
let glob = require('glob');
/**
* globPath 获取泛路径下的特定文件
*/
exports.getEntities = function (path) {
let entities = {};
glob.sync(path).forEach(function (entity) {
let moduleName = entity.split('/').slice(-2,-1);
entities[moduleName] = entity
});
// eg: { main: './src/module/index/main.js', test: './src/module/group/test/main.js' }
return entities;
};
webpack.base.conf.js 修改输入和输出:
module.exports = {
// 遍历获取入口文件
entry: utils.getEntities("./src/modules/**/main.js"),
...
plugins:[]
};
/***
* 生成 /index.html
*/
let utils = require('./utils')
let pages = utils.getEntities("./src/modules/**/index.html");
for (let page in pages) {
let filename = "index.html";
if(page!=='index'){
filename = page+"/index.html";
}
module.exports.plugins.push(new HtmlWebpackPlugin({
filename: filename,
template: pages[page],
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',
chunks: ['manifest','vendor',page]
}));
}
同时,webpack.dev.conf.js和webpack.prod.conf.js中的HtmlWebpackPlugin删除。
这时,访问localhost:8080/和localhost:8080/page1即可看到效果。
vue-router history模式下的多页面支持
vue-router history模式需要web server支持,这里演示dev环境下的express支持多页面的history模式。
build/dev-server.js 在原来require('connect-history-api-fallback')
地方修改:
// handle fallback for HTML5 history API
// rewrite的时候注意 js文件也会被rewrite
let utils = require("./utils");
let history = require('connect-history-api-fallback');
let pages = utils.getEntities("./src/modules/**/index.html");
let rewrites = [];
for(let page in pages){
// match: /page/* or /page
rewrites.push({from: new RegExp('\/'+page+'\/|^\/'+page+'$'), to: '/'+page+'/index.html'})
}
app.use(history({
rewrites: rewrites
}));