vue 3.0 實現(xiàn)多頁面應(yīng)用

多頁面的實現(xiàn),主要是動態(tài)配置vue.config.js的page屬性。我們來看看如何實現(xiàn)
1.我們看下目錄結(jié)構(gòu)


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

2.根據(jù)上面的這個文檔結(jié)構(gòu),我們需要通過glob插件動態(tài)獲取main.js以及index.html的文件路徑。當(dāng)然我們也可以直接在vue.config.js中這樣配置

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

如果我們寫死的話,頁面少很方便,但是頁面一多,那就難搞了。
所以我們回到正題
3.在根目錄新建productConfig.js

var glob = require("glob");
// 生成入口文件配置 
let entryConfig = {
   moduleList:[],
   // 開發(fā)的頁面配置  默認(rèn)是編譯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;
   },
   ///根據(jù)傳入的參數(shù)來決定要打包哪個頁面/項目
   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];  //拿到動態(tài)打包項目的參數(shù)
module.exports={
    pages:isProduct? entryConfig.createEntryConfig_build(buildProjectName):entryConfig.createEntryConfig_dev(),
    outputDir:"dist/"+buildProjectName,//打包文件的存放地址
    configureWebpack:config=>{
        //production
        if(isProduct){
            console.log("生產(chǎn)環(huán)境打包")
            config.plugins.push(new htmlWebpack({
                filename:"index.html",
                template:`./src/projectList/${buildProjectName}/index.html`,
                title:`${buildProjectName}打包的頁面`,
                inject:true,
                chunks:[]
            }))
        }
    }
}

本地運行: 就直接 npm run serve
打包生產(chǎn): 如果你想打包projectA 就 npm run build projectA
希望可以幫到你??!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容