能夠在 github
上經過這款 Chrome 插件 octotree 查看Vue的文件目錄。也能夠克隆到本地。。javascript
git-hooks.js
----- 存放 git 鉤子alias.js
----- 別名配置文件config.js
------ 生成 rollup 配置build.js
----- 對上面config.js中全部的 rollup配置進行構建replease.sh
----- 自動發佈新版本的腳本compiler
-----編譯器代碼存放的目錄, 將 template 變異成 render函數core
----- 存放通用的代碼
keep-alive
server
----- 包含服務器渲染platforms
----- 包含平臺特有的相關代碼
Vue有三種不一樣的構建輸出, 是 UMD
、 CommenJS
、ES modules
。在 scripts/config.js的37行 builds對象中能看到
。vue
配置的入口文件 entry
都是 web/entry-runtime.js
, 可是輸出的格式 format
分別是 cjs
、 es
和 umd
。java
每一個模塊的形式還分爲: 運行時版
和 完整版
。node
運行時版本: web/entry-runtime.js
完整版: web/entry-runtime-with-compiler.js
webpack
主要差異是完整版比運行時版多了個 with-compiler.js
, 這個使用用來將template
編譯成render
函數的。git
爲何要分爲運行時版和完整版?github
完整版 = 運行版 + Compiler。完整版就比運行時版多了個從 template
編譯成 render
函數的過程。 將字符串模塊編譯成render函數不必定是要等到代碼運行的時候去作,能夠在構建的時候就完成這一步。因此運行時版
結合構建工具搭配更好,能夠減小庫的說起,提高性能,還剋以將Compiler
抽離成單獨的包。web
那完整版是不須要配合構建工具使用的。。json
除了運行版和完整版,爲啥還分這麼多不一樣的包?api
cjs
、es
、umd
直接經過 script 標籤直接引入的包是 umd
的, 可是寫 Vue 大多數是配合構建工具 webpack
等使用的。cjs
是用於 webpack 1
的, 而es
是適用於 webpack 2+
、rollup
等的。webpack 2+
能夠直接加載 ES Modules
,因此適用於es
的包。
Vue package.json文件
scripts下的配置
{ "scripts": { // 構建 完整版 umd 模塊的vue "dev": "rollup -w -c scripts/config.js --environment TARGET:web-full-dev", // 構建 `運行時` `cjs` 模塊的vue "dev:cjs": "rollup -w -c scripts/config.js --environment TARGET:web-runtime-cjs", // 構建 `運行時` `es` 模塊的vue "dev:esm": "rollup -w -c scripts/config.js --environment TARGET:web-runtime-esm", "dev:test": "karma start test/unit/karma.dev.config.js", // 構建 vue-server-renderer 包 "dev:ssr": "rollup -w -c scripts/config.js --environment TARGET:web-server-renderer", // 構建 Compiler "dev:compiler": "rollup -w -c scripts/config.js --environment TARGET:web-compiler ", "dev:weex": "rollup -w -c scripts/config.js --environment TARGET:weex-framework", "dev:weex:factory": "rollup -w -c scripts/config.js --environment }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } } }