您可以为您的组织托管一个私有存储库以与 npm 一起使用吗?

Posted

技术标签:

【中文标题】您可以为您的组织托管一个私有存储库以与 npm 一起使用吗?【英文标题】:can you host a private repository for your organization to use with npm? 【发布时间】:2011-11-26 09:35:06 【问题描述】:

Npm 听起来像是一个在组织内使用的绝佳平台,很好奇是否可以使用私有存储库,例如 Nexus/Maven。谷歌上什么都没有:(

【问题讨论】:

下面是非常简洁的文档,如何做到这一点:clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository 这与 pvorb 在他的回答中解释的相同。 请注意,clock.co.uk 帖子是 npm 注册表的完整副本。对于所需依赖项的本地缓存,我找到的最佳解决方案是npm_lazy。 my fork 上的文档可能更容易理解。 我知道我的讨论有点晚了,但我想补充一点,我们最近在我们的(免费)产品ProGet 中添加了私有 npm 注册表支持 如下所述,Nexus 现在支持托管和代理 npm 存储库。 多年来,有许多可用的选项。任何回到这里的人都应该阅读所有答案,而不仅仅是我在 2011 年接受的答案。 【参考方案1】:

如果我不能很好地理解你的问题,请原谅我,但这是我的答案:

您可以创建一个私有的 npm 模块并使用 npm 的常规命令来安装它。大多数 node.js 用户使用 git 作为他们的存储库,但您可以使用任何适合您的存储库。

    在您的项目中,您需要一个 NPM 包的骨架。最多 节点模块具有 git 存储库,您可以在其中查看它们的方式 与 NPM 集成(package.json 文件,我相信它是 这个和 NPM 的网站向你展示了如何制作一个 npm 包) 使用类似于 Make 的东西来制作和压缩你的包 可从 Internet 或您的网络获取,以便为 npm 暂存 安装下载。

    一旦你的包制作完成,然后使用

    npm install *tarball_url*

【讨论】:

你没有得到他的问题,但答案对我很有用! :)【参考方案2】:

我认为没有简单的方法可以做到这一点。

look at the npm documentation 告诉我们,这是可能的:

我可以运行自己的私有注册表吗?

是的!

最简单的方法是复制沙发数据库,​​并使用相同(或相似)的设计文档来实现 API。

如果您从官方 CouchDB 设置连续复制,然后将您的内部 CouchDB 设置为注册表配置,那么您将能够读取任何已发布的包,除了您的私有包,并且默认情况下只会发布内部。如果你想发布一个包让全世界看到,你可以简单地覆盖该命令的--registry 配置。

时钟博客中的how to create a private npm repository 也有一个很好的教程。

编辑(2017-02-26):

不是很新,但现在有 paid plans 在 npm 上托管私有包。

多年来,通过基于 npm 构建的庞大前端生态系统,npm 也成为许多非 Node.js 公司的一个因素。如果您的公司已经在运行 Sonatype Nexus 来在内部托管 Java 项目,您也可以使用它来托管内部 npm 包。

其他选项包括JFrog Artifactory 和Inedo ProGet,但我没用过。

【讨论】:

【参考方案3】:

https://github.com/isaacs/npmjs.org/ : 在 npm v1.0.26 版本中,您可以在 package.json 文件中指定私有 git 存储库 url 作为依赖项。我没有使用它,但希望得到反馈。以下是您需要做的:


    "name": "my-app",
    "dependencies": 
        "private-repo": "git+ssh://git@yourgitserver.com:my-app.git#v0.0.1",
    

下面的帖子讨论了这个:Debuggable: Private npm modules

【讨论】:

