vue-cli3单页面转多页面
一、创建一个vue项目
1、安装vue-cli@3.x
npm install -g @vue/cli
如果之前安装过vue-cli@2.x,则需要先进行卸载
npm uninstall vue-cli -g
2、创建项目
vue create projectName

创建好的项目目录如下

二、多页面转换目录调整
对目录进行修改,同步对文件进行相应的修改(修改引用路径及引用名称),src/pages 下的每一个项目即为一个单页面,都有其相应的router,store,views,app.vue,main.ts文件。public下为每一个单页创建其相应的html文件。
目录改造后如下

三、更改配置
1、根目录下创建build文件夹,新增以下三个文件
新增utils.js文件,输出需要用到的方法
utils.js
// 使用glob前需要进行安装,npm install glob --save-dev const glob = require('glob') const fs = require('fs') module.exports = { // 根据命令参数中的项目名称配置相应的pages getPages:globPath => { const entries = {} glob.sync(globPath).forEach(function(entry) { const paths = entry.split('/') || [] const moduleName = paths[3] let moduleIndexHtmlPath = `public/${moduleName}/index.html` let template = (fs.existsSync(moduleIndexHtmlPath) && moduleIndexHtmlPath) || 'public/index.html' entries[moduleName] = { entry, // 入口文件 template:template, // 模板文件 filename:'index.html' // 文件名 } }) return entries }, // 获取命令行中携带的项目名称 getCommandParam: key => { const reg = new RegExp(`^--${key}`) const index = process.argv.findIndex(argv => reg.test(argv)) return process.argv[index] && process.argv[index].split('=')[1] } }
新增dev.js文件,运行项目
const { exec } = require('child_process')
const projects = process.argv.slice(2)
projects.forEach(project => {
let workerProcess = exec('vue-cli-service serve --project=' + project,{
maxBuffer: 1024 * 1024 * 10
},(err) => {
if(err){
console.error(err)
}
})
workerProcess.stdout.on('data',function(data){
console.log(data)
})
})
新增build.js文件,打包项目
const { exec } = require('child_process')
const projects = process.argv.slice(2)
projects.forEach(project => {
let workerProcess = exec(`vue-cli-service build --project=${project}`, {maxBuffer: 1024*1024*10}, (err) => {
if (err) {
console.error(err)
}
})
workerProcess.stdout.on('data', function (data) {
console.log(data)
})
})
2、创建vue.config.js
vue.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。
const {getPages,getCommandParam} = require('./build/utils')
const fs = require('fs')
// 获取命令行中携带的需要构建的项目名称
const project = getCommandParam('project')
// 获取需要构建的项目的入口文件
const pages = getPages(`./src/pages/${project}/main.ts`)
module.exports = {
outputDir: `dist/${project}`, // 打包时的输入目录
publicPath: `/${project}`, // 基本路径
pages:{
...pages
},
chainWebpack:config => {
// 只把当前需要打包的项目的文件复制到dist相应的目录下
config.plugin('copy').tap(options => {
if(fs.existsSync(`public/${project}`)){
options[0][0] = {
from: `public/${project}`,
to:'',
toType:'dir',
ignore:[]
}
}else {
options[0] = []
}
return options
})
}
}
3、修改package.json
修改scripts对象

四、运行
// 运行单个项目 yarn serve about yarn serve home // 同时运行多个项目 yarn serve about home


浙公网安备 33010602011771号