115唉工、vue-cli3創(chuàng)建多項目工程研乒,支持分項目編譯打包到相應(yīng)文件夾中

前言

本篇文章將采用vue-cli3來創(chuàng)建vue項目,如果之前已經(jīng)全局安裝了舊版本的vue-cli淋硝,需要先將其卸載雹熬,卸載命令如下

npm uninstall vue-cli -g  
# or
yarn global remove vue-cli

Node版本要求:node.js >= 8.9

安裝:

npm install -g @vue/cli
# or
yarn global add @vue/cli

安裝完成后可以通過 vue --version 命令查看vue-cli版本。

創(chuàng)建項目:

vue create vue-cli3-demo

此時可以通過上下鍵選擇 default(默認(rèn)) 或者 Manually select features(手動選擇需要的配置)谣膳。
可選擇的配置如下:

  • TypeScript:支持使用 TypeScript 書寫源碼
  • Progressive Web App (PWA) Support: PWA 支持竿报。
  • Router: 支持 vue-router 。
  • Vuex: 支持 vuex 继谚。
  • CSS Pre-processors: 支持 CSS 預(yù)處理器烈菌。
  • Linter / Formatter: 支持代碼風(fēng)格檢查和格式化。
  • Unit Testing: 支持單元測試。
  • E2E Testing:支持 E2E 測試芽世。
    根據(jù)個人需要去選擇配置挚赊,在這里我們直接選擇手動配置,選擇Babel济瓢、Router荠割、Linter/Formatter。
    待項目依賴安裝好后葬荷,進入項目根目錄涨共,啟動項目
cd vue-cli3-demo
npm run serve

vue-cli3創(chuàng)建的項目目錄比2.0創(chuàng)建的更加簡潔,沒有了build和config目錄宠漩,如果需要其他配置則要自己手動配置举反。

多頁面應(yīng)用的配置

使用腳手架創(chuàng)建的vue項目均為單頁面應(yīng)用,但在實際生產(chǎn)應(yīng)用中扒吁,我們常常需要用到多頁面應(yīng)用火鼻,接下來我們將項目改為多頁面應(yīng)用:

將項目目錄調(diào)整如下:


在官方文檔中給出的解決方法是在vue.config.js配置項pages

在項目根目錄下創(chuàng)建vue.config.js文件。
具體配置請自行參看文檔:
vue.config.js配置參考文檔

配置如下:

module.exports = {
  pages: {
    projectA: {
      // page 的入口
      entry: 'src/modules/projectA/main.js',
      // 模板來源
      template: 'public/index.html',
      // 在 dist/index.html 的輸出
      filename: 'projectA.html',
      // 當(dāng)使用 title 選項時雕崩,
      // template 中的 title 標(biāo)簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
      title: 'project A Page',
      // 在這個頁面中包含的塊魁索,默認(rèn)情況下會包含
      // 提取出來的通用 chunk 和 vendor chunk。
      chunks: ['chunk-vendors', 'chunk-common', 'projectA']
    },
    // 當(dāng)使用只有入口的字符串格式時盼铁,
    // 模板會被推導(dǎo)為 `public/subpage.html`
    // 并且如果找不到的話粗蔚,就回退到 `public/index.html`。
    // 輸出文件名會被推導(dǎo)為 `subpage.html`饶火。
    projectB: {
      // page 的入口
      entry: 'src/modules/projectB/main.js',
      // 模板來源
      template: 'public/index.html',
      // 在 dist/index.html 的輸出
      filename: 'projectB.html',
      // 當(dāng)使用 title 選項時鹏控,
      // template 中的 title 標(biāo)簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
      title: 'project B Page',
      // 在這個頁面中包含的塊,默認(rèn)情況下會包含
      // 提取出來的通用 chunk 和 vendor chunk肤寝。
      chunks: ['chunk-vendors', 'chunk-common', 'projectB']
    }
  }
}

重新啟動項目npm run serve当辐,訪問下面兩個地址即可看到多頁面的效果。
http://localhost:8080/projectA#/
http://localhost:8080/projectB#/

執(zhí)行npm run build進行編譯打包鲤看,打包結(jié)果如下:


兩個不同的項目的文件各自編譯打包缘揪,但并沒有按項目分成不同的文件夾,我們進一步修改配置义桂,將其改為按項目打包找筝。

多項目應(yīng)用按項目編譯打包到相應(yīng)的文件夾中

修改vue.config.js代碼如下:

var projectname = process.argv[3]
var glob = require('glob')

function getEntry() {
  var entries = {}
  if (process.env.NODE_ENV == 'production') {
    entries = {
      index: {
        // page的入口
        entry: 'src/modules/' + projectname + '/main.js',
        // 模板來源
        template: 'public/index.html',
        // 在 dist/index.html 的輸出
        filename: 'index.html',
        title: projectname,
        chunks: ['chunk-vendors', 'chunk-common', 'index']
      }
    }
  } else {
    var items = glob.sync( './src/modules/*/*.js')
    for (var i in items) {
      var filepath = items[i]
      var fileList = filepath.split('/');
      var fileName = fileList[fileList.length-2];
      entries[fileName] = {
        entry: `src/modules/${fileName}/main.js`,
        // 模板來源
        template: `public/index.html`,
        // 在 dist/index.html 的輸出
        filename: `${fileName}.html`,
        // 提取出來的通用 chunk 和 vendor chunk。
        chunks: ['chunk-vendors', 'chunk-common', fileName]
      }
    }
  }
  return entries
}

var pages = getEntry()
module.exports = {
  productionSourceMap: false, // 生產(chǎn)禁止顯示源代碼
  outputDir: 'dist/' + projectname,
  pages: pages
}

執(zhí)行如下命令進行打包即可:

#  npm run build [projectFileName]
npm run build projectA

結(jié)果如下圖所示:

源代碼:https://github.com/wushijie312/vue_MultipleProjects/tree/master/vue-cli3-demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慷吊,一起剝皮案震驚了整個濱河市呻征,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罢浇,老刑警劉巖陆赋,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沐祷,死亡現(xiàn)場離奇詭異,居然都是意外死亡攒岛,警方通過查閱死者的電腦和手機赖临,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灾锯,“玉大人兢榨,你說我怎么就攤上這事∷骋” “怎么了吵聪?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兼雄。 經(jīng)常有香客問我吟逝,道長,這世上最難降的妖魔是什么赦肋? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任块攒,我火速辦了婚禮,結(jié)果婚禮上佃乘,老公的妹妹穿的比我還像新娘囱井。我一直安慰自己,他們只是感情好趣避,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布庞呕。 她就那樣靜靜地躺著,像睡著了一般程帕。 火紅的嫁衣襯著肌膚如雪住练。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天骆捧,我揣著相機與錄音澎羞,去河邊找鬼髓绽。 笑死敛苇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的顺呕。 我是一名探鬼主播枫攀,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼株茶!你這毒婦竟也來了来涨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤启盛,失蹤者是張志新(化名)和其女友劉穎蹦掐,沒想到半個月后技羔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡卧抗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年藤滥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片社裆。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡拙绊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泳秀,到底是詐尸還是另有隱情标沪,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布嗜傅,位于F島的核電站金句,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏磺陡。R本人自食惡果不足惜趴梢,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望币他。 院中可真熱鬧坞靶,春花似錦、人聲如沸蝴悉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拍冠。三九已至尿这,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間庆杜,已是汗流浹背射众。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晃财,地道東北人叨橱。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像断盛,于是被迫代替她去往敵國和親罗洗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容