如何发布一个nodejs模块
1. 背景介绍
本人写了一个音乐播放器程序,想把其中核心的部分发布成Nodejs模块,这样我无论是在web端,还是桌面端都能引用该核心模块,我想在web端实现一个网友播放器,桌面端利用Electron包装一下实现一个桌面版的播放器,这样同一套代码,多端就可以共用了.说干就干, 以下记录了nodejs发布的全过程.
2. Nodejs发表流程
首先了解一下nodejs发表流程,
3. 注册npm用户
这里有两种方式,两种方式任选一种:
- 方式一:到npm官网注册
- 官网网址为: https://www.npmjs.com/
- 注册过程非常简单,如果你的邮箱能正常收件的话
- 打开官网首页后, 点击sign up按钮, 系统会导航到注册页面,输入用户名,输入密码点击创建用户即可.
- ~~ 似乎不用验证邮箱的有效性,当然为了账号安全,务必记住密码和确保邮箱是正确的.~~
- 补充这里创建账号后一定要去邮箱检查有没有严重邮箱的邮件, 及时进行验证, 如果过了24小时再去验证就很麻烦了, 而且影响后续的publish命令的使用.
- 方式二:使用命令行注册
1 | $ npm adduser |
注册完成后记住用户名密码,后续步骤需要用到.
4. 创建一个nodejs模块
创建Nodejs模块可以参考我的博客文章如何创建Nodejs模块基础篇
5. 发布nodejs模块到npm中央仓库
说明:publish之前需要注意一点,是我们项目中的所有文件都需要上传到npm服务器,此时我们可以创建一个.npmignore文件忽略掉不需要上传的文件, .npmignore 可以被认为是一个黑名单即包含在.npmignore文件中的文件不发布,这样会带来一些麻烦,每增加一个源文件,都需要调整.npmignore文件,而调整文件这件事是很容易被忘记的,如果新增文件中包含了CI/CD等等的保密信息,有可能无意中发布出去,存在一定的安全风险. 所以这里最好使用白名单,或者白名单与黑名单结合.白名单需要在package.json的files上设置.例如
package.json
1
2
3
4
5
6
7"files": [
"package.json",
"greeting.js",
"audioplayer.js",
"README.md",
"index.js"
]全局安装 nrm 并切换到npm registry
1
2sudo cnpm install -g nrm
nrm use npm或者手动修改~/.npmrc 将registry改回到
npm registry https://registry.npmjs.org/
或者 命令行切换到npm registry
1
npm config set registry https://registry.npmjs.org/
首先在命令行中登录nodejs
1
2
3
4
5$npm login
Username: your_usename #输入用户名
Password: your_password #输入用户名
Email: (this IS public) your_email #输入邮箱
Logged in as xxxxx on https://registry.npmjs.org/.成功之后,npm会把认证信息存储在~/.npmrc中,可查看npm当前使用的用户:
1
$npm whoami
开始发布
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19$npm publish
npm notice
npm notice 📦 [email protected]
npm notice === Tarball Contents ===
npm notice 13.1kB audioplayer.js
npm notice 230B greeting.js
npm notice 57B index.js
npm notice 348B package.json
npm notice 1.0kB README.md
npm notice === Tarball Details ===
npm notice name: h5-audio-player
npm notice version: 0.1.0
npm notice package size: 4.2 kB
npm notice unpacked size: 14.8 kB
npm notice shasum: f0719dcd923b9b6806e66c03e7aaf5409d16b00c
npm notice integrity: sha512-3eKgKEQpgfMx0[...]ci2QctFZaH/PQ==
npm notice total files: 5
npm notice
+ [email protected]
6. 验证发布是否成功
首先创建一个测试文件夹
然后切换回淘宝npm镜像
1
2
3
4$mkdir test #建测试文件夹
$cd test #进入测试项目
$nrm use taobao #切换回淘宝npm镜像
$cnpm install [email protected] #安装刚刚发布的包安装完成后项目的目录结构如下
1
2
3
4
5
6
7
8
9
10$tree test
test
└── node_modules
├── h5-audio-player -> [email protected]@h5-audio-player
└── [email protected]@h5-audio-player
├── audioplayer.js
├── greeting.js
├── index.js
├── package.json
└── README.md执行测试用例
1
2
3
4
5
6
7
8
9
10
11
12
13~/proj/test
$node
Welcome to Node.js v14.17.6.
Type ".help" for more information.
> let player = require('h5-audio-player');
undefined
> player.add(2, 3);
2 + 3 =5
5
> player.greeting();
hello, world
undefined
> .exit
7. 删除npm包
有些时候发现发布的包有bug或有安全风险,还可以进行删除,npm给我们留下了反悔的机会.
1
2
3
4npm unpublish --force //强制删除
npm unpublish [email protected] //指定版本号
npm deprecate //某些情况
npm unpublish packageName --force //npm撤销(24小时内可以撤销)
8. 参考文章
9. trouble shooting
9.1. 登录npm服务器失败
1 | $npm login |
原因分析:
可以看出报错出现了taobao.org 这不是我想要的,我想要的是发表到npmjs.org
详细原因可以参考这篇文章有关 npm login 和publish 的疑惑
解决方案有两个
可以全局安装 nrm
1 | sudo cnpm install -g nrm |
9.2. 发布时提示24小时内不让上传
403 Forbidden - PUT https://registry.npmjs.org/h5-audio-player - h5-audio-player cannot be republished until 24 hours have passed
原因分析:
出现这个原因是因为输入的邮箱📮没有校验,⚠️查看手机的邮箱的文件点击验证!!!
10. Nodejs 系列文章
最新更新以及更多Nodejs相关文章请访问 鹏叔的技术博客 - Nodejs