如何在不使用 Vue CLI 的情况下覆盖 Vuetify 2 变量

Arn*_*nie 0 vue.js vuetify.js vue-cli

vuetify 文档仅提供了使用https://vuetifyjs.com/en/customization/sass-variables#markup-js-vue-config-sass-variables 中的vue-cli 配置注入 sass 变量的示例vue.config.js

不使用 CLI 时提供修改后的 vuetify 变量的正确方法是什么?

我正在将一个旧项目从 v1(手写笔)升级到 v2(sass),我需要覆盖一些变量,假设我只需要将字体系列更改为 Arial。

我也在 vuetify 中使用 treeshaking。

现在我有点卡住了,因为我不知道在哪里导入样式覆盖......src/main.ts显然导入这些是行不通的。

我在这里创建了一个最小的复制:https : //github.com/Sharsie/vuetify-theme-repro/

到目前为止,我所拥有的是build目录中的 webpack 配置和样式覆盖src/styles/main.scss

$body-font-family: Arial;

@import "~vuetify/src/styles/styles.sass";
Run Code Online (Sandbox Code Playgroud)

运行项目创建一个简单的页面,打印出v-app容器的计算样式

  <v-app id="app">
    <v-container>
      <v-content>
        <p>Wanted font-family: Arial</p>
        <p>Current font-family: {{ fontFamily }}</p>
      </v-content>
    </v-container>
  </v-app>
Run Code Online (Sandbox Code Playgroud)

Arn*_*nie 5

在挖掘了 vue-cli 的源代码后,我发现配置只是传递给sass-loader选项,所以解决方案非常简单:

而不是通过vue.config.js如下方式为样式表提供变量:

module.exports = {
  css: {
    loaderOptions: {
      sass: {
        data: `@import "~@/styles/main.scss"`,
      },
    },
  },
}
Run Code Online (Sandbox Code Playgroud)

您可以直接将它提供给 webpack 配置中的 sass-loader 选项,如下所示:

module.exports = {
  ...
  module: {
    rules: [
    ...
    {
      test: /\.(s?c|sa)ss$/,
      use: [
        'vue-style-loader',
        'css-loader',
        {
          loader: 'sass-loader',
          options: {
            implementation: sass,
            sassOptions: {
              fiber: fibers,
            },
            prependData: `@import "~/styles/main.scss"`,
          },
        },
      ],
    }
    ...
    ]
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

或者对于 sass-loader<8.0.0

            options: {
              implementation: sass,
              fiber: fibers,
              data: `@import "~/styles/main.scss"`,
            },

Run Code Online (Sandbox Code Playgroud)