Rumah > hujung hadapan web > tutorial js > Terbitkan pakej NPM secara automatik menggunakan set perubahan dan Tindakan GitHub

Terbitkan pakej NPM secara automatik menggunakan set perubahan dan Tindakan GitHub

Barbara Streisand
Lepaskan: 2024-11-04 15:01:44
asal
222 orang telah melayarinya

Untuk panduan ini, kami akan menerbitkan pakej skrip taip NPM ringkas yang dipanggil "npm-package-template-changesets" dengan menggunakan PNPM dan changeset cli. Bahagian automasi datang apabila kami membuat sebarang perubahan pada pustaka, bot akan membuka permintaan tarik yang memerlukan kelulusan dan akan mengandungi semua perubahan untuk disertakan dalam versi baharu serta log perubahan.
Pakej ini akan menyokong CJS untuk versi lama dan ESM.

1. Pasang PNPM dan buat projek baharu

npm install -g pnpm
Salin selepas log masuk
Salin selepas log masuk
pnpm init
Salin selepas log masuk
Salin selepas log masuk

Ini akan menjana satu fail package.json, menukar sifat nama kepada nama pakej yang belum wujud lagi:

Juga buat repositori baharu pada GitHub dan tambahkan url pada harta repository.url, ia penting untuk asal:

{
  "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"
}
Salin selepas log masuk
Salin selepas log masuk

2. Pasang kebergantungan

pnpm add tsup typescript @changesets/cli -D
Salin selepas log masuk
Salin selepas log masuk
  • tsup: digunakan untuk membina kod skrip taip, penggunaan dep ini bergantung pada kes penggunaan anda
  • skrip taip: pergantungan yang diperlukan
  • @changesets/cli: digunakan untuk versi dan penerbitan

3. Hasilkan fail tsconfig

Untuk kes ini kami akan menggunakan 2 fail tsconfig: tsconfig.build.json dan tsconfig.json. Perbezaan di antara mereka ialah tsconfig.build.json akan menggunakan sifat komposit: true dan rootDir: "./src" jadi binaan hanya melihat fail dalam direktori src, manakala dalam pembangunan tsconfig.json akan mengatasi tetapan ini dan gunakan rootDir": "." untuk mendayakan skrip taip bagi fail konfigurasi pada peringkat akar.

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"
    ],
}
Salin selepas log masuk
Salin selepas log masuk

tsconfig.json:

{
    "extends": "./tsconfig.build.json",
    "compilerOptions": {
        "composite": false,
        "rootDir": "."
    }
}
Salin selepas log masuk

4. Tambah fail untuk diterbitkan:

Untuk contoh ini, kami akan menambah satu fail index.ts dalam direktori src:
index.ts

export const hello = () => "hello world";
Salin selepas log masuk

5. Kemas kini package.json:

Tambah skrip:

"scripts": {
 "build": "tsup src",
 "release": "changeset",
 "ci:publish": "pnpm build && changeset publish --access public"
}
Salin selepas log masuk

Tambah konfigurasi NPM:

"publishConfig": {
    "provenance": true,
    "access": "public"
}
Salin selepas log masuk

Tambah titik masuk dan taip konfigurasi dalam package.json:

  "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",
Salin selepas log masuk

Sifat keperluan dan utama adalah untuk pengguna akhir yang menggunakan CommonJS, yang lebih lama daripada ESM. ESM mendayakan sintaks moden dan banyak faedah berbanding CJS, tetapi kami akan menyokong kedua-duanya untuk panduan ini. Untuk ESM modul propeties dan import adalah yang terpakai.

Untuk membina fail bagi sambungan .cjs dan .mjs, kami boleh menggunakan 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",
    };
  },
});

Salin selepas log masuk

6. Menambah fail aliran kerja Github

.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 }}

Salin selepas log masuk

GITHUB_TOKEN sudah ada dalam repositori Github secara lalai, nilai NPM_TOKEN perlu dijana dalam npm dengan kebenaran penerbitan:

Auto publish NPM packages using changesets and GitHub Actions

Kemudian, buat repo baharu pada Github, pergi ke Tetapan dan tambahkannya pada rahsia:

Auto publish NPM packages using changesets and GitHub Actions

Juga pergi ke Tindakan > Umum

Auto publish NPM packages using changesets and GitHub Actions

dan dayakan pilihan ini atau set perubahan tidak akan dapat membuka PR:

Auto publish NPM packages using changesets and GitHub Actions

7. Hasilkan set perubahan pertama

  • Perubahan init:
npm install -g pnpm
Salin selepas log masuk
Salin selepas log masuk
  • Buat komitmen pertama:
pnpm init
Salin selepas log masuk
Salin selepas log masuk
  • Jalankan set perubahan:
{
  "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"
}
Salin selepas log masuk
Salin selepas log masuk

Jika anda mendapat ralat tentang "Gagal mencari tempat HEAD menyimpang dari utama", konfigurasikan cawangan asas anda dalam .changeset/config.json

Anda akan digesa beberapa pilihan, untuk contoh ini kami akan memilih patch:

Auto publish NPM packages using changesets and GitHub Actions

  • Fail baharu telah dibuat dalam folder .changesets, untuk keluaran pertama ini, kami harus memindanya kepada komit sebelumnya supaya kami tidak menambah satu lagi:
pnpm add tsup typescript @changesets/cli -D
Salin selepas log masuk
Salin selepas log masuk

8. Tolak ke repositori

{
    "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"
    ],
}
Salin selepas log masuk
Salin selepas log masuk

Selepas CI selesai, semak tab Permintaan Tarik pada repo, mesti ada satu terbuka

Auto publish NPM packages using changesets and GitHub Actions

Semak dan gabungkannya.

9. Semak pakej anda pada NPM

Auto publish NPM packages using changesets and GitHub Actions

Atas ialah kandungan terperinci Terbitkan pakej NPM secara automatik menggunakan set perubahan dan Tindakan GitHub. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan