我在节点代码中使用了一个特定的模块:
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')