在NPM / Node中replace一个包

是否有可能强制外部npm依赖使用不同的node.js包提供相同的API,但不同的实现?

你应该能够下载你喜欢的任何模块的源代码,并将该文件夹放在你的node_modules文件夹中。 从这一点上,你只require在你的Node.js应用程序中像任何其他NPM模块一样。

如果你愿意这样做,那么这个模块是开源的,你可以在github上进行分支,改变它们的package.json来包含你想要的模块,并使用你自己的package.json的github url,像这样:

 "modulename": "git+https://git@github.com/user/repo.git" 

我build议下载你想要的API的代码,创build一个src / assets文件夹,把它放在那里,把package.json中的包名改为npm中没有使用的那个,然后在你的内部使用'require('newPackageName')'码。

如果你决定使用一些package.json的function来指向一个特定的版本(比如使用“1.4.7”而不是“^ 1.4.7”)或者如果你指向一个github地址,在运行npm时要小心更新。 它将使用该特定名称replace您的url与npmjs.org中的最新版本。 我不知道它是否仍然在新版本的npm中执行此操作,但是在与Node.js 0.12配合使用的版本中,这是默认行为。

我可以告诉你,节点shrinkwrap将会起作用,但是它也会阻止任何其他的包被更新。 不,你不能只有一个收缩包装的依赖关系,它必须是所有这些,否则npm更新将无法正常工作。