webpack - Webpack 动态别名解析
问题描述
我正在寻找一种通过 Webpack@3.12.0 配置传递函数的方法,以帮助 Webpack 在编译时动态解析别名。我有各种导入的第三方包,例如package-a/file-b
. 但是,根据要导入的第三方包package-a
,我希望将其解析为不同版本的package-a
; 虽然会有package-a
innode_modules
的版本,但旧版本不会在,node_modules
而是在不同的目录中。由于这些是第三方,我不想手动更改他们的代码。在各个包中使用的版本在路径名中,并且包的数量是任意的。
因为package-a
是私有包,它不在 npm 上,也不通过 Github 进行版本控制。
这两个帮助我更接近这一点,但两个答案似乎都过时了: - https://github.com/webpack/webpack/issues/110 -是否可以在 webpack 中创建自定义解析器?
这是我到目前为止所拥有的:
config.resolve.plugins = [{
apply(resolver) {
resolver.plugin('module', function(request, callback) {
if (request.request.startsWith('package-a')) {
this.doResolve(
'file',
Object.assign({
...request,
request: request.request.replace(/^package-a/, `${__dirname}/versions/v2.2.0`) + '.js',
file: true,
resolved: true,
}),
null,
callback
);
return;
}
callback();
});
}
}];
虽然它正确构建,但问题在于它仍在评估node_modules
package-a
- 所以我猜代码根本不起作用。
解决方案
问题可能与 __dirname 有关,它可能是 webpack.config.js 文件的 __dirname 而不是您的库。尝试在插件中 console.log(__dirname) 看看路径是否正确。此外,您不需要添加“.js”
这个解析器插件在 WebPack 4 上适用于我(稍作修改,希望在适应时没有破坏任何东西):
const path = require('path');
var monorepoResolver = {
apply(resolver) {
resolver.plugin('module', function(request, callback) {
if (request.path.startsWith('package-a') === -1) {
callback();
} else
{
this.doResolve(
'resolve',
{
...request,
request: request.request.replace(/^package-a/, `${__dirname}/versions/v2.2.0`),
},
'Edev Resolver',
callback
);
}
});
}
};
module.exports = (baseConfig, env, defaultConfig) => {
defaultConfig.resolve.plugins = defaultConfig.resolve.plugins || [];
defaultConfig.resolve.plugins.push(monorepoResolver);
return defaultConfig
}
推荐阅读
- amazon-web-services - 在亚马逊 ec2 实例上部署快速服务器和 wordpress 安装
- c# - How to display percent ( %) symbol in Y axis value in crystal report , line chart?
- gcc - 如何在 gcc 自动生成的头文件依赖项中处理从 C 到 C++ 的移动源?
- javascript - How to remove arrow functions from webpack output
- javascript - How to use shiny javascript functions?
- apache-kafka - Kafka 服务器在启动时提供错误关闭代理
- reactjs - 在 FlatList 中显示图像
- java - 发现多个文件的操作系统独立路径为“com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF”
- android - Firebase 云消息传递:我的应用程序没有收到我发送的消息
- android - 如何使用 upload_cert.der 文件创建签名的 apk