什么是單文件組件?
單文件組件是一種將模板、腳本和樣式封裝在一個 .vue 文件中的方式
例如:
<template><div class="example">{{ msg }}</div>
</template>
<script>export default {data() {return {msg: "Hello world!",};},};
</script>
<style>.example {color: red;}
</style>
這樣,你可以在一個文件中管理一個組件的所有內容,而不需要在多個文件中切換。單文件組件也可以使用不同的語言或工具,例如在 template 中使用 Pug,在 script 中使用 TypeScript,在 style 中使用 Sass 等,只要你為它們配置了相應的 webpack loader。
vue-loader 是如何工作的?
vue-loader 的工作原理是
- 它會將 .vue 文件中的每個部分(template、script、style)提取出來,然后分別交給相應的 webpack loader 處理,例如 vue-template-loader、babel-loader、style-loader 等。
- 這樣,每個部分都可以使用不同的語言或工具,例如在 template 中使用 Pug,在 script 中使用 TypeScript,在 style 中使用 Sass 等。
- 最后,vue-loader 會將這些處理后的部分重新組合成一個可以在瀏覽器中運行的 js 文件,其中包含了 Vue 組件的定義和渲染函數。
vue-loader 的配置
要使用 vue-loader,你需要在 webpack 的配置文件中添加一些設置。首先,你需要安裝 vue-loader 和 vue-template-compiler 這兩個 npm 包:
npm install -D vue-loader vue-template-compiler
然后,你需要在 webpack 的配置文件中添加一個名為 VueLoaderPlugin 的插件,它會處理 vue-loader 的一些內部邏輯:
const { VueLoaderPlugin } = require("vue-loader");module.exports = {// ...plugins: [new VueLoaderPlugin()],
};
接下來,你需要在 webpack 的配置文件中添加一個名為 vue 的規則,它會告訴 webpack 如何處理 .vue 文件:
module.exports = {// ...module: {rules: [{test: /\.vue$/,loader: "vue-loader",},// ... 其他規則],},
};
最后,你需要為 .vue 文件中的每個部分配置相應的 webpack loader,例如:
module.exports = {// ...module: {rules: [{test: /\.vue$/,loader: "vue-loader",},{test: /\.js$/,loader: "babel-loader",},{test: /\.css$/,use: ["vue-style-loader", "css-loader"],},{test: /\.pug$/,oneOf: [{resourceQuery: /^\?vue/,use: ["pug-plain-loader"],},{use: ["raw-loader", "pug-plain-loader"],},],},// ... 其他規則],},
};
這樣,你就可以在 .vue 文件中使用不同的語言或工具,例如在 template 中使用 Pug,在 script 中使用 babel,在 style 中使用 css 等。
vue-loader 的特性
vue-loader 還有一些其他的特性,例如:
- 支持熱重載,即在修改 .vue 文件后,瀏覽器會自動刷新并保留當前的應用狀態。
- 支持作用域 CSS,即在 .vue 文件中的 style 標簽上添加 scoped 屬性,可以讓樣式只作用于當前組件。
- 支持自定義塊,即在 .vue 文件中添加任意類型的自定義標簽,可以讓 vue-loader 處理它們并將它們傳遞給相應的 webpack loader。