这是一个很棒的功能,但我接受了 pvorb 的,因为我问的是托管整个 NPM 存储库,例如内部 Maven 存储库 注意:NPM 目前不支持使用这些 git URL 指定版本范围(例如 1.2.x 或 ^1.2.3)。 github.com/npm/npm/issues/3328 @Clay,你可以指定一个标签(v0.0.1),对吧? 是的,你可以做一个精确的标签。 有没有办法使用 GitHub 部署密钥对私有仓库进行身份验证?【参考方案4】:

这是我所知道的最简单的方法 - 使用 Gemfury 私有 npm 注册表将其托管在云中。

它是免费的,您可以使用您的 Github 帐户登录。与设置自己的数据库相比,它应该可以为您节省大量时间。

【讨论】:

它不是免费的。【参考方案5】:

This post 谈论如何设置私有注册表

确保 couchdb 已安装在您的系统中

复制 npmjs.org 使用以下命令

curl -X POST http://127.0.0.1:5984/_replicate -d '"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true' -H "Content-Type: application/json"

注意命令中有"continuous":true,它利用了CouchDB 的_changes API,并会在通知该API 时拉取任何新的更改。

如果您想停止这些复制,可以轻松添加"cancel":true。那么脚本将是

    curl -X POST http://127.0.0.1:5984/_replicate -d '"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true' -H "Content-Type: application/json"

然后去npmjs.org readme安装npm(确保nodejsgit已经安装)。吹就是所有的步骤

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 

【讨论】:

不幸的是,网址isaacs.iriscouch.com/registry 现在已经死了。我尝试将其更改为 skimdb.npmjs.com/registry ,起初这似乎有效,但它仅复制注册表索引而不是 tarball ... couchapp 自述文件指出 couchapp 现在有点过时了,但它也说当前镜像整个注册表的方法是使用 npm-fullfat-registry 我最终为此使用了static-registry,这与 couchdb 解决方案不同,根本不需要配置。【参考方案6】:

我猜这个帖子需要更新。如果您查看任何可用的 npm 注册表,它们都非常繁重,并且需要 couchdb。 Gemfurry 和其他人需要你从公共回购中分叉。一些像 shadow-npm 这样的 npm 有no recent commits。

然后,我们找到了Reggie。它有一个很好的提交活动,非常容易安装和使用,并且有很好的community support。它非常轻量级,您不必处理 couchdb 等。

【讨论】:

【参考方案7】:

有一个易于使用的 npm 包来执行此操作。 https://www.npmjs.org/package/sinopia

简而言之,Sinopia 是一个私有/缓存的 npm 存储库服务器,您可以零配置进行设置。

Sinopia 可用于:

发布自己的私有包而不将其暴露给公众 仅缓存使用的公共包(无需复制整个公共注册表) 用内部生成的修改版本覆盖公共包。

【讨论】:

Sinopia 好像不再维护了。截至今天(2016 年 3 月 7 日),上次提交是 8 个多月前。它看起来很棒并且运行良好,但要注意可维护性。 查看 verdaccio。这是一个积极维护的分支:github.com/verdaccio/verdaccio verdaccio 是否支持“仅私有”配置,它不会查询任何公共注册表? @MarkusSchaber 您可以禁用到另一个注册表的代理。即使代理尝试访问网络,它也可以在离线模式下工作。 我真的认为 Verdaccio 今天应该得到它自己的答案 ***.com/a/50815174/336753 我什至没有先注意到这里的评论。【参考方案8】:

我可能会迟到一点,但这两个中的任何一个都可能适合你:

    http://www.jfrog.com/confluence/display/RTF/Npm+Repositories https://github.com/krakenjs/kappa

【讨论】:

【参考方案9】:

支持私有 npm 注册表的存储库管理器:

Sonatype Nexus 2.10 Artifactory 3.2

【讨论】:

只有付费版本支持 npm 仓库;免费版本没有。 Sonatype Nexus 3.0 的免费版本实际上支持 npm repos(以及 bower 和 docker repos)。【参考方案10】:

聚会有点晚了,但 NodeJS(我猜是 11 月 14 日左右)支持企业 NPM 存储库 - 你可以在他们的 official site 上找到更多信息。

