ChatGPT解决这个技术问题 Extra ChatGPT

如何在没有我自己的注册表的情况下安装私有 NPM 模块?

我已经获取了一些共享代码并将其放入 NPM 模块中,我不想将其上传到中央注册表。问题是,我如何从其他项目安装它?

显而易见的方法可能是建立自己的 NPM 注册表,但根据文档,这涉及很多麻烦。

我可以只安装一个位于本地文件系统上的 NPM 模块,甚至可以从 git 安装吗?

npm install --from-git git@server:project

h
heckj

在您的私有 npm 模块中添加

"private": true 

到你的 package.json

然后在另一个模块中引用私有模块,在你的 package.json 中使用它

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

如果您希望您的 package.json 维护私有 repo 依赖项列表,这是真正正确的答案,这是您应该做的一件好事(tm)。
在示例中,它引用了一个特定的标签,但如果您没有标签,那么它将默认为 master。 (见git-scm.com/book/en/Git-Basics-Tagging
如果我不提供我的凭据,我不明白这个命令行如何从私人 github 存储库下载代码!那么如何传递我的 github 凭据呢?
请注意,"private": true 部分不是必需的,但它有助于防止您的私有存储库意外发布到公共 npm 注册表。
npm 也会查找几个环境变量。在 npm install <git remote url> 部分的 the manual 中,有 GIT_ASKPASSGIT_SSH 等选项。选择默认 id_rsa 以外的密钥的示例用法:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
I
Impossible Reality
cd somedir
npm install .

或者

npm install path/to/somedir

somedir 必须包含其中的 package.json

它也知道 git:

npm install git://github.com/visionmedia/express.git

path/to/somedir 解决方案有点工作,但它有点糟糕,因为所有的 require 语句都必须包含该相对或绝对路径。如果我做错了什么,请纠正我...
@Luke 是的,你错了。在 npm install 之后,所有文件都被复制到您的项目目录中。因此,require 语句中的路径将仅与您的项目目录相关。
我对上面的部分感到困惑,我自己没有测试这个的唯一原因是我还在学习并且没有私有模块可以工作。无论如何,通过将您的目录更改为模块所在的位置然后调用 install 不会只是安装在那里而不是您想要使用它的项目吗?
旁注:(a) 使用 git repos 时,您可以通过在 git url 末尾添加 #<ref> 来指定分支/提交/标签,例如 git://github.com/visionmedia/express.git#v0.0.1; (b) 为了安全起见,将 "private": true 添加到您的私有存储库的 package.json 中。这将确保 npm 永远不会让您不小心将秘密酱发布到官方 npm 注册表。 (根据debuggable.com/posts/…
仅供参考,如果您通过 http 为您的 git 提供服务,即使 git clone http://all/the/things.git 工作正常,您也需要 npm i git+http://all/the/things.git
C
Colonel Panic

我可以只安装一个位于本地文件系统上的 NPM 包,甚至可以从 git 安装吗?

是的你可以!来自文档https://docs.npmjs.com/cli/install

一个包是:a) 一个文件夹,其中包含由 package.json 文件描述的程序 b) 一个 gzip 压缩的 tarball,其中包含 (a) c) 一个解析为 (b) 的 url d) 一个已发布的 @在注册表上使用 (c) e) 一个 @ 指向 (d) f) 一个 有一个满足 (e) g) 一个 的“最新”标签(b)

npm 不是很棒吗?


请注意,如果您选择选项 b),它实际上必须是 gzipped tarball,单纯的 zip 存档是行不通的。即,如果您使用 tar -czf my-package.tar.gz dist 创建您的包(假设您的 dist 文件夹中也有一个适当的 package.json 文件),那么您可以从您的其他项目中npm install ../my-lib/my-package.tar.gz
a
arcseldon

2016 年 1 月更新

除了其他答案之外,有时您希望在团队上下文中使用私有模块。

Github 和 Bitbucket 都支持生成团队 API 密钥的概念。此 API 密钥可用作此团队执行 API 请求的密码。

在您的私有 npm 模块中添加

"private": true 

到你的 package.json

然后在另一个模块中引用私有模块,在你的 package.json 中使用它

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

其中团队名称 = myteamname,API 密钥 = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

这里我引用了一个 bitbucket 存储库,但使用 github 也几乎相同。

最后,作为替代方案,如果您真的不介意支付 每月 7 美元(在撰写本文时),那么您现在可以立即使用 private NPM modules


如果你想拥有一个全局模块,你可以使用它吗?
恐怕这对我不起作用。找不到远程和存储库。有任何想法吗?
@ThomasBormans - 仍然有麻烦?请按照上述说明粘贴(打乱您的团队名称/ api 密钥)您在 package.json 的依赖项部分中作为行的内容。我发现这对 github 和 bitbucket 私人仓库都很有效。你用的是哪个?
@arcseldon "name": "git+key:x-oauth-basic@bitbucket.org/user/repo.git" 返回 EISDIR: 对目录的非法操作,读取。并且 "name": "git+user:key@bitbucket.org/repo.git" 返回几个错误,包括这些词 remote: Not Found, fatal: repository, Command failed: git clone。有任何想法吗?
尝试遵循我在回答中给出的“确切”格式:“git+https://:@bitbucket.org/.git 你是如何生成 API 密钥的?你是否仔细检查过它在你的 bitbucket 设置中是正确的......很抱歉问这个显而易见的问题,但我有近 100% 的信心这应该可以工作。
B
Ben Lesh

