javascript - Webpack Hook 可动态更改 SCSS 导入

标签 javascript node.js webpack sass sass-loader

问题

编辑:sass-loader 的自定义导入器似乎最有可能?

是否有一个我可以连接的 webpack 管道,它允许我以编程方式更新来自以下位置的 scss 导入:

@import 'bootstrap/scss/function';

@import '~bootstrap/scss/function';

我一直在尝试使用解析管道但无济于事:

plugins: [
    {
        apply: resolver => {
            resolver.hooks.parsedResolve.tap('resolve', (request, resolveContext, callback) => {
                webpackUtils.handleLegacyImports(request, resolveContext, resolver, callback);
            });
        },
    },
],

但我也想知道我是否也可以连接到 sass-loader,文档很少。

上下文

所以这是一个不幸的工作场景,它让我从 git 子模块导入 SCSS 文件,以便我可以进行覆盖,它的结构如下:

-Project
--MyApp
---scss
----global.scss
--SubmoduleApp
---scss
----global.scss

问题是子模块设计得很差,并且在任何导入上都没有使用波浪线,而是有一个自定义构建脚本来确定导入。正如预期的那样,当 webpack 到达他们时,它会崩溃

ERROR in ./MyApp/scss/global.scss
Module build failed ...
SassError: File to import not found or unreadable: bootstrap/scss/functions.
        on line 1 of ...
>> @import "bootstrap/scss/functions";

在子模块中添加波形符可以解决问题,但这并不是解决方案,因为子模块是第三方的并且无法更新。这就是为什么我需要在尝试导入之前添加波浪号或其他东西来使这项工作起作用......任何想法将不胜感激!

最佳答案

Sass-Loader 上的自定义导入器毕竟是答案!

这是处理边缘情况的快速示例:

{
    loader: 'sass-loader',
    options: {
        sourceMap: process.env.NODE_ENV !== 'production',
        sassOptions: {
            importer: url => {
                if (url.startsWith('bootstrap/')) {
                    return {
                        file: path.resolve(`./node_modules/${url}`),
                    };
                }
                return null;
            },
        },
    },
},

关于javascript - Webpack Hook 可动态更改 SCSS 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497390/

相关文章:

javascript - 从对象符号获取变量

webpack - 如何在CRA项目中用parcel替换webpack?

javascript - http post 方法被视为 http get 方法

javascript - "TypeError: $(...) is null"发生了什么事?

python - NodeJS - SocketIO over SSL with websocket transport

node.js - Node sqlite3 : Trying to write a function to return an array of rows

node.js - 如何让 axios 维护 API 调用之间的 cookie/ session ?

javascript - 在 Webpack 项目中获取 "Uncaught TypeError: path.parse is not a function"

express - 如何为Webpack构建的生产React Bundle.js提供服务?

javascript - Meteor Iron-Router 通过 [data] 与 [params] 访问变量