vue-cli#2.0項目結構分析

接觸過vue的同學應該都知道,用vue-cli開發(fā)vue的項目十分方便错维,它可以幫你快速構建一個具有強大構建能力的Vue.js項目纸俭。今天不談什么是vue-cli,而是來說說用vue-cli構建的項目結構是什么樣的并分析部分文件任内。這里以我之前寫的一個小項目為參考,項目是用vue-cli的webpack模板構建的融柬,項目地址:https://github.com/hieeyh/tong2-family死嗦。

項目結構

.
|-- build                            // 項目構建(webpack)相關代碼
|   |-- build.js                     // 生產環(huán)境構建代碼
|   |-- check-version.js             // 檢查node、npm等版本
|   |-- dev-client.js                // 熱重載相關
|   |-- dev-server.js                // 構建本地服務器
|   |-- utils.js                     // 構建工具相關
|   |-- webpack.base.conf.js         // webpack基礎配置
|   |-- webpack.dev.conf.js          // webpack開發(fā)環(huán)境配置
|   |-- webpack.prod.conf.js         // webpack生產環(huán)境配置
|-- config                           // 項目開發(fā)環(huán)境配置
|   |-- dev.env.js                   // 開發(fā)環(huán)境變量
|   |-- index.js                     // 項目一些配置變量
|   |-- prod.env.js                  // 生產環(huán)境變量
|   |-- test.env.js                  // 測試環(huán)境變量
|-- src                              // 源碼目錄
|   |-- components                     // vue公共組件
|   |-- store                          // vuex的狀態(tài)管理
|   |-- App.vue                        // 頁面入口文件
|   |-- main.js                        // 程序入口文件粒氧,加載各種公共組件
|-- static                           // 靜態(tài)文件越除,比如一些圖片,json數(shù)據(jù)等
|   |-- data                           // 群聊分析得到的數(shù)據(jù)用于數(shù)據(jù)可視化
|-- .babelrc                         // ES6語法編譯配置
|-- .editorconfig                    // 定義代碼格式
|-- .gitignore                       // git上傳需要忽略的文件格式
|-- README.md                        // 項目說明
|-- favicon.ico 
|-- index.html                       // 入口頁面
|-- package.json                     // 項目基本信息
.

package.json

package.json文件是項目根目錄下的一個文件,定義該項目開發(fā)所需要的各種模塊以及一些項目配置信息(如項目名稱摘盆、版本翼雀、描述、作者等)孩擂。

scripts字段

package.json文件里有一個scripts字段狼渊。

"scripts": {
    "dev": "node build/dev-server.js",
    "build": "node build/build.js"
  }

在開發(fā)環(huán)境下,在命令行中運行npm run dev就相當于在執(zhí)行node build/dev-server.js类垦。所以script字段是用來指定npm相關命令的縮寫的狈邑。

dependencies字段和devDependencies字段

dependencies字段指定了項目運行時所依賴的模塊,devDependencies字段指定了項目開發(fā)時所依賴的模塊蚤认。在命令行中運行npm install命令米苹,會自動安裝dependencies和devDependencies字段中的模塊。
package.json還有很多配置相關項砰琢,想進一步了解package.json的可參考:https://docs.npmjs.com/files/package.json

webpack配置相關

上面說到在命令行中npm run dev就相當于在執(zhí)行node build/dev-server.js蘸嘶,想必dev-server.js這個文件是十分重要的,它是在開發(fā)環(huán)境下構建時第一個要運行的文件陪汽。掘金上已經有一篇對vue-cli#2.0 webpack配置的分析文章训唱,里面詳細講解了webpack相關配置文件的每行代碼的意思,我只做一些補充掩缓。鏈接在此(一定要自習閱讀雪情,收獲會很大):https://gold.xitu.io/post/584e48b2ac502e006c74a120遵岩。

dev-server.js

...
...
// http-proxy可以實現(xiàn)轉發(fā)所有請求代理到后端真實API地址你辣,以實現(xiàn)前后端開發(fā)完全分離
// 在config/index.js中可以對proxyTable想進行配置
var proxyMiddleware = require('http-proxy-middleware')
...
...
// 熱加載要使用webpack-dev-middleware在沒有webpack-dev-server的時候進行熱加載
var hotMiddleware = require('webpack-hot-middleware')(compiler)
// 當html-webpack-plugin模板改變是強制進行頁面重新加載
compiler.plugin('compilation', function (compilation) {
  compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
    hotMiddleware.publish({ action: 'reload' })
    cb()
  })
})

webpack.base.conf.js