FWIW:在处理私人组织存储库时,我对所有这些答案都有疑问。

以下对我有用:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

例如:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

我不完全确定为什么其他答案在这种情况下对我不起作用,因为它们是我在访问 Google 并找到此答案之前首先尝试的。其他答案是我过去所做的。

希望这对其他人有帮助。


你可以使用 git repo 的子文件夹吗?
2019年为我工作!但我必须确保 git has credentials 才能访问该帐户。 (例如使用 https:// 测试 git clone 两次,并确保第二次运行时不需要密码。然后你就可以开始了!)
C
Community

以一种可访问的方式构建您的代码,如下所示。如果这对你来说是可能的。

NodeProjs\Apps\MainApp\package.json NodeProjs\Modules\DataModule\package.json

在 MainApp @NodProjs\Apps\MainApp\

npm install --S ../../Modules/DataModule

您可能需要将 package.json 更新为:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

这适用于我的情况。


在@2021 中工作 - "{{node_module__name}}": "file:{{node_module__path}}"
b
bwest87

我遇到了同样的问题,经过一番搜索,我找到了 Reggie (https://github.com/mbrevoort/node-reggie)。它看起来很结实。它允许将 NPM 模块轻量级发布到私有服务器。不完美(安装时没有身份验证),而且它还很年轻,但我在本地对其进行了测试,它似乎做了它所说的应该做的事情。

那是......(这只是来自他们的文档)

npm install -g reggie
reggie-server -d ~/.reggie

然后 cd 进入您的模块目录并...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

最后,您可以在直接的 npm install 命令中或从 package.json 中使用该 url 来从 reggie 安装软件包......就像这样

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

或者..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}

r
roo2

Npm 现在以 $7/user/month 的价格提供无限制的 private hosted modules,就像这样使用

cd private-project
npm login

在你的包 json 集 "name": " @username/private-project"

npm publish

然后要求您的项目:

cd ../new-project
npm install --save @username/private-project

这是否需要客户端登录步骤?
有什么替代方法?例如,如果您想在 S3 上托管您的“包”并从那里拉取。
B
BGBRUNO

这是 what I was looking for - 从“私人仓库”获取最新信息:

GitHub:

$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git
$ npm install git+ssh://git@github.com/username/my-new-project.git

比特桶:

$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git

C
Community

arcseldon's answer 开始,我发现 URL 中需要团队名称,如下所示:

npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"

请注意,API 密钥仅适用于团队,而不是个人用户。


L
Lars

我将以下内容与私有 github 存储库一起使用:

npm install github:mygithubuser/myproject

D
Dominik

为此,您可以使用 Verdaccio,它是一个内置于 Node.js 中的轻量级私有 npm 代理注册表。它也是免费和开源的。通过使用 Verdaccio,它不会像普通的私有 npm 注册表那样麻烦。

您可以找到有关如何安装和运行它的详细信息 on their website,但步骤如下:

它需要 node >=8.x

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

它还有一个 docker,因此您可以轻松地将其发布到您的公开可用的 docker 上,瞧,您有一个私有的 npm 存储库,可以在您配置它时以某种方式分发给其他人!


A
Alex Belozerov

配置从公共 Github 存储库安装,即使机器在防火墙下:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}

s
sapy

很简单 -

npm config set registry https://path-to-your-registry/

它实际上将 registry = "https://path-to-your-registry" 这一行设置为 /Users/<ur-machine-user-name>/.npmrc

您显式设置或默认设置的所有值都可以通过 - npm config list 查看


K
Krishna

显然,设置私有 npm 注册表是最具可扩展性和长期性的解决方案,尽管一开始有点麻烦。

此外,您可以使用其他答案中提到的 git+https/ssh 进行安装。但是如果你有私有仓库,并且你正在云端构建镜像,比如说使用 google cloud build,你必须设置 GitHub ssh 连接。

可以使用以下方法解决此类一次性情况的最简单解决方案。

从头开始克隆并修改或创建您自己的库。

生成存档文件(包代码及其依赖项),使用 yarn install && yarn pack 这将生成文件 Rich-markdown-editor-v11.13.117.tgz

将此文件移动到 libs 文件夹并将此条目添加到 package.json 的依赖项对象中。 “rich-markdown-editor”:“文件:libs/rich-markdown-editor-v11.13.117.tgz”,

现在,安装软件包。纱线安装

确保将该文件添加到您的 vcs 中,并且 docker 映像创建中的安装过程也应该在云中运行。

注意:如果你经常更新包并在你的 vcs 中提交,它会增加你的 repo 大小(同时克隆完整的历史记录)。