粗略一看,npmE 似乎允许对 NPM 存储库进行直通镜像 - 也就是说,如果在 real NPM 存储库中找不到包,它会在你的内部的。看起来很有用!

npm Enterprise 是一种本地解决方案,用于在您的组织内安全地共享和分发 javascript 模块,来自维护 npm 和公共 npm 注册表的团队。它专为有以下需求的团队设计:

易于内部共享私有模块更好地控制开发 和部署工作流程围绕部署开源更严格的安全性 模块符合在本地托管代码的法律要求 npmE 是私有 npm

npmE 是一个 npm 注册表,可与相同的标准 npm 客户端一起使用 您已经使用,但提供了更大的所需的功能 现在积极采用节点的组织。它建好了 作者:npm, Inc.,npm 开源项目的发起人和主办方 公共 npm 注册表。

很遗憾,它不是免费的。您可以试用,但它是商业软件。这对于独立开发者来说不是那么好,但如果你是独立开发者,你有 GitHub :-)

【讨论】:

【参考方案11】:

2015 年 4 月 14 日,npm private modules 被引入。

当您为私有模块付费时,您可以:

托管任意数量的私有包 将这些软件包的读取权限或读写权限授予任何其他付费用户 安装和使用其他付费用户授予您读取权限的任何软件包 协作处理其他付费用户授予您写入权限的任何软件包

当然不是免费的——目前每位用户每月 7 美元。

而且它仍然是一项相当新的服务。例如,缺少对组织帐户的支持(截至 2015 年 6 月):

目前,私人包仅适用于个人用户,但即将推出对组织帐户的支持。在此期间,请随意为您的组织创建用户,我们可以在获得支持时将其升级为组织。

因此,虽然并不完美,但它是维护私有包的官方 npm 解决方案,这本身就值得一提。

更新

Npm Private Packages 现已推出,个人用户和组织都有计划:

公共和私人包数量不限 $7/月/开发者 包括一个范围名称,基于组织名称 发布和控制对@org-name/foo 的访问

(免责声明:甚至与 npm, Inc. 没有任何远程关联)

【讨论】:

【参考方案12】:

我们使用的是 Sonatype Nexus,版本是 Nexus Repository ManagerOSS 3.6.1-02。而且我确信它支持 NPM 私有存储库并缓存了包。

【讨论】:

【参考方案13】:

Verdaccio 是我一直在寻找的,它应该得到它自己的答案;)它是 Sinopia 的一个积极维护的分支(高度赞成的答案 here)。它是一个 npm 注册表作为 npm 包,可以找到

这里:https://github.com/verdaccio/verdaccio, 在这里:https://www.verdaccio.org, 和port number: 4873

使用PM2运行

npm i -g verdaccio pm2
pm2 start --name verdaccio `which verdaccio`
pm2 save

使用docker 运行

docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

使用Helm 运行

helm repo add verdaccio https://charts.verdaccio.org
helm repo update
helm install verdaccio/verdaccio

【讨论】:

这个!谢谢 -> docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio @mwm 谢谢。将 docker 版本添加到列表中。 加个heml图表就好了github.com/verdaccio/charts【参考方案14】:

如果您更喜欢分散式方法,也可以使用 Aragon 包管理器:

    使用 APM:http://blog.aragon.one/using-apm-to-replace-npm-and-other-centralized-package-managers/ 部署 APM:https://github.com/aragon/aragonOS#apm

【讨论】:

以上是关于您可以为您的组织托管一个私有存储库以与 npm 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

有没有地方可以在线托管您的代码?

您如何包含标准 CUDA 库以与 NVRTC 代码链接?

13.1 存储选项

您的组织策略阻止我们为您完成此操作

托管您自己的 NuGet 和符号源服务器?

outlook 您的组织策略阻止我们为您完成此操作 解决办法