第一次发包的人常问:npm 打包是不是敲 npm build?npm 本身没有 build 命令。日常说的 npm 打包其实是两件事:把自己的库打成 tgz 发布,或者跑前端工程里配好的构建脚本,先分清是哪件事,命令完全不一样。
发库之前先 npm pack
npm pack --dry-run npm packdry-run 只列出会打进包的文件和体积,不真生成文件。看完清单再决定收不收窄,控制内容靠 package.json 的 files 字段写白名单,不想写白名单就用 .npmignore 排除,二选一,别两个都配,容易记不清谁生效。README 默认会带上,测试文件、源码地图这类一般不发。pack 出来的文件名是 包名-版本号.tgz,跟 git 仓库没关系,仓库里没提交的文件本来也不会进包。
打出来的 tgz 可以在另一个项目里 npm install 路径直接装,本地先验证一遍再 publish,省得发出去才发现漏文件。验证时留意 package.json 的 main 和 exports 指向对不对,这两个字段决定别人引用到什么。多语言包、示例资源这类大文件,放单独的文档站或对象存储更合适,别全塞进包里。
前端工程里的打包
vite、webpack 项目的构建是 npm run build 在跑 scripts 里定义的命令,产物一般落 dist 目录。这条链路跟 npm 发布无关,除非要把构建产物作为包发出去,那就在 files 里把 dist 加进去。发布后想作废某个版本,用 npm deprecate 标记弃用提示,别随手 unpublish,依赖你包的项目会集体报错。
顺手记三个命令
- npm view 包名 versions:看某个包发过的所有版本。
- npm whoami:确认当前登录账号,publish 前先看一眼。
- npm outdated:列出项目里可升级的依赖。
分工记清楚就好:npm pack 管包内容,npm run build 管代码构建,搜 npm 打包 的时候先想清楚自己在问哪件事。