想要确保你的NPM包在发布后完美的运行简直是一场噩梦。因为它可以有很多种不同的工作环境,且它在你计算机上的运行表现可能和别的机器上的不同。此时为了解决一个 bug,就要再次发布你的NPM包,因此也提高了版本号。
在Strapi,我们面临大量这样的情况。所以,我们用Verdaccio和ngrok建立一个私有NPM本地仓库,在发布到官方的 npm registry (https://registry.npmjs.com) 前,先在一台服务器上去测试。
这篇文章,我们将会介绍怎么样去创建一个专门用于测试NPM包的公共NPM仓库,在发布到 npm registry 前,先在你本机和别的服务器上测试你的NPM包。
创建你的私有本地仓库
第一步将允许你在你的私有本地仓库发布一个NPM包,意味着,如果本地私有仓库存在该NPM包,就不会从NPM官方下载,如果不存在,就从官方的 npm registry (https://registry.npmjs.com)下载。
创建:
通过安装 Verdaccio 来创建你的私有NPM仓库
npm install -g verdaccio
下一步,启动服务。
verdaccio
ℹ️ 你应该可以通过 http://localhost:4873 访问
更新默认的仓库
再接着,我们把 http://localhost:4873 作为默认的仓库地址。
npm config set registry http://localhost:4873
添加一个新的用户
Verdaccio自动的创建一个配置文件,但是并没有为你注册用户。运行下面的代码在本地私仓中创建一个新的用户
npm adduser
使用下面的账号:
- Username:
test
- Password:
test
- Email:
test@company.com
创建一个包
我们将要去创建一个非常简单的包,之后去发布它。
首先,在我们的机器上创建一个空的目录
cd /path/to/a/sandbox/folder
mkdir foo-package
cd foo-package
第二步,通过创建一个基础文件 package.json
,初始化你的包
npm init
一路回车下去,package.json
看起来像是下面的这样:
{
"name": "foo-package",
"version": "1.0.0",
"description": "Basic package to test publication",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "MIT"
}
最后,创建一个包含如下逻辑的 index.js
文件
module.exports = () => {
console.log('My package does nothing!');
};
在本地私有仓库发布NPM包
这个包准备好后,就可以被发布到本地私有仓库。只是在这个包的根目录,简单的运行如下命令:
npm publish
Mac OS用户,你可以找到这个包在
/Users/xxx/.config/verdaccio/storage
并且确保他它成功的被发布。
现在,你的包被发布在本地“测试”仓库 (http://localhost:4873),仅仅你能访问和下载它。为了在别的机器或服务器上测试,你需要把它暴露出去。
使私有的本地仓库被公开访问
此时,你的私有仓库仅可以通过 http://localhost:4873 在你的机器上被访问。我们将会使用 ngrok 把它分享给别的同学。
安装 ngrok
在中断里面打开一个新的 tab 或窗口,安装 ngrok:
npm i ngrok -g
下一步,运行下面的命令暴露 4873 端口:
ngrok http 4873
它将创建一个 URL,像是 http://e55ba6a3.ngrok.io
。在浏览器中打开它,你将会看到你自己的npm仓库。根据你分享的URL,你的仓库现在可以被任何人访问。
使用公开的NPM仓库
在Strapi,在发布一个新的版本之前,我们通常在真实的生产环境测试该包。我们在AWS上启动一个包含Node.js、npm 和 git pre-installed的 Ubuntu 服务器。
运行这个命令在别的机器中使用你的公共NPM仓库。
npm set registry http://e55ba6a3.ngrok.io
ℹ️ 不要忘记改成你的 ngrok 链接
最终,安装你的NPM包
npm install foo-package
通过运行这个命令,NPM首先尝试从你的仓库(http://e55ba6a3.ngrok.io -> http://localhost:4873)安装 foo-package。但是,如果如果没有找到相应的包,则会去NPM官方仓库(https://registry.npmjs.com)查找。
结论:
我们希望本教程帮助你将NPM包发布到官方的 npm registry (https://registry.npmjs.com)前,在生产环境测试你的NPM包。通过简单的设置,你现在可以像在官方NPM仓库一样发布测试你的包了。