npm publish 错误400

问题背景

今天写了一个自动生成Typescript类的接口定义的小工具,正打算发布到npm上,结果失败了:

PS F:\tgit\tools\ts-interface> npm publish
npm notice 
npm notice   [email protected]
npm notice === Tarball Contents ===
npm notice 435B   .eslintrc.json
npm notice 11.6kB LICENSE
npm notice 313B   README.en.md
npm notice 324B   README.md
npm notice 12B    dist/index.d.ts
npm notice 872B   dist/index.js
npm notice 43B    dist/ts-interface.mjs
npm notice 528B   dist/TsInterfaceMaker.d.ts
npm notice 10.3kB dist/TsInterfaceMaker.js
npm notice 6.2kB  dist/TsMaker.d.ts
npm notice 59.9kB dist/TsMaker.js
npm notice 1.1kB  package.json
npm notice 11.4kB tsconfig.json
npm notice === Tarball Details ===
npm notice name:          ts-interface
npm notice version:       1.0.0
npm notice filename:      ts-interface-1.0.0.tgz
npm notice package size:  20.6 kB
npm notice shasum:        4c4f564126152fa3b963bc90ed2433d632e10f32
npm notice total files:   13
npm notice
npm ERR! code E400
npm ERR! 400 Bad Request - PUT https://registry.npmjs.org/ts-interface - Cannot publish over previously published version "1.0.0".

错误提示是npm ERR! 400 Bad Request - PUT https://registry.npmjs.org/ts-interface - Cannot publish over previously published version "1.0.0".,看意思是说我不能覆盖原先的版本1.0.0,因为我打算提交的版本正是1.0.0。虽然理解报错的原因,但却有点懵圈,我不记得我发布过这个包,怎么会说我覆盖原有版本呢?难道是npm上已经存在一个同名的包了?于是到npm上搜一下,并没有这个包。
于是我就把版本号改成1.0.1再试一下,结果还是一样的错误:

npm ERR! code E400
npm ERR! 400 Bad Request - PUT https://registry.npmjs.org/ts-interface - Cannot publish over previously published version "1.0.1"

再改成1.0.2也不行,难道是我的包名看起来比较”官方“不让提交?但是npm上叫ts-interface-xxx的也不少呀~正在纳闷的时候,好奇点了一下错误信息中的url链接:https://registry.npmjs.org/ts-interface
发现网页输出只有:

{"error":"Not found"}

表示没找到这个包吧,因为把ts-interface换成其他包都会输出一些正常的信息。不过它却下载了一份名为ts-interface的文件,打开一看,里面竟然有一些古早记录!

{"_id":"ts-interface","name":"ts-interface","time":{"created":"2018-03-16T17:02:53.205Z","1.0.0":"2018-03-16T17:02:53.335Z","modified":"2018-11-16T14:50:02.085Z","1.0.1":"2018-03-18T15:24:37.481Z","1.0.2":"2018-03-18T15:47:13.332Z","unpublished":{"time":"2018-11-16T14:50:02.085Z","versions":["1.0.0","1.0.1","1.0.2"]}}}

文件中的内容比正常包的信息少多了只包含创建时间、修改时间、版本号等信息。看了一下时间都是2018年的,那时候我肯定没提交过这样一个包,而且版本号正好包含"1.0.0","1.0.1","1.0.2"。如果链接中的ts-interface换成其他名字,比如https://registry.npmjs.org/xxxadaw,并不会自动下载类似的文件。
估计是npm上存在一些早年有些不正常的包的记录。所以解决这个问题很简单,再改一下版本号,改成1.0.3就ok了~

你可能感兴趣的:(npm publish 错误400)