1. 程式人生 > >vue 運行時 + 編譯器 vs. 只包含運行時

vue 運行時 + 編譯器 vs. 只包含運行時

set pre new title 而且 sco developer main body

https://cn.vuejs.org/v2/guide/installation.html#運行時-編譯器-vs-只包含運行時

文檔中的這個地方,說的不清楚

If you need to compile templates on the client (e.g. passing a string to the template option, or mounting to an element using its in-DOM HTML as the template), you will need the compiler and thus the full build

這部分的意思是對於以下情況會用到compiler:

  有指定template

  沒指定template,也沒指定render(這時候使用的就是被掛載元素的outerHtml)

所以,沒有使用到compiler的情況只有:沒有指定template,但指定了render。 這種情況並沒有畫到vue的生命周期圖裏,真的不容易發現。

有時候我們會遇到這樣的錯誤:

[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

以上提到,解決這個問題有兩種方式。到谷歌必應上搜索,99%的都選擇了後者,也就是使用全功能的vue(runtime+compiler),這個版本的vue文件相比僅包含runtime的版本體積要大,而且運行時的compile轉換會消耗性能,compile過程其實可以放到構建過程中進行。

總結就是:如果可以的話,盡量使用runtime版的vue文件。

以下演示一個簡單的runtime版vue項目 :

項目初始化,前三個依賴是vue-loader的必備依賴

npm init -y && npm install --save-dev css-loader vue-loader vue-template-compiler vue

其余文件

// app.vue
<style scoped>
    .title{
        color:red;
        text-align: center;
    }
</style>

<template>
    <div class="title">
        這是標題
    </div>
</template>

<script>
    alert("標題初始化")
</script>

// index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="root">
        <app></app>
    </div>
</body>
<script src="bundle.js"></script>
</html>

// main.js
import Vue from ‘vue‘
import app from ‘./app.vue‘

// new Vue({
//     el:"#root",
//     render:function(c){
//         return c("app")
//     },
//     components:{
//         app
//     }
// });

// 兩種初始化方式都可以
new Vue(app).$mount("#root");

// webpack.config.js
module.exports = {
    entry: {
        bundle: ‘./main.js‘
    },
    output: {
        filename: ‘bundle.js‘
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: ‘vue-loader‘
            }
        ]
    },
    resolve: {
        extensions: [".vue",".js",".json"],
        alias: {
            ‘vue$‘: ‘vue/dist/vue.runtime.js‘,
        }
    },
};

以上項目能正常運行。

compiler的作用在webpack引入 .vue文件的時候,就調用vue-loader來預處理過了,所以到了瀏覽器端運行的時候,僅僅引入vue.runtime就可以了

vue 運行時 + 編譯器 vs. 只包含運行時