npm 包上传机制笔记
核心思想:
npm publish就是把本地项目打包并上传到 npm 服务器,别人通过package.json.name安装和引用。而npm pack是理解这一过程的“关键钥匙”。
1️⃣ 什么是 npm pack?
npm pack 是一个 本地打包命令,它会:
- 读取当前目录下的
package.json - 根据配置打包项目文件
- 生成一个
.tgz压缩包文件(tarball) - 不会上传到任何地方,只在本地生成文件
🔧 类比:就像你写了一本书,
npm pack相当于把你写的书打包成一个 ZIP 文件,存在自己电脑上,还没寄给出版社。
2️⃣ npm pack 能做什么?(核心用途)
| 用途 | 说明 |
|---|---|
| ✅ 预演发布 | 检查最终发布的内容是否正确 |
| ✅ 验证打包范围 | 看看哪些文件被打包了(有没有误包含 node_modules?) |
| ✅ 检查包名和版本 | 确认生成的 .tgz 文件名是否符合预期 |
| ✅ 离线分发 | 把 .tgz 文件发给同事,他们可以用 npm install ./xxx.tgz 安装 |
| ✅ CI/CD 流程测试 | 在自动化流程中验证包的完整性 |
3️⃣ npm pack 详细执行流程
当你运行:
1 | npm pack |
npm 会执行以下步骤:
步骤 1:读取 package.json
- 获取
name→ 决定包名 - 获取
version→ 决定版本 - 获取
main,bin,files等配置
步骤 2:确定要打包的文件
npm 会根据以下规则决定哪些文件进入包中:
| 规则 | 说明 |
|---|---|
1. .npmignore 文件 |
如果存在,按它列出的规则忽略文件(优先级最高) |
2. package.json 中的 files 字段 |
显式声明要包含的文件/目录 |
| 3. 默认规则 | 除了以下文件,其他都打包: • node_modules• .git• npm-debug.log• .env• *.log• *.tgz |
💡 建议:使用
files字段精确控制打包内容,避免误传敏感文件。
步骤 3:生成 .tgz 文件
- 文件名格式:
<name>-<version>.tgz - 例如:
my-utils-1.0.0.tgz - 生成在当前目录
步骤 4:输出打包详情
1 | npm notice |
4️⃣ 实战:使用 npm pack 验证你的包
① 先“干跑”查看会打包哪些文件
1 | npm pack --dry-run |
👉 输出打包内容列表,但不生成 .tgz 文件,安全预览。
② 正式打包
1 | npm pack |
👉 生成 my-utils-1.0.0.tgz
③ 解压查看内容(验证真相)
1 | mkdir unpacked |
✅ 看见了吧?包的内容就是你项目里的文件!
5️⃣ npm pack 与 npm publish 的关系
| 对比项 | npm pack |
npm publish |
|---|---|---|
是否生成 .tgz |
✅ 是 | ✅ 是(在服务器) |
| 是否上传 | ❌ 否 | ✅ 是 |
| 是否需要登录 | ❌ 否 | ✅ 是(npm login) |
| 是否影响他人 | ❌ 否 | ✅ 是(全球可安装) |
| 是否修改本地文件 | ❌ 否 | ❌ 否 |
| 核心作用 | 🔍 预演、验证、调试 | 🚀 正式发布 |
✅ 结论:
npm publish=npm pack的内容 + 上传到 npm 服务器
6️⃣ 使用建议:发布前必做
1 | # 1. 干跑,查看打包内容 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YianNotes!

