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?