【问题标题】:can you host a private repository for your organization to use with npm?您可以为您的组织托管一个私有存储库以与 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_lazymy fork 上的文档可能更容易理解。
  • 我知道我的讨论有点晚了,但我想补充一点,我们最近在我们的(免费)产品ProGet 中添加了私有 npm 注册表支持
  • 如下所述,Nexus 现在支持托管和代理 npm 存储库。
  • 多年来,有许多可用的选项。任何回到这里的人都应该阅读所有答案,而不仅仅是我在 2011 年接受的答案。

标签: node.js repository npm


【解决方案1】:

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

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

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

    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 ArtifactoryInedo 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 
    

    【讨论】:

    【解决方案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 今天应该得到它自己的答案 stackoverflow.com/a/50815174/336753 我什至没有先注意到这里的评论。
      【解决方案8】:

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

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

      【讨论】:

        【解决方案9】:

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

        【讨论】:

        • 只有付费版本支持 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 包管理器:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-06-15
                • 1970-01-01
                • 2020-11-23
                • 1970-01-01
                • 2014-01-22
                相关资源
                最近更新 更多