单文件组件是一种将模板、脚本和样式封装在一个 .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,你需要在 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 还有一些其他的特性,例如: