vue 3.0 实现多页面应用

2019-12-03  本文已影响0人  __小白___

多页面的实现,主要是动态配置vue.config.js的page属性。我们来看看如何实现
1.我们看下目录结构


image.png
projectList   //所有多页面的存放
    projectA   //单个页面
        main.js   //入口
        index.html //渲染模版
    projectB
       main.js
       index.html

2.根据上面的这个文档结构,我们需要通过glob插件动态获取main.js以及index.html的文件路径。当然我们也可以直接在vue.config.js中这样配置

pages:{
    projectA:{
     entry:"./src/projectA/main.js"
    } 
}

如果我们写死的话,页面少很方便,但是页面一多,那就难搞了。
所以我们回到正题
3.在根目录新建productConfig.js

var glob = require("glob");
// 生成入口文件配置 
let entryConfig = {
   moduleList:[],
   // 开发的页面配置  默认是编译projectList下所有的子项目 
   createEntryConfig_dev() {
      let entryList = {};
      // 获取所有的moduleList
      glob.sync('./src/projectList/**/*').forEach(item => {
         let projectName = item.split('/')[3];
         if (!this.moduleList.includes(projectName)) {
            this.moduleList.push(projectName)
         }

      });
      for (const name of this.moduleList) {
         entryList[name] = {
            'entry': `./src/projectList/${name}/main.js`,
         }
      }
      console.log("result", entryList)
      return entryList;
   },
   ///根据传入的参数来决定要打包哪个页面/项目
   createEntryConfig_build(projectName){
      console.log(projectName,"projectname")
      let entryList = {};
      entryList[projectName] = {
         'entry': `./src/projectList/${projectName}/main.js`,
      }
      return entryList;
   }


}
module.exports = entryConfig;

4.在vue.config.js中引入生成的pages配置即可

const entryConfig=require("./productConfig")
var htmlWebpack=require("html-webpack-plugin");
var isProduct=process.env.NODE_ENV=="production"?true:false
// entryConfig.createEntryConfig();
var buildProjectName=process.argv[3];  //拿到动态打包项目的参数
module.exports={
    pages:isProduct? entryConfig.createEntryConfig_build(buildProjectName):entryConfig.createEntryConfig_dev(),
    outputDir:"dist/"+buildProjectName,//打包文件的存放地址
    configureWebpack:config=>{
        //production
        if(isProduct){
            console.log("生产环境打包")
            config.plugins.push(new htmlWebpack({
                filename:"index.html",
                template:`./src/projectList/${buildProjectName}/index.html`,
                title:`${buildProjectName}打包的页面`,
                inject:true,
                chunks:[]
            }))
        }
    }
}

本地运行: 就直接 npm run serve
打包生产: 如果你想打包projectA 就 npm run build projectA
希望可以帮到你!!

上一篇下一篇

猜你喜欢

热点阅读