有没有人有一个很好的解决方案来解耦父项目的模块包装?

时间:2014-03-15 03:34:35

标签: node.js dependencies npm gulp

我最近一直在与gulpjs合作,我发现自己手动将一堆包装库与其父项目脱钩,因为我不想依赖它们一些简单的项目,以保持父项目的最新。

例如,gulp-jade列出jade 1.1作为依赖项,但我想使用1.3,因此我手动打开其package.json,删除{{ 1}},并从其jade目录中删除jade,以便它在我的项目node_modules目录中使用1.3版本。但是现在如果我更新node_modules,我就会有一个讨厌的git冲突......

所以我想知道是否有人有解决方案,并不是每次更新项目时都不会手动更新项目...

1 个答案:

答案 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已经满足了依赖关系。

Hacky解决方案

您始终可以向1.3添加安装后脚本,例如:将其合并到:

package.json

在您运行{ "scripts": { "postinstall": "rm ./node_modules/gulp-jade/node_modules/jade" } } 时从jade移除gulp-jade模块。这不是最好的,因为您将重新安装npm install然后在每次安装时立即删除它,但它可能是最简单的解决方案。当1.1解析node的依赖关系时,它不会查看版本,只会查看父模块的gulp-jade文件夹封装