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