Att automatisera din npm-paketpubliceringsprocess med kontinuerlig integrering och leverans (CI/CD) säkerställer att varje utgåva passerar genom en kvalitetsgrind – din testsvit – innan publicering. Samtidigt kan du styra exakt vad som hamnar i det slutgiltiga publicerade paketet genom att utesluta testfiler. I den här guiden lär du dig hur du ställer in CI/CD för ett enkelt npm-paket – en alfanumerisk validator – så att varje ny GitHub-utgåva utlöser tester, uppdaterar paketversionen och automatiskt publicerar ett rent paket till npm. Varför automatisera npm-publicering? Manuell npm-publicering kan vara tidskrävande och felbenägen, särskilt när ditt projekt växer och får bidragsgivare. Genom att automatisera processen kan du: Kör automatiskt tester innan publicering. Om testerna misslyckas släpps inte den nya versionen. Säkerställ kvalitet: Den publicerade paketversionen matchar alltid releasetaggen. Konsekvent versionering: Bidragsgivare skickar in kod, du skapar en release och pipelinen gör resten – inga speciella npm-behörigheter krävs. Friktionsfritt samarbete: Förutsättningar Node.js & npm: Klicka om du inte har NodeJS och NPM installerat. här Bekräfta installationen genom att köra koden nedan i din terminal. node -v npm -v GitHub-konto och arkiv: Du behöver ett GitHub-förråd för att lagra kod och köra GitHub-åtgärder. NPM-konto och åtkomsttoken: Registrera dig eller logga in på och generera en åtkomsttoken. npmjs.com Lägg till åtkomsttoken som en hemlighet i ditt GitHub-förråd för automatiserad publicering. Steg 1: Konfigurera projektet Vi skapar ett enkelt som exporterar en funktion som kontrollerar om en sträng är alfanumerisk. alphanumeric-validator Initiera projektet mkdir alphanumeric-validator cd alphanumeric-validator npm init -y För den kommer det att se ut så här. Uppdatera package.json vid behov. alphanumeric-validator { "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" } Implementera valideraren // index.js function isAlphaNumeric(str) { return /^[a-z0-9]+$/i.test(str); } module.exports = isAlphaNumeric; Steg 2: Lägg till och kör tester lokalt Testning säkerställer att du inte publicerar trasig kod. Installera Jest npm install --save-dev jest Skapa en testfil mkdir tests Klistra in koden nedan i filen . 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); }); Kör tester npm test Godkänd test? Stor. Nu ska vi se till att dessa tester körs i CI innan de publiceras. Steg 3: Exkludera nodmoduler från Git Innan du publicerar till Github vill du utesluta . Du vill inte commit till versionskontroll, eftersom den innehåller ett stort antal filer som kan återskapas av . node_modules node_modules npm install i roten av ditt projekt: Skapa en .gitignore -fil echo "node_modules" >> .gitignore Detta säkerställer att inte spåras av git och inte kommer att skickas till ditt arkiv. node_modules Steg 4: Uteslut tester från det publicerade paketet Även om du kommer att köra tester under CI, vill du inte att testfilerna inkluderas i ditt publicerade npm-paket. Detta håller paketet rent, har en liten buntstorlek och säkerställer att endast de nödvändiga filerna skickas till användarna. Skapa en fil i rotmappen och lägg till testfilnamnen. .npmignore // .npmignore __tests__ *.test.js // captures all files in the directory with a .test.js extension Detta säkerställer att testfilerna inte ingår när du kör . npm publish Steg 5: Värd din kod på GitHub Skapa ett nytt GitHub-förråd: Gå till och skapa ett arkiv . https://github.com/new alphanumeric-validator Tryck på din kod git init git add . git commit -m "Initial commit" git remote add origin git@github.com:YOUR_USERNAME/alphanumeric-validator.git git push -u origin main Steg 5: Initial manuell publicering till npm Innan du startar automatiseringen, bekräfta att ditt paket kan publiceras – se här. Lägg sedan till flaggan för att göra ditt paket offentligt och tillgängligt för användare. --access public npm login npm publish --access public Besök för att verifiera att den ursprungliga versionen är live. https://www.npmjs.com/package/alphanumeric-validator Steg 6: Konfigurera arbetsflödet för GitHub Actions Du måste konfigurera ett arbetsflöde som körs på varje releasehändelse så att när du skapar en ny release (som ): v1.0.1 Arbetsflödet kontrollerar din kod. Installerar beroenden. Kör tester för att säkerställa kvalitet. Uppdaterar till den nya versionen från releasetaggen. package.json Publicerar det uppdaterade paketet till npm utan att inkludera testfiler. Arbetsflödesfilen Skapa : .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 "github-actions@github.com" 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 }} Lägga till din NPM-token till GitHub Besök (se till att du ersätter med ditt faktiska användarnamn) https://www.npmjs.com/settings/:username/tokens/new :username Ange namnet, välj automatisering för typen och generera Du kommer att omdirigeras till sidan för tokens, där du kan kopiera token. Gå till i ditt GitHub-förråd. Inställningar > Hemligheter och variabler > Åtgärder Klicka på och lägg till . New Repository Secret NPM_TOKEN Steg 7: Skapa en ny version Låt oss säga att du vill lägga till för version och du har drivit den: README.md v1.0.1 Utkast till en ny release: Gå till avsnittet i din GitHub-repo. [ ] Releases https://github.com/username/repo/releases Klicka på . Utkast till en ny version Ställ in "Tagversion" till v1.0.1. Klicka på . Publicera release Releasehändelsen utlöses. Arbetsflödet, Arbetsflöde utlöst: Kollar koden. Installerar beroenden. Kör tester. Om testerna misslyckas stoppas jobbet och paketet publiceras inte. Om testerna blir godkända uppdaterar den package.json till . 1.0.1 Publicerar version till npm, exklusive testfiler. 1.0.1 Efter en stund, besök din npm-paketsida för att se den nya versionen live. Verifiera på npm: Slutsats Att integrera GitHub Actions i ditt npm-publiceringsarbetsflöde etablerar en fantastisk CI/CD-pipeline. Med varje ny release körs en omfattande serie tester, package.json uppdateras med rätt version och ett strömlinjeformat paket publiceras till npm – fritt från onödiga filer som tester. Det här tillvägagångssättet sparar tid, minskar mänskliga fel och förbättrar tillförlitligheten för dina utgåvor, vilket gör det lättare för bidragsgivare att se sitt arbete gå live sömlöst. är nu allt som krävs för att skicka ett fullt testat, korrekt versionerat paket till npm-registret. En enda GitHub-version