2020-07-22

第12章 架構(gòu)設(shè)計與項目結(jié)構(gòu)

vue.js的目錄結(jié)構(gòu)

dist存放構(gòu)建后的文件,可以找到很多不同的vue.js構(gòu)建版本橄杨。
完整版: 構(gòu)建后的文件同時包含編譯器和運行時
編譯器: 負(fù)責(zé)將模板字符串編譯成js渲染函數(shù),第三篇內(nèi)容
運行時: 負(fù)責(zé)創(chuàng)建vue示例秋秤,渲染視圖和使用虛擬dom實現(xiàn)重新渲染拖刃,基本上包含除編譯器外的所有部分
UMD:可以通過<script>標(biāo)簽直接在瀏覽器中使用。cdn上提供的在線引入的vue铐拐,就是運行時+編譯器的UMD版本徘键。
CommonJS: 用來配合較舊的打包工具,比如Browserify或webpack1遍蟋,默認(rèn)文件pkg.main只包含運行時的CommonJS版本(vue.runtime.common.js)
ES Module: 用來配合現(xiàn)代打包工具吹害,比如webpack2或Rollup夺巩,默認(rèn)文件(pkg.module)只包含運行時的ES Module版本(vue.runtime.esm.js)

  1. 完整版 vs 只包含運行時
    如果需要在客戶端編譯模板运悲,那么需要用到編譯器,因此需要完整版洛勉。當(dāng)使用vue-loader或vueify時,*.vue文件的模板會在構(gòu)建是與編譯成js纵穿,所以最終打包完成的文件不需要編譯器下隧,只需要引入運行時的版本即可。對應(yīng)上文提到的谓媒,打包工具里的默認(rèn)文件只包含運行時的版本淆院。運行時版本的體積比完整版小30%左右,所以盡量引用運行時版本句惯,如果仍希望使用完整版土辩,需要在打包工具里配置。
// webpack
module.exports = {
    resolve: {
        alias: {
            'vue$': 'vue/dist/vue.esm.js'  // 'vue/dist/vue.common.js' for webpack1
        }
    }
}
// Rollup
const alias = require('rollup-plugin-alias')
rollup({
    plugins: [
        alias({
            'vue': 'vue/dist/vue.esm.js'
        })
    ]
})
// Browserify抢野,需要添加到項目的package.json中
{
    "browser": {
        "vue": "vue/dist/vue.common.js"
    }
}
  1. 開發(fā)環(huán)境 vs 生產(chǎn)環(huán)境
    對于UMD版本來說拷淘,開發(fā)環(huán)境和生產(chǎn)環(huán)境的模式是硬編碼的:開發(fā)環(huán)境下使用未壓縮的代碼,生產(chǎn)環(huán)境下使用壓縮后的代碼指孤。CommonJS和ES Module版本用于打包工具启涯,因此vue不提供壓縮后的版本,需要自行將最終的包進(jìn)行壓縮恃轩。
    此外逝嚎,這兩個版本同時保留原始的process.env.NODE_ENV檢測,來決定它們應(yīng)該在什么模式下運行详恼,我們應(yīng)當(dāng)使用適當(dāng)?shù)拇虬ぞ吲渲脕硖鎿Q這些環(huán)境變量补君,以便控制vue.js的運行模式。把process.env.NODE_ENV替換為字符串字面量昧互,同時讓UglifyJS之類的壓縮工具完全刪除僅供開發(fā)環(huán)境的代碼塊挽铁,從而減少最終文件的大小
var webpack = require('webpack')
module.exports = {
    plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                 NODE_ENV: JSON.stringify('production')
             }
        })
    ]
}

const replace = require('rollup-plugin-replace')
rollup({
    plugins: [
        replace({
            'process.env.NODE_ENV': JSON.stringify('production')
        })
    ]
}).then(...)

$ NODE_ENV = production browserify -g envify -e main.js | uglifyjs -c -m > build.js

架構(gòu)設(shè)計

分為核心代碼、跨平臺相關(guān)和公用工具函數(shù)敞掘。同時叽掘,架構(gòu)其實是分層的,最底層是一個普通的構(gòu)造函數(shù)玖雁,最上層是一個入口更扁,將完整的構(gòu)造函數(shù)導(dǎo)出給用戶使用。

不同平臺有不同的入口進(jìn)行構(gòu)建操作赫冬,而核心代碼是通用的浓镜,可以在任何平臺下運行。
eg: 構(gòu)建web平臺下運行的文件劲厌,會選擇web平臺的入口文件開始構(gòu)建膛薛,這個入口文件最終會導(dǎo)出一個vue構(gòu)造函數(shù)。在導(dǎo)出之前补鼻,會向vue構(gòu)造函數(shù)中添加一些方法:先向vue構(gòu)造函數(shù)的prototype上添加一些方法哄啄,然后向vue構(gòu)造函數(shù)自身添加一些全局api雅任,接著將平臺特有的方法導(dǎo)入進(jìn)來,最后如果是完整版咨跌,再將編譯器導(dǎo)入進(jìn)來沪么,最終將所有代碼同vue構(gòu)造函數(shù)一起導(dǎo)出去。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锌半,一起剝皮案震驚了整個濱河市成玫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拳喻,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猪腕,死亡現(xiàn)場離奇詭異冗澈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)陋葡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門亚亲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腐缤,你說我怎么就攤上這事捌归。” “怎么了岭粤?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵惜索,是天一觀的道長。 經(jīng)常有香客問我剃浇,道長巾兆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任虎囚,我火速辦了婚禮角塑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淘讥。我一直安慰自己圃伶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布蒲列。 她就那樣靜靜地躺著窒朋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝗岖。 梳的紋絲不亂的頭發(fā)上炼邀,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音剪侮,去河邊找鬼拭宁。 笑死洛退,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杰标。 我是一名探鬼主播兵怯,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腔剂!你這毒婦竟也來了媒区?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤掸犬,失蹤者是張志新(化名)和其女友劉穎袜漩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湾碎,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡宙攻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了介褥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片座掘。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柔滔,靈堂內(nèi)的尸體忽然破棺而出溢陪,到底是詐尸還是另有隱情,我是刑警寧澤睛廊,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布形真,位于F島的核電站,受9級特大地震影響超全,放射性物質(zhì)發(fā)生泄漏没酣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一卵迂、第九天 我趴在偏房一處隱蔽的房頂上張望裕便。 院中可真熱鬧,春花似錦见咒、人聲如沸偿衰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽下翎。三九已至,卻和暖如春宝当,著一層夾襖步出監(jiān)牢的瞬間视事,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工庆揩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留俐东,地道東北人跌穗。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像虏辫,于是被迫代替她去往敵國和親蚌吸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351