vue2 通過 2.2 版本升級後, 文件變成了 8 個:javascript
瞬間就懵逼了, 這些文件該怎麼選?
下面就來講下, 這 8 個做用都用在什麼場景, 有什麼區別html
按照構建方式分, 能夠分紅 完整構建(包含獨立構建和運行時構建)
和 運行時構建
按照規範分, 能夠分紅 UMD, CommonJS 和 ES Modulevue
簡單來講, 完整構建
和 運行時構建
的區別就是, 可不能夠用template
選項, 和文件大一點,小一點java
屬於: 基於 CommonJS 的完整構建
能夠用於 Webpack-1 和 Browserify 之類打包工具
由於是完整構建
, 因此能夠使用template
選項, 如:webpack
import Vue from 'vue' new Vue({ template: ` <div id="app"> <h1>Basic</h1> </div> ` }).$mount('#app')
注意: 用 webpack-1 之類打包工具時, 使用該版本, 須要配置別名, 以 webpack 爲例:web
{
resolve: { alias: { 'vue$': 'vue/dist/vue.common.js' } } }
屬於: 基於 ES Module 的完整構建
能夠用於 Webpack-2 和 rollup 之類打包工具
由於是完整構建
, 因此能夠使用template
選項, 如:app
import Vue from 'vue' new Vue({ template: ` <div id="app"> <h1>Basic</h1> </div> ` }).$mount('#app')
注意: 用 webpack-2 之類打包工具時, 使用該版本, 須要配置別名, 以 webpack 爲例:ide
{
resolve: { alias: { 'vue$': 'vue.esm.js' } } }
屬於: 基於 UMD 的完整構建
能夠用於直接 CDN 引用
由於是完整構建
, 因此能夠使用template
選項, 如:函數
<script src="https://unkpg.com/vue/dist/vue.js"></script> <script>
和 vue.js 同樣, 屬於壓縮後版本工具
屬於: 基於 CommonJS 的運行時構建
能夠用於 Webpack-1 和 Browserify 之類打包工具
運行時構建不包含模板編譯器,所以不支持template
選項,只能用render
選項,但即便使用運行時構建,在單文件組件中也依然能夠寫模板,由於單文件組件的模板會在構建時預編譯爲render
函數, render
函數的使用, 請參考: http://cn.vuejs.org/v2/guide/render-function.html
import Vue from 'vue' new Vue({ render: function(h){ return h('h1', 'Hi Vue') } }).$mount('#app')
屬於: 基於 ES Module 的運行時構建
能夠用於 Webpack-2 和 rollup 之類打包工具
運行時構建不包含模板編譯器,所以不支持template
選項,只能用render
選項,但即便使用運行時構建,在單文件組件中也依然能夠寫模板,由於單文件組件的模板會在構建時預編譯爲render
函數, render
函數的使用, 請參考: http://cn.vuejs.org/v2/guide/render-function.html
import Vue from 'vue' new Vue({ render: function(h){ return h('h1', 'Hi Vue') } }).$mount('#app')
屬於: 基於 UMD 的運行時構建
能夠用於直接 CDN 引用
該版本和vue.js
相似, 能夠用於直接 CDN 引用, 由於不包含編譯器
, 因此不能使用template
選項, 只能使用render
函數
<script src="https://unkpg.com/vue/dist/vue.runtime.js"></script> <script> new Vue({ render: function(h){ return h('h1', 'Hi Vue') } }).$mount('#app') </script>
和 vue.runtime.js 同樣, 屬於壓縮後版本