假设我已经为Node.js编写了一个模块,我希望它保持私有。我知道我可以(应该)添加这样一行:
"private": "true"
到package.json
文件,我还知道我可以使用文件系统路径或git仓库的链接(包括GitHub)来npm install
这个模块。
我也知道我可以把这样一个文件系统路径或者一个git repo的链接放到package.json
中,这样dependencies
部分看起来就像这样:
"dependencies": {
"myprivatemodule": "git@github.com:..."
}
我现在想要的不是链接到最新的版本,而是链接到一个特定的版本。我知道的唯一可能性是使用ID链接到一个特定的提交。但是这比使用0.3.1
这样的版本号可读性差,维护性也差。
所以我的问题是:是否可以指定这样的版本号,并让npm在git仓库中搜索包含该版本号的最新提交?
如果没有,你是如何在项目中解决这个问题的呢?你是使用提交ID还是有更好的解决方案?
8条答案
按热度按时间k7fdbhmy1#
公认的答案对我不起作用。
下面是我从github中提取一个包的过程:
或者手动添加到package.json上:
以下是完整的
npm
文档:https://docs.npmjs.com/cli/v9/configuring-npm/package-json?v=true#git-urls-as-dependencies
xxb16uws2#
要安装的
registry
中必须存在依赖项,只需指定version
描述符即可。如果您的项目不应该公开共享,您当然可以创建和使用自己的注册表,而不是
registry.npmjs.org
。但是,如果它不在注册表中,则必须通过URL或Git URL引用它。要使用Git URL指定版本,请在末尾包含适当的
<commit-ish>
,如标记URL fragment。例如,对于名为
0.3.1
的标记:注意:上面的代码段显示的基本URL与问题中发布的URL相同。
剪下部分(
...
)应填写:而且,当SSH访问不可用时,将需要不同的地址格式:
型
根据您的操作系统,您也可以
link
到另一个文件夹中的依赖项,您已经从Github克隆了该依赖项。a14dhokn3#
如果你说的版本是指标签或发行版,那么github会提供相应的下载链接,例如,如果我想安装fetch版本0.3.2(npm上没有),那么我会在
dependencies
下添加:与提交散列方法相比,唯一的缺点是散列不能保证表示更改的代码,而标记可以被替换,幸好这种情况很少发生。
更新日期:
目前我使用的方法是GitHub服务依赖项的紧凑表示法:
其中commit可以是任何带有commit的东西,比如tag。在GitHub中,你甚至可以去掉初始的
github:
,因为它是默认的。nbnkbykc4#
这个命令从特定的git提交中安装npm包
username/package
:这里
3d0a21cc
是提交哈希的前8个字符。fjaof16o5#
我对@qubyte above的示例注解被截断了,所以这里有一些更容易阅读的内容...
@surjikal描述的above方法适用于分支提交,但不适用于我尝试包含的 tree 提交。
归档模式也适用于提交。例如fetch@a2fbf83
国家预防机制:
Yarn:
格式:
型
下面是需要
/archive/
模式的 tree 提交:对于相关的vuex commit
dauxcl2d6#
我需要运行两个版本的tfjs-core,发现两者都需要在安装后构建。
package.json:
然后:
最后,使用库:
型
这工作很好,但最肯定的是#hoodrat
628mspwn7#
我在这里描述了我在运行
npm install
时遇到的一个问题-包没有出现在node_modules
中。问题是已安装包的
package.json
中的name
值与导入包的名称不同(我的项目的package.json
中的键)。因此,如果您安装的项目名称为
some-package
(名称值在其package.json
中),则在项目的package.json
中写入:"some-package": "owner/some-repo#tag"
.gg58donl8#
如果你对不止一个模块这样做,并且想要对版本有更多的控制,你应该考虑拥有你自己的私有npm注册表。
这样你就可以把你的模块发布到你的私有npm注册表中,并像使用公共模块一样使用package.json条目。
https://docs.npmjs.com/files/package.json#dependencies