NodeJS 从Git安装特定版本的npm

vyswwuz2  于 2022-12-18  发布在  Node.js
关注(0)|答案(8)|浏览(284)

假设我已经为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还是有更好的解决方案?

k7fdbhmy

k7fdbhmy1#

公认的答案对我不起作用。
下面是我从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

xxb16uws

xxb16uws2#

要安装的registry中必须存在依赖项,只需指定version描述符即可。
如果您的项目不应该公开共享,您当然可以创建和使用自己的注册表,而不是registry.npmjs.org
但是,如果它不在注册表中,则必须通过URL或Git URL引用它。要使用Git URL指定版本,请在末尾包含适当的<commit-ish>,如标记URL fragment
例如,对于名为0.3.1的标记:

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

注意:上面的代码段显示的基本URL与问题中发布的URL相同。

剪下部分(...)应填写:

"myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"

而且,当SSH访问不可用时,将需要不同的地址格式:

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"


根据您的操作系统,您也可以link到另一个文件夹中的依赖项,您已经从Github克隆了该依赖项。

a14dhokn

a14dhokn3#

如果你说的版本是指标签或发行版,那么github会提供相应的下载链接,例如,如果我想安装fetch版本0.3.2(npm上没有),那么我会在dependencies下添加:

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

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

更新日期:

目前我使用的方法是GitHub服务依赖项的紧凑表示法:

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

其中commit可以是任何带有commit的东西,比如tag。在GitHub中,你甚至可以去掉初始的github:,因为它是默认的。

nbnkbykc

nbnkbykc4#

这个命令从特定的git提交中安装npm包username/package

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

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

fjaof16o

fjaof16o5#

我对@qubyte above的示例注解被截断了,所以这里有一些更容易阅读的内容...
@surjikal描述的above方法适用于分支提交,但不适用于我尝试包含的 tree 提交。
归档模式也适用于提交。例如fetch@a2fbf83

国家预防机制

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

Yarn

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

格式

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


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

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

对于相关的vuex commit

dauxcl2d

dauxcl2d6#

我需要运行两个版本的tfjs-core,发现两者都需要在安装后构建。
package.json:

"dependencies": {
  "tfjs-core-0.14.3": "git://github.com/tensorflow/tfjs-core#bb0a830b3bda1461327f083ceb3f889117209db2",
  "tfjs-core-1.1.0": "git://github.com/tensorflow/tfjs-core#220660ed8b9a252f9d0847a4f4e3c76ba5188669"
}

然后:

cd node_modules/tfjs-core-0.14.3 && yarn install && yarn build-npm && cd ../../
cd node_modules/tfjs-core-1.1.0  && yarn install && yarn build-npm && cd ../../

最后,使用库:

import * as tf0143 from '../node_modules/tfjs-core-0.14.3/dist/tf-core.min.js';
import * as tf110 from '../node_modules/tfjs-core-1.1.0/dist/tf-core.min.js';


这工作很好,但最肯定的是#hoodrat

628mspwn

628mspwn7#

我在这里描述了我在运行npm install时遇到的一个问题-包没有出现在node_modules中。
问题是已安装包的package.json中的name值与导入包的名称不同(我的项目的package.json中的键)。
因此,如果您安装的项目名称为some-package(名称值在其package.json中),则在项目的package.json中写入:"some-package": "owner/some-repo#tag" .

gg58donl

gg58donl8#

如果你对不止一个模块这样做,并且想要对版本有更多的控制,你应该考虑拥有你自己的私有npm注册表。
这样你就可以把你的模块发布到你的私有npm注册表中,并像使用公共模块一样使用package.json条目。
https://docs.npmjs.com/files/package.json#dependencies

相关问题