npm publish常见问题
前言
最近写了个小的Typescript版的数学运算类库,刚好想给其他的小项目使用一下。当然是上传到npm上以后使用会比较方便而且也有助于规范自己的项目。但是npm publish指令后产生了很多小问题,一一解决没花多少时间但是很繁琐,因而记录以下npm publish常见的坑。
官网注册
第一步必不可少的请先去npmjs注册一个账号,后面要发布的话需要使用这个账号的。
验证package.json文件的有效性
一般我们都会将自己项目基本信息,引入类库以及小的脚本写入package.json文件中。但是有可能这个json文件不规范的话就无法成功发布自己的类库。例如会产生以下错误:
registry error parsing json
要验证自己的json文件有效性,有个专门的网站可以帮助你:
http://package-json-validator.com/
这个网站非常方便,填入你的json内容或者直接写出github的地址就可以进行验证。
但是有可能你的json文件通过验证还出现这个问题,原因大部分是因为你的项目体量有点大!!!
这个问题非常讨厌,原因是你的体量大,但是npm publish在报错的时候并不会提示你体量需要缩小,而是继续报上面json文件无法通过验证的错误。
那么解决方法也就有了两个:
- 减少体量
- 提升上限
此处,我只介绍减少体量的方法,关于提升上限的方法我还没有调查,如果有知道的朋友可以评论告知我,非常感谢。
减少项目体量
其实项目中本身会存在很多的环境配置文件以及一些不需要发布的文件。那么减少体量最直接的方法就是我们在使用npm publish的时候需要剔除一部分不需要发布的文件。这时很多人会想到.gitignore文件,那么npm的也类似,有一个.npmignore的文件。我们将发布时需要忽略的文件或者文件夹写进去就可以了。此处可以提供给大家一个我的项目中使用的npmignore来参考:npmignore文件
npm config未设置问题
减少了项目体量后,还有可能会出下以下错误:
npm ERR! no_perms Private mode enable, only admin can publish this module:
这就是因为npm config没有设置而会导致,解决方案为:
npm config set registry http://registry.npmjs.org
发布前需要登陆自己账号
在设置完npm config后,我又一次使用了npm publish,依然还会有报错:
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall unlink
这个问题是没有登陆自己账号造成的,但是我之前是登陆了自己的账号的。因此我们要记住进行了npm config后还是要登录一次自己的账号:
npm login
输入你的账号密码以及邮箱后,再次输入
npm publish
就可以发布成功了
npm notice === Tarball Details ===
npm notice name: tsmathlib
npm notice version: 0.0.1
npm notice package size: 20.9 kB
npm notice unpacked size: 95.0 kB
npm notice shasum: 04309b88f31a41efef7a21f235ca1053b8b28a42
npm notice integrity: sha512-aMGsYqS2/QEvU[...]K/g7gssjOL5tQ==
npm notice total files: 34
npm notice
+ tsmathlib@0.0.1