npm verdaccio
Panayiotis«pvgr»Velisarakos和Jurgen Van de Moere对通过Verdaccio托管,发布和管理私人npm软件包进行了同行评审。 感谢所有SitePoint的同行评审员使SitePoint内容达到最佳状态!
如您所知,事实上JavaScript软件包管理器是npm,其注册表是世界上最大的代码集合。 但是有时在开发出色的新程序包时需要额外的隐私。 是因为您正在从事一个公司项目,而该项目不打算与公众共享,您的硕士/学士学位论文项目,或者仅仅是因为您像我一样,有时对新主题感到topic愧。
无论是什么原因,都有多种选择。 也许最简单的方法是使用npm的一项商业报价进行注册,您就很好了。 但这代价可能并不适合每个钱包。
幸运的是,有一个名为Verdaccio的免费替代软件 ,它可能会对您有所帮助。
介绍Verdaccio
Verdaccio是一个npm软件包,可让您无需任何配置即可创建本地npm注册表。 这是一个包含电池的项目,带有自己的数据库。 它通过充当本地缓存/代理服务器来实现。
这意味着每当您尝试从自定义存储库中安装不存在的内容时,它将对官方npm注册表进行ping并下载依赖项。 您的自定义存储库将这些文件维护在一个名为storage
的简单文件夹中。 现在,下一次后续安装将使用此本地缓存的副本。 最重要的是,复制了来自npm客户端的一些命令,例如npm login/adduser/publish
,以支持本地私有包的创建,您将在本文的稍后部分看到使用这些私有包的信息。
如果您认为这不是什么新鲜事,那么已经有Sinopia就是您了。 Verdaccio只是Sinopia的一个分支,它保持向后兼容性,但试图跟上npm的官方更改。 范围内的程序包是此类更改(在Sinopia中不可用),在使用诸如Angular 2或TypeScript npm托管类型之类的库时,您可能已经看到过。 您可以通过@符号轻松识别它们:
# Installing an Angular2 dependency
npm install @angular/core
# Installing the official Node.js type definitions for TypeScript
npm install @types/node
Sinopia和Verdaccio均可在Mac / Linux和Windows上运行。
Verdaccio入门
由于Verdaccio是npm软件包,因此您所要做的就是运行以下命令进行安装:
npm install -g verdaccio
随后使用verdaccio
进行的调用将启动该实例并使您的私有注册表运行。
默认情况下,它将侦听端口4873。稍后我们将讨论如何更改这些设置。
在本文中,我们将在开发计算机上设置注册表。 在公司环境中,您可能希望在专用服务器上执行此操作,以便所有开发人员都可以访问它。
Verdaccio是一个Node.js应用程序,这意味着您应该注意偶发崩溃的情况下重新启动它。 我建议使用pm2 。 您所需要做的就是运行以下步骤:
# Install pm2
npm install pm2 -g
# start Verdaccio using pm2
pm2 start PATH-TO-GLOBAL-VERDACCIO/verdaccio
# --> e.g for Windows: C:/Users/[USERNAME]/AppData/Roaming/npm/node_modules/verdaccio/bin/verdaccio
另外,如果在本文结尾处得出结论,认为Verdaccio不是适合您的工具,请停止该过程并使用以下方法卸载Verdaccio:
npm uninstall -g verdaccio
配置客户端
现在注册表已启动并正在运行,您需要将npm客户端指向新地址。 通过运行以下命令来完成此操作:
npm set registry http://localhost:4873/
如果您只是按照本文中的步骤操作,而以后又想恢复到原始npm注册表,则只需运行此命令
npm set registry https://registry.npmjs.org
进行基于HTTPS的访问,或者npm set registry http://registry.npmjs.org
用于经典的HTTP访问。
此外,如果您通过HTTPS提供注册表,则需要设置适当的CA信息。
# setting the value to null will use the list provided by the operating system
npm set ca null
现在,您可以通过导航到地址http://localhost:4873
来访问注册表浏览器。
免费学习PHP!
全面介绍PHP和MySQL,从而实现服务器端编程的飞跃。
原价$ 11.95 您的完全免费
配置您的自定义注册表
启动服务器后,将自动创建一个名为config.yaml
的新配置文件。 默认情况下,它将在您的users
文件夹中创建。 在Windows上,看起来可能如下所示:
C:\Users\[USERNAME]\.config\verdaccio\config.yaml
一个重要设置是配置Verdaccio监听的默认端口。 您可以通过在配置文件末尾添加以下几行来更改此设置。
listen:
- http://localhost:[YOURPORT]
另一个令人感兴趣的设置可能是使用代理,尤其是在公司环境中。 使用以下条目进行设置:
http_proxy: http://something.local/
https_proxy: https://something.local/
no_proxy: localhost,127.0.0.1
只需记住通过终止当前进程或暂停pm2进程并在更改任何配置后重新启动来重新启动Verdaccio。
注册用户
最后但并非最不重要的一点是,我们需要配置一个将软件包发布到您的注册表的用户。 我们可以使用默认的adduser
命令来指向我们的自定义注册表。
npm adduser --registry http://localhost:4873
之后,只需按照命令行上的提示进行操作即可。
记住要使用先前配置的端口
该用户将用于根据Verdaccio实例进行身份验证。 在上述文件config.yaml
,您会发现一个新创建的htpasswd
,用于存储您的登录名和凭据。
您的第一个私人npm套餐
现在,我们准备创建我们的第一个私有软件包。 我们将创建一个简单的hello-world
程序包,并研究其发布过程。
创建包
首先,在名为hello-world
创建一个新文件夹。 现在,我们需要启动一个新软件包,使用命令npm init
。 您将被问到一系列问题,但目前,大多数问题都可以使用默认设置接受。 对其进行描述,将入口点保留在index.js
,然后将您的姓名添加为作者。 结果是一个名为package.json
的文件,它描述了您的程序包。
好的做法是在软件包名称前添加前缀,以便您可以立即知道是在使用本地本地还是官方的npm源。
下一部分是创建实际的包。 因此,我们创建了一个文件index.js
。 这个简单的示例将仅导出HelloWorld
函数:
// content of index.js
function HelloWorld() {
return "Hello World";
}
module.exports = HelloWorld;
发布包
现在剩下的就是发布您的软件包。 为此,我们首先需要使用npm login
登录到我们的注册表。 系统将提示您输入先前设置的用户名和密码。
完成此操作后,只需在hello-world
的根目录中运行npm publish
完成操作。
如果现在再次在浏览器中访问注册表浏览器,请访问http:// localhost:4873 /,您将看到列表包含新的软件包。
消费者应用示例
现在我们已经发布了私有包,让我们创建一个简单的演示应用程序来使用它。
在一个新文件夹demo
,我们再次使用npm init
创建一个新的节点应用npm init
。 同样,接受所有建议,也许只是添加说明和作者信息。
之后,创建一个index.js
,它将作为我们应用程序的根目录。
安装私人软件包
为了安装私有软件包,您实际上必须执行与标准npm流程相同的操作。
npm install --save hello-world
这会将软件包安装在您的node_modules
文件夹中,并更新package.json
的dependencies部分。
现在我们可以使用该程序包了。 打开index.js
并添加以下代码:
const helloWorld = require("hello-world");
console.log(helloWorld());
现在,使用node index.js
运行该应用程序时,您应该在命令行上看到Hello World
作为输出。
恭喜,您已经发布并使用了自己的私有软件包!
要求公开包装
公共包也是如此。 您只需继续运行npm install package-name
,一切将照常安装在node_modules
文件夹中。
Verdaccio在后台执行的操作是查看其存储文件夹并检查所请求的软件包是否存在。 如果没有,它将尝试将请求转发到官方npm注册表,下载并存储它,然后回复您的请求。 下次您为同一软件包发行npm安装时,现在将完全为您服务。
因此,即使由于任何原因导致官方注册表关闭或无法访问,您仍然可以访问自己的缓存版本。 Verdaccio将始终仅下载所要求的内容。 如果发布某些更新,则将根据需要下载这些更新。
请注意,注册表浏览器不应显示公共软件包。 如果确实需要显示它们,则可以编辑
.sinopia-db.json
文件,并将包名称手动添加到list
数组。 不要忘记稍后重新启动Verdaccio。
结论
因此,现在您可以托管自己的私人注册表,并从缓存的公共程序包中受益。 最重要的是,您现在还可以发布私有软件包,而无需与云对话。 安装完成后,所有相关的npm客户端命令都将与通常相同。
在某些软件包被破坏或损坏的疯狂情况下,请记住,这只是一个storage
软件包的文件夹storage
,因此请在那儿导航并删除有问题的软件包。 下一次安装可能会解决您的问题。
希望您喜欢这篇文章,并希望收到您的评论!
翻译自: https://www.sitepoint.com/private-npm-packages-verdaccio/
npm verdaccio