使用變更集和 GitHub Actions 自動發布 NPM 包
在本指南中,我們將使用 PNPM 和變更集 cli 發布一個名為「npm-package-template-changesets」的簡單 NPM 打字稿包。當我們對庫進行任何更改時,自動化部分就會出現,機器人將打開一個需要批准的拉取請求,並將包含要包含在新版本以及更改日誌中的所有更改。
該軟體包將支援舊版的 CJS 和 ESM。
1.安裝PNPM並建立一個新項目
npm install -g pnpm
pnpm init
這將產生一個 package.json 文件,將 name 屬性更改為尚未存在的套件名稱:
同時在 GitHub 上建立一個新的儲存庫並將 url 新增至repository.url 屬性中,這對於出處很重要:
{ "name": "npm-package-template-changesets", "repository": { "url": "https://github.com/sebastianwd/npm-package-template-changesets" }, "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "license": "ISC" }
2.安裝依賴
pnpm add tsup typescript @changesets/cli -D
- tsup:用於建立打字稿程式碼,此 dep 的使用取決於您的用例
- 打字稿:必要的依賴
- @changesets/cli:用於版本控制和發布
3.產生tsconfig文件
對於這種情況,我們將使用 2 個 tsconfig 檔案:tsconfig.build.json 和 tsconfig.json。它們之間的區別在於tsconfig.build.json 將使用屬性compoto: true 和rootDir: "./src" 因此構建僅查看src 目錄中的文件,而在開發中tsconfig.json 將覆蓋這些設定並使用rootDir" : "." 在根層級啟用設定檔的打字稿。
tsconfig.build.json
{ "compilerOptions": { /* Base Options: */ "rootDir": "./src", "esModuleInterop": true, "skipLibCheck": true, "target": "es2022", "allowJs": true, "resolveJsonModule": true, "moduleDetection": "force", "isolatedModules": true, "verbatimModuleSyntax": true, /* Strictness */ "strict": true, "noUncheckedIndexedAccess": true, "noImplicitOverride": true, "module": "preserve", "outDir": "dist", "sourceMap": true, "declaration": true, "composite": true, "noEmit": true, /* If your code doesn't run in the DOM: */ "lib": [ "es2022" ], }, "include": [ "src" ], }
{ "extends": "./tsconfig.build.json", "compilerOptions": { "composite": false, "rootDir": "." } }
對於此範例,我們將在 src 目錄中新增一個 index.ts 檔案:
索引.ts
export const hello = () => "hello world";
新增腳本:
"scripts": { "build": "tsup src", "release": "changeset", "ci:publish": "pnpm build && changeset publish --access public" }
"publishConfig": { "provenance": true, "access": "public" }
"type": "module", "exports": { ".": { "types": "./dist/index.d.ts", "import": "./dist/index.mjs", "require": "./dist/index.cjs" } }, "main": "dist/index.cjs", "module": "dist/index.mjs", "types": "dist/index.d.ts",
要建立 .cjs 和 .mjs 副檔名的文件,我們可以使用 tsup:
tsup.config.ts
import { defineConfig } from "tsup"; export default defineConfig({ entry: ["src/index.ts"], splitting: false, clean: true, dts: true, format: ["cjs", "esm"], outExtension({ format }) { return { js: format === "cjs" ? ".cjs" : ".mjs", }; }, });
.github/workflows/publish.yml
name: Publish on: push: branches: - master concurrency: ${{ github.workflow }}-${{ github.ref }} permissions: contents: write pull-requests: write packages: write id-token: write jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 with: node-version: 20.x cache: "pnpm" registry-url: "https://registry.npmjs.org" - run: pnpm install --frozen-lockfile - name: Create Release Pull Request or Publish id: changesets uses: changesets/action@v1 with: publish: pnpm run ci:publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
另請前往「操作」>一般
並啟用此選項,否則變更集將無法開啟 PR:
7. 產生第一個變更集
- 初始化變更集:
npm install -g pnpm
- 建立第一個提交:
pnpm init
- 運行變更集:
{ "name": "npm-package-template-changesets", "repository": { "url": "https://github.com/sebastianwd/npm-package-template-changesets" }, "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "license": "ISC" }
如果您收到有關「無法找到 HEAD 從 main 分支的位置」的錯誤,請在 .changeset/config.json 中設定您的基礎分支
系統會提示您一些選項,在本例中我們將選擇補丁:
- 在 .changesets 資料夾中建立了新文件,對於第一個版本,我們應該將它們修改為先前的提交,這樣我們就不會添加另一個文件:
pnpm add tsup typescript @changesets/cli -D
8.推送到倉庫
{ "compilerOptions": { /* Base Options: */ "rootDir": "./src", "esModuleInterop": true, "skipLibCheck": true, "target": "es2022", "allowJs": true, "resolveJsonModule": true, "moduleDetection": "force", "isolatedModules": true, "verbatimModuleSyntax": true, /* Strictness */ "strict": true, "noUncheckedIndexedAccess": true, "noImplicitOverride": true, "module": "preserve", "outDir": "dist", "sourceMap": true, "declaration": true, "composite": true, "noEmit": true, /* If your code doesn't run in the DOM: */ "lib": [ "es2022" ], }, "include": [ "src" ], }
CI 完成後,檢查儲存庫上的 Pull Requests 選項卡,應該有一個開啟的
檢視並合併它。
9. 在 NPM 上檢查你的包
以上是使用變更集和 GitHub Actions 自動發布 NPM 包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。
