问题背景
今天写了一个自动生成Typescript类的接口定义的小工具,正打算发布到npm上,结果失败了:
PS F:\tgit\tools\ts-interface> npm publish
npm notice
npm notice 📦 ts-interface@1.0.0
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了~