」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 NPM 上建立和發布 TypeScript 套件

如何在 NPM 上建立和發布 TypeScript 套件

發佈於2024-08-27
瀏覽:782

Como Criar e Publicar Pacotes TypeScript no NPM
隨著 TypeScript 的日益流行,許多開發人員正在創建靜態類型包以利用該語言提供的優勢。在這篇文章中,我們將介紹使用 TypeScript 建立和發布 NPM 套件的過程。


1. 配置環境

確保您已安裝 Node.js、NPM 和 TypeScript。您可以使用以下命令全域安裝 TypeScript:

npm install -g typescript

檢查一切是否安裝正確:

node -v
npm -v
tsc -v

2. 創建專案

首先為您的專案建立一個目錄:

mkdir meu-pacote-typescript
cd meu-pacote-typescript

初始化 Node.js 專案:

npm init

這將建立 package.json 文件,您可以在其中定義基本套件資訊。

3. 配置 TypeScript

現在,初始化一個 TypeScript 專案:

tsc --init

這將建立一個 tsconfig.json 檔案。根據需要進行編輯,但常見的設定如下:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "CommonJS",
    "declaration": true,
    "outDir": "./dist",
    "strict": true
  },
  "include": ["src/**/*"]
}

在這裡,我們配置 TypeScript 編譯器來產生帶有 CommonJS 模組的 ES6 程式碼,並包含類型聲明(聲明:true)。編譯後的程式碼會放在dist.

目錄下

4. 編寫程式碼

建立一個 src 目錄並在其中建立一個檔案index.ts:

mkdir src
touch src/index.ts

在index.ts檔案中,編寫您的套件程式碼。讓我們建立一個簡單的函數來將字串轉換為大寫:

export function toUpperCase(str: string): string {
  return str.toUpperCase();
}

5. 編譯程式碼

將 TypeScript 編譯為 JavaScript:

tsc

這將在 dist 目錄中產生 JavaScript 檔案和類型聲明。

6. 本地測試包

要測試您的包,您可以將其本地安裝在另一個專案中:

  1. 在您的測試專案目錄中,執行:
   npm install ../caminho-para-o-diretorio-do-seu-pacote/dist
  1. 在測試項目中使用此函數:
   import { toUpperCase } from 'nome-do-seu-pacote';

   console.log(toUpperCase('hello world')); // "HELLO WORLD"

這確保 JavaScript 程式碼和類型聲明都能正常運作。

7. 在NPM上發布

如果一切正常,您就可以發布您的包了。

  1. NPM登入

如果您還沒有 NPM 帳戶,請建立一個並登入:

   npm login
  1. 發布

在發布前,先在package.json中加入建置腳本:

   "scripts": {
     "build": "tsc"
   }

並在package.json中加入輸出路徑:

   "main": "dist/index.js",
   "types": "dist/index.d.ts"

現編譯發布:

   npm run build
   npm publish

如果套件名稱已存在,則需要選擇一個新名稱。

8. 更新包

要發布新版本,請更改package.json中的版本,再次運行npm run build,然後發布:

npm publish

9. 最佳實踐

  • 文件:包含一個 README.md 文件,解釋如何使用您的套件。
  • 測試:使用 Jest 等框架編寫測試,以確保程式碼能如預期運作。
  • Linting:使用 ESLint 和 Prettier 等工具來維護程式碼品質。
  • 版本控制:按照 SemVer 對您的套件進行版本控制。

結論

在 NPM 上建立和發布 TypeScript 套件不僅可以提高程式碼品質,還可以為使用套件的使用者提供打字優勢。透過遵循本指南,您將準備好與 JavaScript 和 TypeScript 社群分享您的解決方案,為更強大、更穩健的開發生態系統做出貢獻。

現在您已經了解了流程,那麼開始建立您的下一個 TypeScript 套件呢?

版本聲明 本文轉載於:https://dev.to/lucaspereiradesouzat/como-criar-e-publicar-pacotes-typescript-no-npm-3gd4?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-07-13
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-07-13
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-07-13
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-07-13
  • C++20 Consteval函數中模板參數能否依賴於函數參數?
    C++20 Consteval函數中模板參數能否依賴於函數參數?
    [ consteval函數和模板參數依賴於函數參數在C 17中,模板參數不能依賴一個函數參數,因為編譯器仍然需要對非contexexpr futcoriations contim at contexpr function進行評估。 compile time。 C 20引入恆定函數,必須在編譯時進...
    程式設計 發佈於2025-07-13
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-07-13
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-07-13
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-07-13
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-07-13
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-07-13
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-13
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-07-13
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示 僅通過Python的MlStripper 來簡化剝離過程,Python Standard庫提供了一個專門的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    程式設計 發佈於2025-07-13
  • 如何在GO編譯器中自定義編譯優化?
    如何在GO編譯器中自定義編譯優化?
    在GO編譯器中自定義編譯優化 GO中的默認編譯過程遵循特定的優化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    程式設計 發佈於2025-07-13
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-07-13

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3