Vue Loader
Webpack配置
// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
module: {
rules: [
// ... 其它规则
{
test: /\.vue$/,
loader: 'vue-loader'
}
]
},
plugins: [
// 请确保引入这个插件!
new VueLoaderPlugin()
]
}这个插件是必须的! 它的职责是将你定义过的其它规则复制并应用到 .vue 文件里相应语言的块。例如,如果你有一条匹配 /\.js$/的规则,那么它会应用到 .vue 文件里的 <script> 块。
一个更完整的 webpack 配置示例看起来像这样:
处理资源路径
当 Vue Loader 编译单文件组件中的 块时,它也会将所有遇到的资源 URL 转换为 webpack 模块请求。
此外,如果你配置了为 块使用 css-loader,则你的 CSS 中的资源 URL 也会被同等处理。
转换规则
如果路径是绝对路径 (例如
/images/foo.png),会原样保留。如果路径以
.开头,将会被看作相对的模块依赖,并按照你的本地文件系统上的目录结构进行解析。如果路径以
~开头,其后的部分将会被看作模块依赖。这意味着你可以用该特性来引用一个 Node 依赖中的资源:如果路径以
@开头,也会被看作模块依赖。如果你的 webpack 配置中给@配置了 alias,这就很有用了。所有vue-cli创建的项目都默认配置了将@指向/src。
使用预处理器
Vue Loader根据lang属性和webpack配置中的rules自动推断出合适的loader来使用
Sass
Sass vs Scss
注意 sass-loader 会默认处理不基于缩进的 scss 语法。为了使用基于缩进的 sass 语法,你需要向这个 loader 传递选项:
共享变量
Babel
排除 node_modules
exclude: /node_modules/ 在应用于 .js 文件的 JS 转译规则 (例如 babel-loader) 中是蛮常见的。鉴于 v15 中的推导变化,如果你导入一个 node_modules 内的 Vue 单文件组件,它的 <script> 部分在转译时将会被排除在外。
为了确保 JS 的转译应用到 node_modules 的 Vue 单文件组件,你需要通过使用一个排除函数将它们加入白名单:
TypeScript
TypeScript 的配置可以通过 tsconfig.json 来完成。你也可以查阅 ts-loader 的文档。
CSS提取
请只在生产环境下使用 CSS 提取,这将便于你在开发环境下进行热重载。
webpack 4
你还可以查阅 mini-css-extract-plugin 文档。
webpack 3
你也可以查阅 extract-text-webpack-plugin 文档。
Last updated
Was this helpful?