使用Verdaccio托管、发布和管理私有npm包

Vildan Softic
分享

使用Verdaccio托管、发布和管理私有npm包Panayiotis«pvgr»Velisarakos而且尤尔根·范德莫尔.感谢所有SitePoint的同行审必威西盟体育网页登录稿人,让SitePoint的内容成为最好的!

一个秘密特工窃取私人npm包

我敢肯定你知道,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将使用操作系统提供的列表npmca零

现在您可以通过导航到地址来访问注册表浏览器http://localhost:4873

新鲜和干净的注册表浏览器

配置自定义注册中心

当服务器启动时,一个新的配置文件被调用config.yaml自动创建。默认情况下,它将在您的用户文件夹中。在Windows上,它看起来像下面这样:

C:用户用户名configverdaccioconfig.yaml

一个重要的设置是配置Verdaccio侦听的默认端口。您可以通过在配置文件的末尾添加以下几行来更改这一点。

-http/ / localhostYOURPORT

另一种感兴趣的设置可能是使用代理,特别是在公司环境中。它们是用以下条目设置的:

http_proxyhttp/ / something.local /https_proxyhttps/ / 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/),您将看到列表中包含新的包。

注册表浏览器显示hello-world包

一个消费者应用程序示例

现在我们已经发布了私有包,让我们创建一个简单的演示应用程序来使用它。

在新文件夹中,演示,我们再次创建一个新的节点应用程序使用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客户端命令都是一样的。

在一些软件包损坏或损坏的疯狂情况下,记住它只是一个文件夹存储它承载着你的包,所以导航到那里,删除有问题的包。下一次安装可能会解决您的问题。

我希望你喜欢这篇文章,期待在评论中听到你的声音!

Baidu