Angular CLI 6 Пользовательский загрузчик SCSS Webpack

Я пытаюсь написать собственный модуль webpack, чтобы переопределить или расширить текущую сборку SCSS в angular 6 с помощью cli 6, с намерением передать «бренд» и сопоставить его с любыми переопределениями, например, «somemodule /« бренд » /filename.override.scss "и замените файл в родительской папке" somemodule / filename.scss ", но я не продвигаюсь.

Настраивать: @ angular / cli ":" 6.2.2 ", с @ angular-builders / custom-webpack ":" ^ 2.4.1 "

Я обновил сборку своих проектов, чтобы отразить, что я использую собственный веб-пакет, и расположение переопределения / расширения

     "build": {
      "builder": "@angular-builders/custom-webpack:browser",
      "options": {
        "customWebpackConfig": {
          "path": "./extra-webpack.config.js"
        },

Мой extra-webpack.config.js выглядит так, просто базовый стиль hello world, который я видел на многих сайтах

module.exports = {
    module:{
        rules: [{
            test: /\.scss$/,
            use: [{
                loader: "style-loader"
            }, {
                loader: "css-loader"
            }, {
                loader: "sass-loader",
                options: {
                    includePaths: ["src"]
                }
            }]
        }]
    }
};

однако запустить мою сборку с этим

ng run websitename:build

выдает эту ошибку

    Module build failed (from ./node_modules/sass- 

loader / lib / loader.js):

^                                                                                        
  Invalid CSS after "": expected 1 selector or at- 
 rule, was "var content = requi"    

Насколько я понимаю, это может быть вызвано попыткой переопределения правила scss, однако я не вижу других ссылок на это правило для удаления. Я также попытался несколько методов полностью переопределить старое правило, но безуспешно.

Решения и руководства, на которых я был в основном сосредоточен https://dev.to/meltedspark/customizing-angular-cli-6-buildan-alternative-to-ng-eject-1oc4https://medium.com/a-beginners-guide-for-webpack-2/webpack-loaders-css-and-sass-2cc0079b5b3ahttps://www.npmjs.com/package/@angular-builders/custom-webpack#custom-webpack-config-objecthttps://github.com/webpack-contrib/sass-loader/blob/master/test/bootstrapSass/webpack.config.jshttps://github.com/webpack-contrib/sass-loader/issues/536https://github.com/meltedspark/angular-builders

У меня такие же проблемы, решения не нашел

Cazs 24.01.2019 11:56

Мне не удалось решить эту проблему, к сожалению, я создал отдельные проекты для каждого бренда в рамках одного проекта.

Jack Davies 28.01.2019 00:02

Для некоторых rason в документе npmjs.com/package/@angular-builders/… я могу прочитать mergeStrategies: стратегии слияния конфигурации webpack, можно добавить | добавить | заменить на запись конфигурации webpack. По умолчанию добавляется. Возможно, мы можем попробовать получить исходную конфигурацию веб-пакета и изменить, чтобы загрузить горячий css

Cazs 31.01.2019 13:37

Каковы ваши намерения при создании загрузчика SCSS? Вы, Только, хотите заменить файл SCSS другим файлом SCSS, который содержит определенный CSS для этой марки? Если так, я могу знать решение.

jowey 16.02.2019 13:48

Эй, это кому-нибудь повезло?

Bruno Bruzzano 01.04.2019 15:22
Поиск всех неиспользуемых файлов в проекте
Поиск всех неиспользуемых файлов в проекте
Количество файлов в проекте растет по мере его развития. И если быть по-настоящему честным, их продвижение происходит в геометрической прогрессии...
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
8
5
2 593
1

Ответы 1

У меня была та же проблема, я попробовал mergeStrategies, но не сработало. Я изменил свой собственный веб-пакет на функцию, которая решила проблему, я смог расширить параметры 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;
};

Другие вопросы по теме