我最近一直在与gulpjs合作,我发现自己手动将一堆包装库与其父项目脱钩,因为我不想依赖它们一些简单的项目,以保持父项目的最新。
例如,gulp-jade列出jade 1.1
作为依赖项,但我想使用1.3
,因此我手动打开其package.json
,删除{{ 1}},并从其jade
目录中删除jade,以便它在我的项目node_modules
目录中使用1.3
版本。但是现在如果我更新node_modules
,我就会有一个讨厌的git冲突......
所以我想知道是否有人有解决方案,并不是每次更新项目时都不会手动更新项目...
答案 0 :(得分:2)
我想说这主要是gulp-jade
的一个问题。 NPM中的节点包强调遵守semver
规范至关重要。鉴于此,gulp-jade
应该在^1.1
而不是package.json
中使用~1.1
,因为只要jade
跟随语义版本控制,它就非常安全。
^1.1
表示>= 1.1.0
至< 2.0.0
~1.1
表示>= 1.1.0
至< 1.2.0
在这种情况下,我会提交一份PR,更改gulp-jade
中支持的版本范围。
然后,为了更具体地解决您的问题,通过该更改,您可以1.3
作为项目的依赖项与gulp-jade
一起安装,并且NPM不会费心安装{{1 1.1
的版本,特别是因为安装了gulp-jade
已经满足了依赖关系。
您始终可以向1.3
添加安装后脚本,例如:将其合并到:
package.json
在您运行{
"scripts": {
"postinstall": "rm ./node_modules/gulp-jade/node_modules/jade"
}
}
时从jade
移除gulp-jade
模块。这不是最好的,因为您将重新安装npm install
然后在每次安装时立即删除它,但它可能是最简单的解决方案。当1.1
解析node
的依赖关系时,它不会查看版本,只会查看父模块的gulp-jade
文件夹封装