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.
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:
node -v npm -v
Vi skapar ett enkelt alphanumeric-validator
som exporterar en funktion som kontrollerar om en sträng är alfanumerisk.
Initiera projektet
mkdir alphanumeric-validator cd alphanumeric-validator npm init -y
Uppdatera package.json
vid behov. För den alphanumeric-validator
kommer det att se ut så här.
{ "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;
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.
Innan du publicerar till Github vill du utesluta node_modules
. Du vill inte commit node_modules
till versionskontroll, eftersom den innehåller ett stort antal filer som kan återskapas av npm install
.
Skapa en .gitignore
-fil i roten av ditt projekt:
echo "node_modules" >> .gitignore
Detta säkerställer att node_modules
inte spåras av git och inte kommer att skickas till ditt arkiv.
Ä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 .npmignore
fil i rotmappen och lägg till testfilnamnen.
// .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
.
alphanumeric-validator
.
Tryck på din kod
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
för att göra ditt paket offentligt och tillgängligt för användare.
npm login npm publish --access public
Besök https://www.npmjs.com/package/alphanumeric-validator för att verifiera att den ursprungliga versionen är live.
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
):
package.json
till den nya versionen från releasetaggen.
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 "[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
med ditt faktiska användarnamn)
Gå till Inställningar > Hemligheter och variabler > Åtgärder i ditt GitHub-förråd.
Klicka på New Repository Secret och lägg till NPM_TOKEN
.
Låt oss säga att du vill lägga till README.md
för version v1.0.1
och du har drivit den:
1.0.1
.1.0.1
till npm, exklusive testfiler.
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.
En enda GitHub-version är nu allt som krävs för att skicka ett fullt testat, korrekt versionerat paket till npm-registret.