参考
使用npm 发布自己写的第三方包-npm publish
npm学习(七)之如何发布包、更新发布包、删除发布包
一、NPM登录
1.注册
如果没有账号,先去www.npmjs.com/注册。
2.登录
命令:npm login
3.查看当前用户
命令:npm whoami
二、发新包
1.新建一个文件夹并进入,初始化一些包的相关信息
命令:npm init
- package name(包名字)
- version(包版本)
- description(包描述)
- entry point(包里面主文件也就是入口地址)
- test command(包的测试命令是什么,可以先不指定)
- git repository(git地址,这样就可以从npm官网直接点到git上,可以先不指定)
- keywords(关键字,别人搜东西时怎么搜到比较方便)
- author(作者)
- license: (ISC)(包遵循什么样的开源协议)
之后会生成一个package.json文件
2.新建一个文件用来存放包(模块),尝试发布
命令:npm publish
三、更新包
1.如果本地已经安装过此包,首先修改package.json文件中的版本后,执行npm publish
2.如果本地没有安装过此包,则需要先找个文件夹安装一下。
将这个包的部分内容进行修改,修改完之后,我们想作为一个新的版本进行提交,那么第一步要做的就是修改版本号,如何修改?
使用命令:npm version <update_type>进行修改,update_type 有三个参数,
- patch:这个是补丁的意思,补丁最合适;
- minor:这个是小修小改;
- major:这个是大改咯;
具体咋用:
- 比如我想来个1.0.1版本,注意,是最后一位修改了增1,那么npm version patch
- 比如我想来个1.1.0版本,注意,是第二位修改了增1,那么npm version minor
- 比如我想来个2.0.0版本,注意,是第一位修改了增1,那么npm version major
然后执行npm publish 我仍然遇到报错
npm ERR! code E403
npm ERR! 403 Forbidden - PUT http://registry.npmjs.org/@xxxr -
You cannot publish over the previously published versions: 3.2.10.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\admin\AppData\Roaming\npm-cache\_logs\2021-03-24T08_35_39_327Z-debug.log
可是我确认过,远端之前的版本是3.2.9,我现在要发3.2.10呀!此时不要着急,过几分钟去npm官网自己的包页面刷新一下就能看到发版成功了
如果一直刷新还是没成功,那只能再npm publish一次,具体原因不清楚……
四、删除包
这里要说一点,取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为(试想一下你撤销了发布的包[假设它已经在社区内有了一定程度的影响],这对那些已经深度使用并依赖你发布的包的团队是件多么崩溃的事情!)
首先如果就是想要删除当前的这个版本,执行命令npm unpublish xxx(包名),去官网查看发现已经没有这个包了,如果权限不够加上 --force
- 使用命令npm unpublish xxx@1.1.1(包名@版本名)删除指定版本
- 根据规范,只有在发包的24小时内才允许撤销发布的包( unpublish is only allowed with versions published in the last 24 hours),需要我们发邮件给官方来删除
-
即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了)
例如我在撤销包后尝试再发布同一名称+同一版本的包
报错,并建议我修改包的版本
npm unpublish的推荐替代命令:npm deprecate <pkg>[@<version>] <message>
使用这个命令,并不会在社区里撤销你已有的包,但会在任何人尝试安装这个包的时候得到警告
例如:npm deprecate penghuwanapp '这个包我已经不再维护了哟~'
五、一些常见的错误:
1、no_perms Private mode enable, only admin can publish this module
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://registry.npm.taobao.org/ng-antd-cli -
[no_perms] Private mode enable, only admin can publish this module
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.
这是因为镜像设置成淘宝镜像了,设置回来即可:
npm config set registry=http://registry.npmjs.org
如果有需要改回淘宝镜像,再次修改为npm的淘宝链接:
npm config set registry=http://registry.npm.taobao.org
如果需要查看当前的镜像设置可以使用
npm config get registry
2、npm publish failed put 500 unexpected status code 401
一般是没有登录,重新登录一下 npm login 即可
3、npm ERR! you do not have permission to publish “your module name”. Are you logged in as the correct user?
包名被占用,改个包名即可。最好在官网查一下是否有包名被占用,之后再重命名
4、you must verify your email before publishing a new package
邮箱未验证,去官网验证一下邮箱
5、npm ERR! 403 403 Forbidden - PUT registry.npmjs.org/包名字 - You cannot publish over the previously published versions: 1.0.0.
原因:要发布的版本和原来的版本号相同
修改:要修改当前版本号
6、npm版本过低
处理:npm install -g npm update
7、可能权限原因
处理:npm publish --access=public
8、文件夹名和package.json里的'name'属性一样时也无法发布
处理:将文件夹名或'name'改成不一致即可