Automatizácia vášho procesu publikovania balíkov npm s nepretržitou integráciou a doručovaním (CI/CD) zaisťuje, že každé vydanie prejde pred zverejnením bránou kvality – vašou testovacou súpravou. Vylúčením testovacích súborov môžete zároveň presne kontrolovať, čo skončí v konečnom zverejnenom balíku. V tejto príručke sa dozviete, ako nastaviť CI/CD pre jednoduchý balík npm – alfanumerický validátor – aby každé nové vydanie GitHubu spustilo testy, aktualizovalo verziu balíka a automaticky zverejnilo čistý balík na npm.
Manuálne publikovanie npm môže byť časovo náročné a náchylné na chyby, najmä keď váš projekt rastie a získava prispievateľov. Automatizáciou procesu môžete:
node -v npm -v
Vytvoríme jednoduchý balík alphanumeric-validator
, ktorý exportuje funkciu, ktorá kontroluje, či je reťazec alfanumerický.
Inicializujte projekt
mkdir alphanumeric-validator cd alphanumeric-validator npm init -y
Podľa potreby aktualizujte package.json
. Pre alphanumeric-validator
to bude vyzerať takto.
{ "name": "alphanumeric-validator", "version": "1.0.0", "description": "Validates if a string is alphanumeric", "main": "index.js", "scripts": { "test": "jest" }, "keywords": ["alphanumeric", "validator"], "author": "Your Name", "license": "ISC" }
// index.js function isAlphaNumeric(str) { return /^[a-z0-9]+$/i.test(str); } module.exports = isAlphaNumeric;
Testovanie zaisťuje, že nezverejníte poškodený kód.
Nainštalujte Jest
npm install --save-dev jest
Vytvorte testovací súbor
mkdir tests
Vložte nižšie uvedený kód do súboru tests/index.text.js
.
// tests/index.test.js const isAlphaNumeric = require('../index'); test('valid alphanumeric strings return true', () => { expect(isAlphaNumeric('abc123')).toBe(true); }); test('invalid strings return false', () => { expect(isAlphaNumeric('abc123!')).toBe(false); });
Spustiť testy
npm test
Úspešné testy? Skvelé. Teraz zabezpečíme spustenie týchto testov v CI pred zverejnením.
Pred publikovaním na Github chcete vylúčiť node_modules
. Nechcete zaviazať node_modules
do správy verzií, pretože obsahuje veľké množstvo súborov, ktoré je možné vygenerovať pomocou npm install
.
Vytvorte súbor .gitignore
v koreňovom adresári vášho projektu:
echo "node_modules" >> .gitignore
To zaisťuje, že node_modules
nie je sledovaný git a nebude poslaný do vášho úložiska.
Aj keď budete počas CI spúšťať testy, nechcete, aby boli testovacie súbory súčasťou vášho publikovaného balíka npm. Vďaka tomu je balík čistý, má malú veľkosť balíka a používateľom sa doručujú iba potrebné súbory.
Vytvorte súbor .npmignore
v koreňovom priečinku a pridajte názvy testovacích súborov.
// .npmignore __tests__ *.test.js // captures all files in the directory with a .test.js extension
To zaisťuje, že testovacie súbory nebudú zahrnuté pri spustení npm publish
.
alphanumeric-validator
.
Push Your Code
git init git add . git commit -m "Initial commit" git remote add origin [email protected]:YOUR_USERNAME/alphanumeric-validator.git git push -u origin main
--access public
, aby bol váš balík verejný a prístupný používateľom.
npm login npm publish --access public
Navštívte https://www.npmjs.com/package/alphanumeric-validator a overte, či je pôvodná verzia aktívna.
Musíte nakonfigurovať pracovný postup, ktorý sa spustí pri každej udalosti vydania, aby pri vytváraní nového vydania (napríklad v1.0.1
):
package.json
na novú verziu zo značky vydania.
Vytvorte .github/workflows/publish.yml
:
name: Publish Package to npm # Trigger this workflow whenever a new release is published on: release: types: [published] # Grant write permissions to the repository contents so we can push version updates permissions: contents: write jobs: publish: runs-on: ubuntu-latest steps: # Step 1: Check out the repository's code at the default branch # This makes your code available for subsequent steps like installing dependencies and running tests. - uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} ref: ${{ github.event.repository.default_branch }} # Step 2: Set up a Node.js environment (Node 20.x) and configure npm to use the official registry # This ensures we have the right Node.js version and a proper registry URL for installs and publishing. - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' registry-url: 'https://registry.npmjs.org' # Step 3: Install dependencies using npm ci # This ensures a clean, reproducible installation based on package-lock.json. - name: Install dependencies run: npm ci # Step 4: Run your test suite (using the "test" script from package.json) # If tests fail, the workflow will stop here and not publish a broken version. - name: Run tests run: npm test # Step 5: Update package.json to match the release tag # The release tag (eg, v1.0.1) is extracted, and npm version sets package.json version accordingly. # The --no-git-tag-version flag ensures npm doesn't create its own tags. # This step keeps package.json's version aligned with the release tag you just created. - name: Update package.json with release tag run: | TAG="${{ github.event.release.tag_name }}" echo "Updating package.json version to $TAG" npm version "$TAG" --no-git-tag-version # Step 6: Commit and push the updated package.json and package-lock.json back to the repo # This ensures your repository always reflects the exact version published. # We use the GITHUB_TOKEN to authenticate and the granted write permissions to push changes. - name: Commit and push version update run: | TAG="${{ github.event.release.tag_name }}" git config user.name "github-actions" git config user.email "[email protected]" git add package.json package-lock.json git commit -m "Update package.json to version $TAG" git push origin ${{ github.event.repository.default_branch }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Step 7: Publish the new version to npm # The NODE_AUTH_TOKEN is your npm access token stored as a secret. # npm publish --access public makes the package available to anyone on npm. - name: Publish to npm run: npm publish --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
:username
vaším skutočným používateľským menom)
Prejdite do Nastavenia > Tajomstvá a premenné > Akcie vo svojom úložisku GitHub.
Kliknite na Nový tajný kľúč úložiska a pridajte NPM_TOKEN
.
Povedzme, že chcete pridať README.md
pre vydanie v1.0.1
a stlačili ste ho:
1.0.1
.1.0.1
do npm, s výnimkou testovacích súborov.
Integrácia akcií GitHub do vášho pracovného postupu publikovania npm vytvára skvelý kanál CI/CD. S každým novým vydaním sa spustí komplexná séria testov, súbor package.json sa aktualizuje správnou verziou a do npm sa publikuje zjednodušený balík – bez nepotrebných súborov, ako sú testy.
Tento prístup šetrí čas, znižuje ľudské chyby a zvyšuje spoľahlivosť vašich vydaní, vďaka čomu prispievatelia ľahšie uvidia, ako ich práca plynulo funguje.
Jediné vydanie GitHubu je teraz všetko, čo je potrebné na odoslanie plne otestovaného balíka so správnou verziou do registra npm.