使用Verdaccio托管、发布和管理私有npm包
使用Verdaccio托管、发布和管理私有npm包Panayiotis«pvgr»Velisarakos而且尤尔根·范德莫尔.感谢所有SitePoint的同行审必威西盟体育网页登录稿人,让SitePoint的内容成为最好的!
我敢肯定你知道,JavaScript包管理器实际上是npm,它的注册表是世界上最大的代码集合。但有时在开发一个很棒的新包时,您需要额外的隐私。可能是因为你正在做一个公司的项目,而这个项目并不打算与公众分享,比如你的硕士/学士学位论文项目,或者只是因为你和我一样,有时会为自己接触一个新话题的第一步感到羞愧。
不管原因是什么,都有几种选择。也许最简单的方法就是注册一个npm的商业服务,然后你就可以开始了。但这样做的代价可能并不适合每个人的钱包。
幸运的是,有一种免费的替代方法叫做Verdaccio,这可能会帮到你。
引入Verdaccio
Verdaccio是一个npm包,它允许你创建一个本地npm注册表,而不需要任何配置。这是一个包含电池的项目,自带数据库。它通过充当本地缓存/代理服务器来实现这一点。
这意味着当你试图从你的自定义存储库中安装一些不存在的东西时,它会ping官方的npm注册表并下载依赖项。您的自定义存储库在一个名为存储
.下一次后续安装现在将使用这个本地缓存的副本。在此之上,来自npm客户端的一些命令,例如npm登录/ adduser /发布
被复制以支持本地私有包的创建,您将在本文后面的部分中看到它们的使用。
如果你觉得这没什么新鲜的,其实已经有了该基金你说得对。Verdaccio只是Sinopia的一个分支,它保持向后兼容性,但试图跟上官方npm的变化。其中一个改变是作用域包,在Sinopia中是不可用的,你可能已经在使用Angular 2或TypeScript npm托管类型库时看到过它。你可以很容易地通过前面的@符号来识别它们:
#安装angular依赖项npm安装@angular /核心#为TypeScript安装正式的Node.js类型定义npm安装@types /节点
Sinopia和Verdaccio都可以在Mac/Linux和Windows上运行。
从Verdaccio开始
由于Verdaccio是一个npm包,你所需要做的就是运行下面的命令来安装它:
npm安装- g verdaccio
与verdaccio
将启动实例并使您的私有注册表运行。
默认情况下,它将监听端口4873。我们稍后将讨论如何更改这些设置。
在本文中,我们将介绍如何在开发机器上设置注册表。在公司环境中,您可能希望在专用服务器上执行此操作,以便所有开发人员都可以访问它。
Verdaccio是一个Node.js应用程序,这意味着您应该注意在偶尔崩溃的情况下重新启动它。我建议使用pm2.你所需要做的就是执行以下步骤:
#安装pm2npm安装pm2 - g#使用pm2启动Verdacciopm2开始路径-TO-GLOBAL-VERDACCIO / verdaccio#——>例如Windows: C:/Users/[USERNAME]/AppData/Roaming/npm/node_modules/verdaccio/bin/verdaccio
此外,如果在本文结束时,您得出结论认为Verdaccio不是适合您的工具,只需停止该过程并使用以下命令卸载Verdaccio:
npm卸载-g verdaccio
配置客户端
现在注册表已经启动并运行,您需要将npm客户端指向新地址。执行如下命令:
npm集注册http://localhost: 4873 /
如果你只是按照本文的步骤进行操作,之后想要恢复到原来的npm注册表,只需运行这个命令
NPM设置注册表https://registry.npmjs.org
基于http的访问,或者NPM设置注册表http://registry.npmjs.org
用于经典的HTTP访问。
此外,如果您通过HTTPS提供注册表,则需要设置适当的CA信息。
#将该值设置为null将使用操作系统提供的列表npm集ca零
现在您可以通过导航到地址来访问注册表浏览器http://localhost:4873
.
配置自定义注册中心
当服务器启动时,一个新的配置文件被调用config.yaml
自动创建。默认情况下,它将在您的用户
文件夹中。在Windows上,它看起来像下面这样:
C:\用户\[用户名]\config\verdaccio\config.yaml
一个重要的设置是配置Verdaccio侦听的默认端口。您可以通过在配置文件的末尾添加以下几行来更改这一点。
听:-http:/ / localhost:[YOURPORT]
另一种感兴趣的设置可能是使用代理,特别是在公司环境中。它们是用以下条目设置的:
http_proxy:http:/ / something.local /https_proxy:https:/ / something.local /no_proxy:本地主机,127.0.0.1
只需记住,通过终止当前进程或停止pm2进程并在更改任何配置后重新启动Verdaccio来重新启动Verdaccio。
注册用户
最后但并非最不重要的是,我们需要配置一个用户,该用户将向注册表发布包。我们可以使用默认设置adduser
命令,指向自定义注册中心。
npmAdduser—注册表http://localhost:4873
之后,只需按照命令行上的提示进行操作。
请记住使用之前配置的相同端口
该用户将用于根据Verdaccio实例进行身份验证。在上述文件的旁边config.yaml
,你会发现一个新创建的htpasswd
用于存储您的登录和凭据。
你的第一个私有npm包
现在,我们已经准备好创建第一个私有包。我们要创建一个简单的hello world
打包并查看发布它的过程。
创建包
首先,在某处创建一个名为hello world
.现在,我们需要使用命令启动一个新包npm init
.您将被问到一堆问题,但目前,大多数问题都可以通过默认设置接受。只要描述一下,把入口点放在index.js
,并加上你的名字为作者。结果是一个名为package.json
描述你的包。
一个很好的做法是给你的包名加上前缀,这样你就可以马上知道你使用的是私有的本地源还是官方的npm源。
下一部分是创建实际的包。因此,我们创建一个文件index.js
.这个简单的例子将导出aHelloWorld
功能:
// index.js的内容函数HelloWorld(){返回“Hello World”;}模块.出口=HelloWorld;
发布包
现在剩下的就是发布您的包了。为此,我们首先需要登录到我们的注册表npm登录
.系统将提示您输入之前设置的用户名和密码。
当这完成时,在根hello world
你就跑npm发布
魔法完成了。
如果您现在再次在浏览器中访问注册表浏览器(http://localhost:4873/),您将看到列表中包含新的包。
一个消费者应用程序示例
现在我们已经发布了私有包,让我们创建一个简单的演示应用程序来使用它。
在新文件夹中,演示
,我们再次创建一个新的节点应用程序使用npm init
.同样,接受所有的推荐,可能只添加描述和作者信息。
之后,创建一个index.js
它将作为我们应用程序的根目录。
安装您的私有包
为了安装私有包,你本质上必须做与标准npm过程相同的事情。
npm安装——保存hello world
这将在您的node_modules
文件夹中的依赖项部分并更新package.json
.
现在我们可以使用这个包了。打开index.js
并添加以下代码:
常量helloWorld=需要(“hello world”);控制台.日志(helloWorld());
当你现在运行应用程序节点index.js
你应该看到你好世界
作为命令行上的输出。
祝贺您,您刚刚发布并使用了您自己的私有包!
请求公共包
这同样适用于公共包。你只管跑就好NPM install package-name
所有的东西都会像往常一样安装在node_modules
文件夹中。
Verdaccio在幕后所做的是查看它的存储文件夹并检查所请求的包是否存在。如果不是,它会尝试将请求转发到官方npm注册表,下载并存储它,然后回复你的请求。下次你为同一个包发布npm install时,它现在就会提供完全相同的服务。
因此,即使官方注册表由于某种原因宕机或无法访问,您仍然可以访问自己的缓存版本。Verdaccio总是只下载所请求的内容。如果您发布了一些更新,将根据需要下载这些更新。
注意,注册表浏览器不应该显示公共包。如果您确实需要显示它们,您可以编辑该文件
.sinopia-db.json
并手动将包名称添加到列表
数组中。之后不要忘记重新启动Verdaccio。
结论
因此,现在您可以托管自己的私有注册中心,并从缓存的公共包中获益。除此之外,您现在还可以发布私有包,而无需与云通信。一旦安装完成,所有相关的npm客户端命令都是一样的。
在一些软件包损坏或损坏的疯狂情况下,记住它只是一个文件夹存储
它承载着你的包,所以导航到那里,删除有问题的包。下一次安装可能会解决您的问题。
我希望你喜欢这篇文章,期待在评论中听到你的声音!