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

 

 

 

posted @ 2020-08-13 16:00  SummerSatr  阅读(509)  评论(0编辑  收藏  举报