發布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,所有的構建歷史記錄可以在此處查看