...
...
module.export = {
    // 編譯入口文件
    entry: {},
    // 編譯輸出路徑
    output: {},
    // 一些解決方案配置
    resolve: {},
    resolveLoader: {},
    module: {
        // 各種不同類型文件加載器配置
        loaders: {
        ...
        ...
        // js文件用babel轉碼
        {
            test: /\.js$/,
            loader: 'babel',
            include: projectRoot,
            // 哪些文件不需要轉碼
            exclude: /node_modules/
        },
        ...
        ...
        }
    },
    // vue文件一些相關配置
    vue: {}
} 

check-version.js

這個文件主要是用來檢測當前環(huán)境中的node和npm版本和我們需要的是否一致的。

// 加載語義化版本測試庫
var semver = require('semver')
// 定制控制臺日志的輸入樣式
var chalk = require('chalk')
// 引入package.json文件
var packageConfig = require('../package.json')
var exec = function (cmd) {
  return require('child_process')
    .execSync(cmd).toString().trim()
}
// 定義node和npm版本需求所組成的數(shù)組
var versionRequirements = [
  {
    name: 'node',
    currentVersion: semver.clean(process.version),
    versionRequirement: packageConfig.engines.node
  },
  {
    name: 'npm',
    currentVersion: exec('npm --version'),
    versionRequirement: packageConfig.engines.npm
  }
]
module.exports = function () {
  var warnings = []
  // 依次判斷版本是否符合要求
  for (var i = 0; i < versionRequirements.length; i++) {
    var mod = versionRequirements[i]
    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
      warnings.push(mod.name + ': ' +
        chalk.red(mod.currentVersion) + ' should be ' +
        chalk.green(mod.versionRequirement)
      )
    }
  }
  ...
}

想把webpack完全搞懂還是需要費很大功夫的尘执,我感覺自己也只是入了一個門而已舍哄,要想深入了解webpack還是要去官網(wǎng)看說明文檔。

  1. http://webpack.github.io/docs/
  2. https://webpack.js.org/configuration/
  3. webpack學習之路

.babelrc

Babel解釋器的配置文件誊锭,存放在根目錄下表悬。Babel是一個轉碼器,項目里需要用它將ES6代碼轉為ES5代碼丧靡。這里有一篇阮一峰老師寫的相關文章供參考:Babel 入門教程

  // 設定轉碼規(guī)則
  "presets": ["es2015", "stage-2"],
  // 轉碼的一些插件
  "plugins": ["transform-runtime"],
  "comments": false 

.editorconfig

該文件定義項目的編碼規(guī)范蟆沫,編輯器的行為會與.editorconfig 文件中定義的一致,并且其優(yōu)先級比編輯器自身的設置要高温治,這在多人合作開發(fā)項目時十分有用而且必要饭庞。

root = true

[*]    // 對所有文件應用下面的規(guī)則
charset = utf-8                    // 編碼規(guī)則用utf-8
indent_style = space               // 縮進用空格
indent_size = 2                    // 縮進數(shù)量為2個空格
end_of_line = lf                   // 換行符格式
insert_final_newline = true        // 是否在文件的最后插入一個空行
trim_trailing_whitespace = true    // 是否刪除行尾的空格

了解更多請參考官方配置文檔http://editorconfig.org/

接觸vue并不久,很多東西也不是特別清楚熬荆,文章里有什么問題歡迎指出舟山。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子累盗,更是在濱河造成了極大的恐慌寒矿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件若债,死亡現(xiàn)場離奇詭異符相,居然都是意外死亡,警方通過查閱死者的電腦和手機拆座,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門主巍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挪凑,你說我怎么就攤上這事孕索。” “怎么了躏碳?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵搞旭,是天一觀的道長。 經常有香客問我菇绵,道長肄渗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任咬最,我火速辦了婚禮翎嫡,結果婚禮上,老公的妹妹穿的比我還像新娘永乌。我一直安慰自己惑申,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布翅雏。 她就那樣靜靜地躺著圈驼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪望几。 梳的紋絲不亂的頭發(fā)上绩脆,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音橄抹,去河邊找鬼靴迫。 笑死,一個胖子當著我的面吹牛楼誓,可吹牛的內容都是我干的玉锌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慌随,長吁一口氣:“原來是場噩夢啊……” “哼芬沉!你這毒婦竟也來了躺同?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤丸逸,失蹤者是張志新(化名)和其女友劉穎蹋艺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黄刚,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡捎谨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了憔维。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涛救。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖业扒,靈堂內的尸體忽然破棺而出检吆,到底是詐尸還是另有隱情,我是刑警寧澤程储,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布蹭沛,位于F島的核電站,受9級特大地震影響章鲤,放射性物質發(fā)生泄漏摊灭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一败徊、第九天 我趴在偏房一處隱蔽的房頂上張望帚呼。 院中可真熱鬧,春花似錦皱蹦、人聲如沸煤杀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怜珍。三九已至端蛆,卻和暖如春凤粗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背今豆。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工嫌拣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呆躲。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓异逐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親插掂。 傳聞我的和親對象是個殘疾皇子灰瞻,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容