我有一个遗留项目,它取决于npm软件包的特定版本,它通过依赖关系链依赖于phantomjs的特定npm软件包,其二进制文件不再在注册位置联机。这打破了项目的构建。
不能更新软件包版本。
我可以通过手动获取所需版本的phantomjs并将其放入我系统的下载文件夹来欺骗npm,但这是一种解决方法,我想要一个更清晰的解决方案,理想情况是位于配置脚本中。
我可以在我的项目的package.json或.npmrc文件中,每次为该项目运行“npm install”时,强制npm为包@某个版本使用另一个url吗?
答案 0 :(得分:0)
一种可能的解决方案是将包上传到github,然后按照NPM docs https://docs.npmjs.com/files/package.json#urls-as-dependencies
进行操作答案 1 :(得分:0)
我发现使用npm-shrinkwrap(https://docs.npmjs.com/files/package-locks)可以实现这一点。基本上,您将一个npm-shrinkwrap.json文件与package.json一起添加到项目中。在shrinkwrap文件中,您可以覆盖package.json中列出的任何特定包 - 在该包的依赖关系链中的任何位置,您指定一个URL来从中获取依赖包。
{
"name": "MyProject",
"dependencies": {
"A" : {
"version" :"1.2.1",
"dependencies": {
"B": {
"version": "https://myBForkUrl.git"
}
}
}
}
如果MyProject依赖于包A,而包依赖于B,但是B没有维护并且有一个严重错误,我可以自己动摇B,修复错误并将其托管在https://myBForkUrl.git,也需要分叉A.根据NPM的文档,看起来这个覆盖可以根据需要嵌套。