0

我正在尝试创建一个 webpack 插件,它允许我覆盖node_modules在文件夹中找到匹配项时找到的“任何”javascript 模块src/override

我一直在尝试使用NormalModuleReplacementPlugin,因为它看起来是最直接的方法,但我已经花了一整天的时间,它还没有工作。

    const overrideModulesPlugin = new NormalModuleReplacementPlugin(
        /node_modules/,
        function(resource) {
            const replacedRequest = resource.request.replace(
                /node_modules/,
                'src/override'
            );

            let moduleToSearch = replacedRequest;
            if (moduleToSearch.includes('!')) {
                moduleToSearch = moduleToSearch.substring(
                    moduleToSearch.lastIndexOf('!') + 1
                );
            }

            if (fs.existsSync(moduleToSearch)) {
                console.log(`Using ${moduleToSearch}`);
                resource.request = replacedRequest;
            }
        }
    );

我发现了一些问题:

  • 一些模块是用 bang (!) 请求的,主要是那些由 webpack 或 css-loader 请求的。
  • 有些包node_modules里面包含一个文件夹,这会产生许多新的冲突。

我不是在问这样做是否是一个好主意,或者是否有更好的方法来做到这一点,我只是在寻求帮助,因为这是我目前正在开发的概念证明。

另外,我使用的是 Webpack 4,无法更新到 Webpack 5。

编辑:有一个包可以做类似的事情,但我不喜欢它如何使用钩子。https://github.com/fooman/venia-ui-override-resolver

4

0 回答 0