Mengautomasikan proses penerbitan pakej npm anda dengan penyepaduan dan penghantaran berterusan (CI/CD) memastikan bahawa setiap keluaran melalui gerbang kualiti—suite ujian anda—sebelum diterbitkan. Pada masa yang sama, anda boleh mengawal dengan tepat apa yang berakhir dalam pakej terbitan akhir dengan mengecualikan fail ujian. Dalam panduan ini, anda akan belajar cara menyediakan CI/CD untuk pakej npm ringkas—pengesah alfanumerik—supaya setiap keluaran GitHub baharu mencetuskan ujian, mengemas kini versi pakej dan menerbitkan pakej bersih secara automatik kepada npm.
Penerbitan npm manual boleh memakan masa dan terdedah kepada ralat, terutamanya apabila projek anda berkembang dan memperoleh penyumbang. Dengan mengautomasikan proses, anda boleh:
node -v npm -v
Kami akan mencipta pakej alphanumeric-validator
mudah yang mengeksport fungsi menyemak sama ada rentetan ialah abjad angka.
Mulakan Projek
mkdir alphanumeric-validator cd alphanumeric-validator npm init -y
Kemas kini package.json
mengikut keperluan. Untuk alphanumeric-validator
, ia akan kelihatan seperti ini.
{ "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;
Ujian memastikan anda tidak menerbitkan kod yang rosak.
Pasang Jest
npm install --save-dev jest
Buat Fail Ujian
mkdir tests
Tampalkan kod di bawah dalam fail 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); });
Jalankan Ujian
npm test
Ujian lulus? Hebat. Sekarang, kami akan memastikan ujian ini dijalankan dalam CI sebelum diterbitkan.
Sebelum menerbitkan ke Github, anda ingin mengecualikan node_modules
. Anda tidak mahu menyerahkan node_modules
kepada kawalan versi, kerana ia mengandungi sejumlah besar fail yang boleh dijana semula oleh npm install
.
Buat fail .gitignore
pada akar projek anda:
echo "node_modules" >> .gitignore
Ini memastikan bahawa node_modules
tidak dijejaki oleh git dan tidak akan ditolak ke repositori anda.
Walaupun anda akan menjalankan ujian semasa CI, anda tidak mahu fail ujian disertakan dalam pakej npm anda yang diterbitkan. Ini memastikan pakej bersih, mempunyai saiz berkas yang kecil dan memastikan hanya fail yang diperlukan dihantar kepada pengguna.
Cipta fail .npmignore
dalam folder akar dan tambahkan nama fail ujian.
// .npmignore __tests__ *.test.js // captures all files in the directory with a .test.js extension
Ini memastikan fail ujian tidak disertakan apabila anda menjalankan npm publish
.
alphanumeric-validator
.
Tolak Kod Anda
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
untuk menjadikan pakej anda awam dan boleh diakses oleh pengguna.
npm login npm publish --access public
Lawati https://www.npmjs.com/package/alphanumeric-validator untuk mengesahkan versi awal adalah secara langsung.
Anda perlu mengkonfigurasi aliran kerja yang berjalan pada setiap acara keluaran supaya apabila anda membuat keluaran baharu (seperti v1.0.1
):
package.json
kepada versi baharu daripada teg keluaran.
Cipta .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
dengan nama pengguna sebenar anda)
Pergi ke Tetapan > Rahsia dan pembolehubah > Tindakan dalam repositori GitHub anda.
Klik Rahsia Repositori Baharu dan tambah NPM_TOKEN
.
Katakan anda mahu menambah README.md
untuk keluaran v1.0.1
dan anda telah menolaknya:
1.0.1
.1.0.1
kepada npm, tidak termasuk fail ujian.
Mengintegrasikan Tindakan GitHub ke dalam aliran kerja penerbitan npm anda mewujudkan saluran paip CI/CD yang hebat. Dengan setiap keluaran baharu, satu siri ujian yang komprehensif dijalankan, package.json dikemas kini dengan versi yang betul dan pakej yang diperkemas diterbitkan ke npm—tanpa fail yang tidak diperlukan seperti ujian.
Pendekatan ini menjimatkan masa, mengurangkan ralat manusia dan meningkatkan kebolehpercayaan keluaran anda, memudahkan penyumbang melihat kerja mereka disiarkan secara langsung dengan lancar.
Satu keluaran GitHub kini hanya diperlukan untuk menghantar pakej yang diuji sepenuhnya, versi yang betul kepada pendaftaran npm.