如何使用Node require()在包名称上设置默认/回退范围



我在节点代码中使用了一个特定的模块:

const example = require('example');

然而,这个模块的更新速度很慢,所以我把它分叉出来,并在npmjs.com上发布了我自己范围内的更新。然而,现在要使用我自己的模块,我必须更改代码中的每一个用法:

const example = require('@my-username/example');

这样做的问题是,我将不得不在许多文件中提交一系列更改来重命名模块,然后当上游将我的更改合并到官方版本时,我将必须再次更新我的代码,以在所有这些文件中从require()中删除scope运算符,然后如果我有更多难以接受的更改,则将其添加回来,以此类推

有没有办法告诉Node或NPM,如果require()找不到名称中没有作用域的模块,然后检查node_modules中的所有@scope文件夹,看看是否匹配?

如果可能的话,那么我只需要用相关的包版本更新package.json,当我在fork和官方版本之间切换时,代码本身可以保持不变。

您可以使用模块别名来实现它

这将减慢您的启动速度,但可以让您为应用程序中的每一个需求编写所有这些逻辑。

const moduleAlias = require('module-alias')
// Custom handler function (starting from v2.1)
moduleAlias.addAlias('request', (fromPath, request, alias) => {
console.log({
fromPath,
request,
alias,
});
return __dirname + '/my-custom-request'
})
require('request')

最新更新