vue2 經過 2.2 版本升級後, 檔案變成了 8 個:
- vue.common.js
- vue.esm.js
- vue.js
- vue.min.js
- vue.runtime.common.js
- vue.runtime.esm.js
- vue.runtime.js
- vue.runtime.min.js
瞬間就懵逼了, 這些檔案該怎麼選?
下面就來說下, 這 8 個作用都用在什麼場景, 有什麼區別
按照構建方式分, 可以分成 完整構建(包含獨立構建和執行時構建)
和 執行時構建
按照規範分, 可以分成 UMD, CommonJS 和 ES Module
簡單來說, 完整構建
和 執行時構建
的區別就是, 可不可以用template
選項, 和檔案大一點,小一點
vue.common.js
屬於: 基於 CommonJS 的完整構建
可以用於 Webpack-1 和 Browserify 之類打包工具
因為是完整構建
, 所以可以使用template
選項, 如:
import Vue from 'vue'
new Vue({
template: `
<div id="app">
<h1>Basic</h1>
</div>
`
}).$mount('#app')
複製程式碼
注意: 用 webpack-1 之類打包工具時, 使用該版本, 需要配置別名, 以 webpack 為例:
{
resolve: {
alias: {
'vue$': 'vue/dist/vue.common.js'
}
}
}
複製程式碼
vue.esm.js
屬於: 基於 ES Module 的完整構建
可以用於 Webpack-2 和 rollup 之類打包工具
因為是完整構建
, 所以可以使用template
選項, 如:
import Vue from 'vue'
new Vue({
template: `
<div id="app">
<h1>Basic</h1>
</div>
`
}).$mount('#app')
複製程式碼
注意: 用 webpack-2 之類打包工具時, 使用該版本, 需要配置別名, 以 webpack 為例:
{
resolve: {
alias: {
'vue$': 'vue.esm.js'
}
}
}
複製程式碼
vue.js
屬於: 基於 UMD 的完整構建
可以用於直接 CDN 引用
因為是完整構建
, 所以可以使用template
選項, 如:
<script src="https://unkpg.com/vue/dist/vue.js"></script>
<script>
new Vue({
template: `
<div id="app">
<h1>Hi Vue</h1>
</div>
`
}).$mount('#app')
</script>
複製程式碼
vue.min.js
和 vue.js 一樣, 屬於壓縮後版本
vue.runtime.common.js
屬於: 基於 CommonJS 的執行時構建
可以用於 Webpack-1 和 Browserify 之類打包工具
執行時構建不包含模板編譯器,因此不支援template
選項,只能用render
選項,但即使使用執行時構建,在單檔案元件中也依然可以寫模板,因為單檔案元件的模板會在構建時預編譯為render
函式, render
函式的使用, 請參考: cn.vuejs.org/v2/guide/re…
import Vue from 'vue'
new Vue({
render: function(h){
return h('h1', 'Hi Vue')
}
}).$mount('#app')
複製程式碼
vue.runtime.esm.js
屬於: 基於 ES Module 的執行時構建
可以用於 Webpack-2 和 rollup 之類打包工具
執行時構建不包含模板編譯器,因此不支援template
選項,只能用render
選項,但即使使用執行時構建,在單檔案元件中也依然可以寫模板,因為單檔案元件的模板會在構建時預編譯為render
函式, render
函式的使用, 請參考: cn.vuejs.org/v2/guide/re…
import Vue from 'vue'
new Vue({
render: function(h){
return h('h1', 'Hi Vue')
}
}).$mount('#app')
複製程式碼
vue.runtime.js
屬於: 基於 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.min.js
和 vue.runtime.js 一樣, 屬於壓縮後版本