使用 Webpack Encore 将 YAML 文件中的变量导入 SASS 变量时出错

Error importing variables from YAML file into SASS variables with Webpack Encore

在我们项目的根文件夹中,我们有一个 styleguide.yml 文件(包含例如颜色定义)。它应该在 Symfony Twig 扩展以及 SASS 和 JavaScript 中加载(应该有一个中心位置来定义例如颜色)。

我尝试将 node-sass-yaml-importer 包添加到 package.json:

  "dependencies": {
    "node-sass-yaml-importer": "^4.0.1",
  },

在 webpack.config.js 我做:

// enables Sass/SCSS support
.enableSassLoader()

// enable autoprefixer and stuff
.enablePostCssLoader((options) => {
     options.config = {
             // the directory where the postcss.config.js file is stored
             path: './'
     };
})

.addLoader({
    test: /\.scss$/,
    use: [
        'style-loader',
        {
            loader: 'css-loader',
            options: {
                importLoaders: 1
            },
        },
        {
            loader: 'sass-loader',
            // Apply the YAML importer via sass-loader's options.
            options: {
                importer: 'node-sass-yaml-importer'
            },
        },
    ],
})

在执行 yarn encore dev 时出现以下错误:

 error  in ./assets/sass/main.scss

SassError: Invalid CSS after "v": expected 1 selector or at-rule, was 'var api = require("'
        on line 1 of assets/sass/main.scss
>> var api = require("!../../node_modules/style-loader/dist/runtime/injectStyle
   ^

是不是我addLoader方法用错了?如何使用 Webpack Encore 从 .yml 文件导入变量?

经过一些试验,我找到了解决方案。在 webpack.config.js 中执行:

var yamlImporter = require('node-sass-yaml-importer');

Encore
    // enables Sass/SCSS support
    .enableSassLoader((options) => {
        options.sassOptions = {
            importer: yamlImporter
        };
    }, {})

    // ...

在main.scss中做:

@import "../../styleguide.yml"

有效