草庐IT

node.js - 我可以在不复制公共(public)存储库的情况下运行私有(private) npm 存储库吗?

coder 2023-05-28 原文

我正在使用 node.js 编写一些代码(供内部使用),并希望将模块(为 npm 打包)存储在一个包存储库中,用于每个分发到将安装它们的各种机器.

理想情况下,我想要一个类似于 Debian 的 apt 存储库的解决方案,我可以在其中运行私有(private)存储库服务器并配置 npm 以使用要安装的存储库列表(安装“foo”时,如果“foo”已知通过我的私有(private)服务器从那里安装它,否则从公共(public)服务器安装它)。

但是,看起来 npm registry 配置键只接受一个 URL。

有没有办法实现我想要的?

我能找到的最接近的是:

  • 在本地镜像公共(public)存储库并在其上添加我的包……但我不想在 AWS 上复制大量数据(2.5G 并且仍在下载)。
  • 在 git 存储库中托管我所有的包并从那里安装(这更麻烦)。
  • 在 HTTP 上托管静态包(据我所知,这会阻止我自动获取“最新版本”。我想我可以用符号链接(symbolic link)做一些事情,但这仍然不如 git 灵活,需要完整的 URL (需要保持最新),并且不提供可搜索的存储库。

最佳答案

我只是为我的工作设置了这个。这是我所做的:

  1. 设置空的 NPM 注册表:我按照 npmjs.org 的这个分支的说明进行操作,它增加了很多 improved documentation .

  2. 设置 Kappa:我使用了 Kappa ,来自 Paypal 的一个很棒的 npm 代理。 (我猜他们的用例与大多数想要私有(private)存储库的人非常相似;这正是我想要的)。

  3. 设置 npm_lazy(可选):我想要一个很好的常用包缓存,以防 npmjs.org 出现故障,所以我添加了 npm_lazy在整个事物的前面,作为一个缓存层。

整个过程花了两天时间(ish)才能启动并运行。附带说明一下,如果您担心人们会意外推送到公共(public)注册表,我建议将其添加到您的 package.json:

"publishConfig": { "registry": "http://my-registry.example.com"},

这真的只是有点偏执;一旦您将 npm 设置为指向您的 Kappa/npm_lazy 实例,Kappa 就会为您处理发布到您的私有(private)存储库。

注意:Kappa 只会每次发布到其配置中的第一个存储库。如果您需要同时发布到您的私有(private)注册表和公众,您将需要制定自己的解决方案。

关于node.js - 我可以在不复制公共(public)存储库的情况下运行私有(private) npm 存储库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609131/

有关node.js - 我可以在不复制公共(public)存储库的情况下运行私有(private) npm 存储库吗?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  4. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  5. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  6. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  7. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  8. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  9. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  10. ruby - 在 Ruby 中创建按公共(public)键值分组的新哈希 - 2

    假设我有一个在Ruby中看起来像这样的哈希:{:ie0=>"Hi",:ex0=>"Hey",:eg0=>"Howdy",:ie1=>"Hello",:ex1=>"Greetings",:eg1=>"Goodday"}有什么好的方法可以将它变成如下内容:{"0"=>{"ie"=>"Hi","ex"=>"Hey","eg"=>"Howdy"},"1"=>{"ie"=>"Hello","ex"=>"Greetings","eg"=>"Goodday"}} 最佳答案 您要求一个好的方法来做到这一点,所以答案是:一种您或同事可以在六个月后理解

随机推荐