假设我已经为Node.js写了一个模块,我想保持私有。我知道我可以(应该)加上这一行:

"private": "true"

打开包裹。我也知道我可以npm安装这个模块使用文件系统路径或链接到一个git存储库,包括GitHub。

我也知道我可以把这样的文件系统路径或链接到一个git回购包。Json,这样依赖关系部分看起来就像这样:

"dependencies": {
  "myprivatemodule": "git@github.com:..."
}

我现在想要的不是链接到最新的版本,而是一个特定的版本。我所知道的唯一可能是使用其ID链接到特定的提交。但是,与使用0.3.1这样的版本号相比,这样的版本号可读性更差,可维护性也更差。

所以我的问题是:无论如何,是否可以指定这样一个版本号,并让npm搜索git存储库中包含该版本的最新提交?

如果不是,你如何在你的项目中解决这个问题?您是否使用提交id,或者是否有更好的解决方案?


当前回答

如果你用不止一个模块做这件事,并且想要对版本有更多的控制,你应该考虑拥有你自己的私有npm注册表。

这样你就可以把你的模块发布到你的私有npm注册表中并使用包。Json条目与处理公共模块的方法相同。

https://docs.npmjs.com/files/package.json#dependencies

其他回答

公认的答案对我不起作用。

这是我正在做的从github拉包:

npm install --save "git://github.com/username/package.git#commit"

或者手动添加到package.json:

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}

下面是完整的npm文档:

https://docs.npmjs.com/cli/v9/configuring-npm/package-json?v=true#git-urls-as-dependencies

这个命令从特定的git提交中安装npm包用户名/包:

npm install https://github.com/username/package#3d0a21cc

这里3d0a21cc是提交哈希的前8个字符。

如果你所说的版本是指一个标签或一个版本,那么github提供了这些版本的下载链接。例如,如果我想安装fetch 0.3.2版本(它在npm上不可用),那么我添加到我的包中。依赖项下的Json:

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

与提交哈希方法相比,唯一的缺点是哈希保证不会表示更改的代码,而标记可以被替换。值得庆幸的是,这种情况很少发生。

更新:

这些天我使用的方法是一个GitHub服务依赖的紧凑符号:

"dependencies": {
  "package": "github:username/package#commit"
}

commit可以是任何有commit性质的东西,比如标签。在GitHub的情况下,你甚至可以删除初始的GitHub:因为它是默认的。

上面我对@qubyte的示例注释被删减了,所以这里有一些更容易阅读的东西…

上面描述的@surjikal方法适用于分支提交,但它不适用于我试图包含的树提交。


存档模式也适用于提交。例如,获取@ a2fbf83

npm:

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

纱:

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

格式:

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz

下面是需要/archive/模式的树提交:

yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

对于相关的vuex提交

如果你用不止一个模块做这件事,并且想要对版本有更多的控制,你应该考虑拥有你自己的私有npm注册表。

这样你就可以把你的模块发布到你的私有npm注册表中并使用包。Json条目与处理公共模块的方法相同。

https://docs.npmjs.com/files/package.json#dependencies