發布TS類型文件到npm
- 2019 年 11 月 21 日
- 筆記
最近發布了@types/node-observer包到npm,這裡記錄下發布過程
TS類型文件的包名通常以@types
開頭,使用npm publish
發布以@types
開頭的包時需要使用付費帳號。

我們無需自己註冊付費帳號,可以將自己的程式碼merge
到開源項目DefinitelyTyped中,然後發布到npm上。
DefinitelyTyped
fork倉庫DefinitelyTyped,拉取到本地(項目比較大,拉下來比較耗時)添加自己的程式碼、提交,然後創建Pull requests。勾選Pull requests
模板中的選項:

發起Pull requests
,會走一個CI流程,這個階段耗費時間比較長,不知道是不是因為有牆的原因。期間出現幾個錯誤記錄記錄如下:
index.d.ts頭部解析錯誤
index.d.ts頭部模板可參考:dt-header。這裡出現兩個錯誤:
Error: Could not parse version: line is '// TypeScript Version: 3.3.3' Error parsing header. Expected: foo MAJOR.MINOR (patch version not allowed). See: https://github.com/Microsoft/dtslint/blob/master/docs/dt-header.md
這兩個錯誤屬於同一類,注釋中只能使用主版本號.次版本號
不能使用修補程式版本號。修改後如下:

文件格式錯誤
.d.ts和.ts文件末尾要空一行

程式碼錯誤
export = observer;
等號兩邊要有空格:

const obj = new Demo();
這一行最初寫的是let obj = new Demo();
,報ERROR: 9:5 prefer-const Identifier 'obj' is never reassigned; use 'const' instead of 'let'.
錯誤。 類定義Demo
的方法sayHello
不能使用public
修飾符,否則報ERROR: 4:5 member-access 'public' is implicit.
錯誤。

消除所有錯誤後,會交由人工處理merge
,完成merge
後就會發布到npm了。

小結
以上是自己合併程式碼到主分支時遇到的錯誤,解決問題花費時間不算太長,倒是花費了大量時間等待CI結果。整體感覺,CI流程對文件內容的格式要求很嚴格。程式碼的提交、合併的詳細流程可以點擊此處查看:#40450,所有的構建歷史記錄可以在此處查看。
