Angular CLI 6自定义Webpack SCSS加载器

Jac*_*ies 5 sass webpack angular-cli angular-cli-v6

我正在尝试编写一个自定义Webpack模块,以用cli 6覆盖或扩展角度为6的当前SCSS构建,目的是能够传递“品牌”并将其与任何替代匹配,例如“ somemodule /'brand' /filename.override.scss”并替换父文件夹“ somemodule / filename.scss”中的文件,但我没有任何进展。

设置:@ angular / cli“:” 6.2.2“,带有@ angular-builders / custom-webpack”:“ ^ 2.4.1”

我已经更新了项目构建,以反映出我正在使用自定义Webpack,以及覆盖/扩展的位置

     "build": {
      "builder": "@angular-builders/custom-webpack:browser",
      "options": {
        "customWebpackConfig": {
          "path": "./extra-webpack.config.js"
        },
Run Code Online (Sandbox Code Playgroud)

我的extra-webpack.config.js看起来像这样,只是我在许多网站上看到的一种基本的hello世界风格

module.exports = {
    module:{
        rules: [{
            test: /\.scss$/,
            use: [{
                loader: "style-loader"
            }, {
                loader: "css-loader"
            }, {
                loader: "sass-loader",
                options: {
                    includePaths: ["src"]
                }
            }]
        }]
    }
};
Run Code Online (Sandbox Code Playgroud)

但是用这个来运行我的构建

ng run websitename:build
Run Code Online (Sandbox Code Playgroud)

引发此错误

    Module build failed (from ./node_modules/sass- 
Run Code Online (Sandbox Code Playgroud)

loader / lib / loader.js):

^                                                                                        
  Invalid CSS after "": expected 1 selector or at- 
 rule, was "var content = requi"    
Run Code Online (Sandbox Code Playgroud)

据我了解,这可能是在尝试重新定义scss规则时引起的,但是我看不到要删除的对该规则的任何其他引用。我还尝试了一些方法来完全覆盖旧规则,但是没有运气。

解决方案和指南我主要集中在 https://dev.to/meltedspark/customizing-angular-cli-6-buildan-alternative-to-ng-eject-1oc4 https://medium.com/a-beginners- guide-for-webpack-2 / webpack-loaders-css-and-sass-2cc0079b5b3a https://www.npmjs.com/package/@angular-builders/custom-webpack#custom-webpack-config-object https:// /github.com/webpack-contrib/sass-loader/blob/master/test/bootstrapSass/webpack.config.js https://github.com/webpack-contrib/sass-loader/issues/536 https:// github .com / meltedspark / angular-builders

Kis*_*rma 3

我遇到了同样的问题,我尝试过 mergeStrategies 但没有成功。我已将自定义 webpack 更改为函数,这解决了问题,我能够扩展 sass 选项。

module.exports = function(config) {
    const rules = config.module.rules || [];
    rules.forEach(rule => {
        if (String(rule.test) === String(/\.scss$|\.sass$/)) {
        const loaders = rule.use;
        const transformedLoaders = loaders.map(l => {
            if (l.loader === 'sass-loader') {
                // here you can override options or replace or add.
            } 
            return l;
        });
        rule.use = transformedLoaders;
        }
    });
    return config;
};

Run Code Online (Sandbox Code Playgroud)