首页 > 解决方案 > 有条件地在 package.json 中安装不同版本的 npm 包

问题描述

我正在开发一个使用私有包的网络应用程序。在某些情况下,我宁愿使用包的本地版本或该包的不同版本。

是否有任何解决方案表明在 package.json 中使用不同版本的包?

IE:

npm install --local

而我的 package.json 看起来像:

...
"dependencies": { 
...
    "my_package": if(local) "address_to_local_package/" else "5.6.1"
...
}

标签: javascriptnpmdependenciespackage.json

解决方案


npm不适应这一点(老实说,可能不应该)。这似乎是通常在运行时通过NODE_ENV环境变量或类似机制处理的事物类型。模块根据NODE_ENV设置为"production"或改变行为"development"。(但这只是惯例。您可以根据需要使用值"local"。)因此,与其安装不同版本的模块,不如根据该环境变量的值,有一个版本的行为不同。

如果你真的想要完全安装不同的代码库,这将需要一些努力,但你可以编写一个postinstall脚本npm来运行。然后,您的模块只不过是一个脚本,然后根据环境变量或命令行标志postinstall计算出实际安装的内容。不过,这对我来说似乎很脆弱。如果你走这条路,我会认真考虑你是否在这里解决了正确的问题。NODE_ENV看起来更优雅和传统。


推荐阅读