NPM包开发与发布完整指南
作为 JavaScript/Node.js 开发者,发布自己的 NPM 包是技术成长的重要一步。本文将从零开始,详细介绍如何开发、打包、测试并发布一个 NPM 包。
为什么需要发布 NPM 包?
- 代码复用:将常用工具封装成包,多项目共享
- 开源贡献:分享你的解决方案,帮助其他开发者
- 技术积累:规范化代码组织,提升工程质量
- 简历加分:维护公开项目,展示技术能力
目录结构规范
一个标准的 NPM 包项目结构:
1 | my-package/ |
package.json 配置详解
这是包的核心配置文件:
1 | { |
关键字段说明
| 字段 | 说明 |
|---|---|
name |
包名,必须唯一,建议使用小写+连字符 |
version |
版本号,遵循 SemVer 规范 |
main |
CommonJS 入口 |
module |
ES Module 入口 |
types |
TypeScript 类型声明文件 |
files |
发布时包含的文件/目录 |
exports |
现代包导出配置(推荐) |
exports 配置(推荐)
现代 NPM 包推荐使用 exports 字段:
1 | { |
版本号规范(SemVer)
版本号格式:主版本.次版本.补丁版本(如 1.2.3)
- 主版本(Major):不兼容的 API 变化
- 次版本(Minor):向后兼容的功能新增
- 补丁版本(Patch):向后兼容的问题修复
常用命令:
1 | # 补丁版本(1.0.0 -> 1.0.1) |
包代码开发
入口文件示例
1 | // src/index.js |
ES Module 版本
1 | // dist/index.esm.js |
使用 Rollup 构建
Rollup 是打包库的最佳选择,输出干净、高效。
安装依赖
1 | npm install --save-dev rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs @rollup/plugin-terser |
rollup.config.js
1 | import resolve from '@rollup/plugin-node-resolve'; |
编写测试
使用 Jest 编写单元测试:
1 | npm install --save-dev jest |
test/index.test.js
1 | const { formatDate, deepClone } = require('../src/index'); |
README.md 编写规范
README 是包的门面,必须清晰完整:
1 | # my-awesome-package |
NPM 注册与登录
1. 注册账号
1 | # 在官网注册:https://www.npmjs.com/signup |
按提示输入用户名、密码、邮箱,完成邮箱验证。
2. 登录验证
1 | npm login |
3. 配置 2FA(推荐)
在 npmjs.com 站点设置页面启用双因素认证,保护账号安全。
本地测试发布
发布前先本地测试:
使用 npm link
1 | # 在包目录 |
使用 npm pack
1 | # 打包成 .tgz 文件 |
正式发布
发布流程
1 | # 1. 确保代码已提交 |
发布特定标签
1 | # 发布 beta 版本 |
发布 scoped 包
scoped 包(如 @username/package)默认为私有包,需要付费。
发布公开 scoped 包:
1 | npm publish --access public |
常见问题处理
包名已存在
- 换一个包名
- 使用 scoped 包:
@yourname/package-name - 检查是否拼写错误
发布失败
1 | # 检查登录状态 |
更新已发布的包
1 | # 1. 修改代码 |
删除已发布的包
1 | # 撤销 24 小时内发布的版本 |
最佳实践
- 语义化版本:严格遵循 SemVer 规范
- 完善的测试:发布前确保测试通过
- 清晰的文档:README 必须包含安装、使用、API 说明
- 变更日志:维护 CHANGELOG.md 记录版本变化
- 类型声明:提供 TypeScript 类型文件(.d.ts)
- 持续集成:使用 GitHub Actions 自动测试发布
GitHub Actions 自动发布
1 | # .github/workflows/publish.yml |
在 GitHub 项目设置 → Secrets 中添加 NPM_TOKEN(从 npmjs.com 获取)。
总结
发布 NPM 包的完整流程:
- 规划包的功能和结构
- 编写代码和测试
- 配置 package.json
- 编写 README 和 LICENSE
- 本地测试(npm link / npm pack)
- 注册登录 NPM
- 发布(npm publish)
- 维护更新(版本管理)
掌握了这些,你就可以将自己的代码分享给全世界了!