Bagikan melalui


Alur untuk aplikasi JavaScript

Artikel ini menjelaskan cara kerja Azure Pipelines dengan aplikasi JavaScript. Agen yang dihosting Microsoft telah menginstal alat build, pengujian, dan penyebaran JavaScript umum seperti npm, Node.js, Yarn, dan Gulp tanpa mengharuskan Anda menyiapkan infrastruktur apa pun. Anda juga dapat mengonfigurasi agen yang dihost sendiri.

Untuk membuat alur untuk JavaScript dengan cepat, lihat mulai cepat JavaScript.

Penginstal alat Node

Untuk menginstal versi Node.js dan npm yang tidak diinstal sebelumnya, atau untuk menginstal alat pada agen yang dihost sendiri:

Untuk menginstal versi Node.js tertentu, tambahkan kode berikut ke file azure-pipelines.yml Anda:

- task: UseNode@1
  inputs:
    version: '16.x' # replace with the version you need

Catatan

Tugas ini dapat memerlukan waktu yang signifikan untuk memperbarui ke versi minor yang lebih baru setiap kali alur kerja dijalankan. Agen yang dihosting Microsoft diperbarui secara berkala, jadi gunakan tugas ini hanya untuk menginstal versi Node tertentu yang tidak diinstal sebelumnya. Untuk mengetahui versi Node.js dan npm apa yang telah diinstal sebelumnya pada agen yang dihosting Microsoft, lihat Perangkat Lunak.

Menggunakan beberapa versi simpul

Anda dapat menggunakan tugas Gunakan Node.js ekosistem v1 dengan matrix strategi untuk membangun dan menguji aplikasi Anda di beberapa versi Node.js. Untuk informasi selengkapnya, lihat Konfigurasi multi-pekerjaan.

pool:
  vmImage: 'ubuntu-latest'
strategy:
  matrix:
    node_16_x:
      node_version: 16.x
    node_13_x:
      node_version: 18.x

steps:
- task: UseNode@1
  inputs:
    version: $(node_version)

- script: npm install

Penginstalan perangkat dependensi

Jika Anda memiliki alat dan dependensi pengembangan dalam file package.json atau package-lock.json, instal alat dan dependensi melalui npm. File proyek menentukan versi alat yang tepat, independen dari versi lain yang ada di agen build.

Untuk menginstal alat ini pada agen build Anda, gunakan skrip, tugas npm , atau tugas baris perintah di alur Anda.

Untuk menggunakan skrip:

- script: npm install --only=dev

Untuk menggunakan tugas npm:

- task: Npm@1
  inputs:
     command: 'install'

Alat yang Anda instal dengan cara ini menggunakan runner paket npm npx , yang mendeteksi alat dalam resolusi PATH-nya. Contoh berikut memanggil penggerak pengujian mocha, dan menggunakan versi dependensi pengembang daripada versi yang diinstal secara global melalui npm install -g.

- script: npx mocha

Untuk menginstal alat yang dibutuhkan oleh proyek Anda yang tidak ditetapkan sebagai dependensi pengembangan di package.json, panggil npm install -g dari skrip di pipeline Anda. Contoh berikut menginstal versi terbaru Angular CLI dengan menggunakan npm. Skrip lain dalam alur kemudian dapat menggunakan perintah Angular ng .

- script: npm install -g @angular/cli

Catatan

Pada agen Linux yang dihosting Microsoft, awali perintah dengan sudo, seperti sudo npm install -g.

Tugas penginstalan alat ini dijalankan setiap kali pipeline dijalankan, jadi perhatikan dampaknya pada waktu kompilasi. Jika overhead berdampak serius pada performa build, pertimbangkan untuk menggunakan agen yang dihost sendiri yang telah dikonfigurasi sebelumnya dengan versi alat yang Anda butuhkan.

Catatan

Tugas penginstalan alat ini dijalankan setiap kali pipeline dijalankan, jadi perhatikan dampaknya pada waktu kompilasi.

Unduhan paket dependensi

Anda dapat menggunakan Yarn atau Azure Artifacts untuk mengunduh paket dari registri npm publik atau registri npm privat yang Anda tentukan dalam file *.npmrc . Untuk menentukan registri npm, tambahkan URL-nya ke file *.npmrc di repositori kode Anda.

Menggunakan npm

Anda dapat menggunakan npm untuk mengunduh paket build di alur Anda dengan cara berikut:

  • Untuk cara paling sederhana untuk mengunduh paket tanpa autentikasi, langsung jalankan npm install.
  • Untuk menggunakan registri terautentikasi, tambahkan tugas npm .
  • Untuk menjalankan npm install dari dalam alat penjalankan tugas Gulp, Grunt, atau Maven, gunakan tugas npm authenticate.

Catatan

Jika umpan npm Anda menggunakan autentikasi, Anda harus membuat koneksi layanan npm pada tab Layanan di pengaturan Proyek Azure DevOps untuk mengelola kredensialnya.

Untuk menginstal paket npm secara langsung, gunakan skrip berikut di azure-pipelines.yml. Jika agen build Anda tidak memerlukan dependensi pengembangan, Anda dapat mempercepat waktu build dengan menambahkan --only=prod opsi ke npm install.

- script: npm install --only=prod

Untuk menggunakan registri privat yang ditentukan dalam file *.npmrc Anda, tambahkan tugas ke Npm@1azure-pipelines.yml.

- task: Npm@1
  inputs:
    customEndpoint: <Name of npm service connection>

Untuk meneruskan kredensial registri ke perintah npm melalui pelari tugas seperti Gulp, tambahkan npmAuthenticate@0 tugas ke azure-pipelines.yml sebelum Anda memanggil pelari tugas.

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

Catatan

Agen yang dihosting Microsoft menggunakan komputer baru dengan setiap build. Memulihkan dependensi dapat memakan waktu yang signifikan. Untuk mengurangi masalah, Anda dapat menggunakan Azure Artifacts atau agen yang dihostkan sendiri dengan cache paket.

Jika build Anda terkadang gagal karena masalah koneksi saat Memulihkan paket dari registri npm, Anda dapat menggunakan Azure Artifacts dengan sumber upstream untuk menyimpan paket. Azure Artifacts secara otomatis menggunakan kredensial pipeline, yang biasanya berasal dari akun Project Collection Build Service.

Catatan

Memulihkan dependensi dapat memakan waktu yang signifikan. Untuk mengurangi masalah, Anda dapat menggunakan Azure Artifacts atau agen yang dihostkan sendiri dengan cache paket.

Jika build Anda terkadang gagal karena masalah koneksi saat Memulihkan paket dari registri npm, Anda dapat menggunakan Azure Artifacts dengan sumber upstream untuk menyimpan paket. Azure Artifacts secara otomatis menggunakan kredensial pipeline, yang biasanya berasal dari akun Project Collection Build Service.

Gunakan Yarn

Gunakan skrip untuk menginstal Yarn untuk memulihkan dependensi. Yarn telah diinstal sebelumnya pada beberapa agen yang dihosting Microsoft. Anda dapat menginstal dan mengonfigurasi Yarn pada agen yang dihost sendiri seperti alat lain.

- script: yarn install

Anda juga dapat menggunakan tugas CLI atau Bash di alur Anda untuk memanggil Yarn.

Kompiler JavaScript

Aplikasi JavaScript menggunakan kompilator seperti Babel dan pengkompilasi TypeScripttsc untuk mengonversi kode sumber menjadi versi yang dapat digunakan oleh runtime Node.js atau di browser web. Jika Anda memiliki objek skrip yang disiapkan di file package.json proyek untuk menjalankan pengkompilasi, Anda dapat memanggilnya di alur Anda.

- script: npm run compile

Anda juga dapat memanggil pengkompilasi langsung dari alur dengan menggunakan skrip. Perintah ini berjalan dari akar repositori kode sumber kloning.

- script: tsc --target ES6 --strict true --project tsconfigs/production.json

Anda dapat menggunakan tugas npm untuk membangun kode jika proyek Anda package.json menentukan skrip kompilasi. Jika Anda tidak menentukan skrip kompilasi, Anda dapat menggunakan tugas Bash untuk mengkompilasi kode Anda.

Pengujian unit

Anda dapat mengonfigurasi alur untuk menjalankan pengujian JavaScript sehingga menghasilkan hasil dalam format XML JUnit. Anda kemudian dapat menerbitkan hasilnya menggunakan tugas Terbitkan hasil pengujian .

Jika kerangka kerja pengujian Anda tidak mendukung output JUnit, tambahkan dukungan melalui modul pelaporan mitra seperti mocha-junit-reporter. Anda dapat memperbarui skrip pengujian untuk menggunakan reporter JUnit, atau meneruskan opsi tersebut ke definisi tugas jika reporter mendukung opsi baris perintah.

Tabel berikut ini mencantumkan pelari uji yang paling umum digunakan dan wartawan yang bisa Anda gunakan untuk menghasilkan hasil XML:

Uji runner Reporter untuk Laporan XML
Mocha mocha-junit-reporter
cypress-multi-reporters
Jasmine jasmine-reporters
Jest jest-junit
jest-junit-reporter
Karma karma-junit-reporter
Ava tap-xunit

Contoh berikut menggunakan mocha-junit-reporter dan memanggil mocha test langsung dengan menggunakan skrip. Skrip ini menghasilkan output XML JUnit di lokasi default ./test-results.xml.

- script: mocha test --reporter mocha-junit-reporter

Jika Anda menentukan test skrip dalam file package.json proyek, Anda dapat memanggilnya dengan menggunakan npm test.

- script: npm test

Menerbitkan hasil pengujian

Untuk menerbitkan hasil pengujian, gunakan tugas Terbitkan hasil pengujian .

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: JUnit
    testResultsFiles: '**/test-results.xml'

Menerbitkan hasil cakupan kode

Jika skrip pengujian Anda menjalankan alat cakupan kode seperti Istanbul, tambahkan tugas Terbitkan hasil cakupan kode . Anda kemudian dapat melihat metrik cakupan dalam ringkasan build dan mengunduh laporan HTML untuk analisis lebih lanjut.

Tugas ini mengharapkan hasil laporan dari Cobertura atau JaCoCo. Pastikan alat cakupan kode Anda berjalan dengan opsi yang diperlukan untuk menghasilkan output yang tepat, misalnya --report cobertura.

Contoh berikut menggunakan antarmuka baris perintah Istanbul nyc bersama dengan mocha-junit-reporter, dan memanggil npm test.

- script: |
    nyc --reporter=cobertura --reporter=html \
    npm test -- --reporter mocha-junit-reporter --reporter-options mochaFile=./test-results.xml
  displayName: 'Build code coverage report'

- task: PublishCodeCoverageResults@2
  inputs: 
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'

Pengujian browser end-to-end

Alur Anda dapat menggunakan alat seperti Protractor atau Karma untuk menjalankan pengujian di browser headless, lalu menerbitkan hasil pengujian. Untuk mengonfigurasi pengujian browser dan menerbitkan hasil, ikuti langkah-langkah berikut:

  1. Instal driver pengujian browser tanpa kepala, seperti Headless Chrome atau Headless Firefox, atau alat simulasi browser, seperti PhantomJS, pada agen build.
  2. Konfigurasikan kerangka kerja pengujian Anda untuk menggunakan opsi browser atau driver tanpa kepala sesuai dengan dokumentasi alat.
  3. Konfigurasikan kerangka kerja pengujian Anda untuk menghasilkan hasil pengujian berformat JUnit, biasanya dengan plug-in atau konfigurasi reporter.
  4. Tambahkan tugas skrip atau CLI untuk memulai instans browser headless.
  5. Jalankan pengujian end-to-end dalam tahap alur bersama dengan pengujian unit Anda.
  6. Terbitkan hasil bersama dengan pengujian unit Anda dengan menggunakan tugas Terbitkan hasil pengujian yang sama.

Pengemasan dan pengiriman

Setelah membuat dan menguji aplikasi, Anda dapat:

  • Unggah output build ke Azure Pipelines.
  • Buat dan terbitkan paket npm atau Maven.
  • Kemas output build ke dalam arsip ZIP untuk penyebaran ke aplikasi web.

Menerbitkan file ke Azure Pipelines

Untuk mengunggah seluruh direktori kerja, tambahkan tugas Publish build artifacts ke file azure-pipelines.yml Anda.

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)'

Untuk mengunggah subset file, salin file yang diperlukan terlebih dahulu dari direktori kerja ke direktori penahapan dengan tugas Salin file, lalu gunakan tugas Publikasikan artefak build.

- task: CopyFiles@2
  inputs:
    SourceFolder: '$(System.DefaultWorkingDirectory)'
    Contents: |
      **\*.js
      package.json
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1

Menerbitkan modul ke registri npm

Jika output proyek Anda adalah npm modul untuk digunakan proyek lain dan bukan aplikasi web, gunakan tugas npm untuk menerbitkan modul ke registri lokal atau ke registri npm publik. Berikan kombinasi nama/versi unik setiap kali Anda menerbitkan.

Contoh berikut menggunakan skrip untuk menerbitkan ke registri npm publik. Contoh mengasumsikan bahwa Anda mengelola informasi versi seperti versi npm melalui file package.json dalam kontrol versi.

- script: npm publish

Contoh berikut menerbitkan ke registri kustom yang ditentukan dalam repositori file *.npmrc Anda. Siapkan koneksi layanan npm untuk menyuntikkan kredensial autentikasi ke dalam koneksi saat build berjalan.

- task: Npm@1
  inputs:
     command: publish
     publishRegistry: useExternalRegistry
     publishEndpoint: https://my.npmregistry.com

Contoh berikut menerbitkan modul ke umpan manajemen paket Azure DevOps Services.

- task: Npm@1
  inputs:
     command: publish
     publishRegistry: useFeed
     publishFeed: https://my.npmregistry.com

Untuk informasi selengkapnya tentang penerapan versi dan penerbitan paket npm, lihat Menerbitkan paket npm dan Bagaimana cara membuat versi paket npm saya sebagai bagian dari proses build.

Mengemas dan menyebarkan aplikasi web

Anda dapat mengemas aplikasi untuk memaketkan semua modul dengan output perantara dan dependensi ke dalam aset statis yang siap untuk penyebaran. Tambahkan tahap alur setelah kompilasi dan pengujian untuk menjalankan alat seperti webpack atau build ng Angular CLI.

Contoh berikut memanggil webpack. Agar proses ini berfungsi, pastikan webpack dikonfigurasi sebagai dependensi pengembangan dalam file proyek package.json Anda. Skrip ini berjalan webpack dengan konfigurasi default, kecuali Anda memiliki file webpack.config.js di folder akar proyek Anda.

- script: webpack

Contoh berikut menggunakan npm run build untuk memanggil objek skrip yang build ditentukan dalam file package.json proyek. Menggunakan objek skrip dalam proyek Anda memindahkan logika kompilasi ke dalam kode sumber dan keluar dari proses pipeline.

- script: npm run build

Anda juga dapat menggunakan tugas CLI atau Bash di alur Anda untuk memanggil alat pengemasan Anda, seperti webpack atau Angular ng build.

Untuk membuat arsip file *.zip yang siap diterbitkan ke aplikasi web, gunakan tugas File arsip .

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false

Untuk menerbitkan arsip ini ke aplikasi web, lihat Menyebarkan ke Azure App Service dengan menggunakan Azure Pipelines.

Kerangka kerja JavaScript

Anda dapat menginstal paket di alur Anda untuk mendukung berbagai kerangka kerja JavaScript.

Sudut

Untuk aplikasi Angular, Anda dapat menjalankan perintah khusus Angular seperti ng test, , ng builddan ng e2e. Untuk menggunakan perintah Angular CLI di alur Anda, instal paket npm angular/cli pada agen build.

- script: |
    npm install -g @angular/cli
    npm install
    ng build --prod

Catatan

Pada agen Linux yang dihosting Microsoft, awali perintah dengan sudo, seperti sudo npm install -g.

Untuk pengujian di alur Anda yang mengharuskan browser berjalan, seperti menjalankan Karma dengan ng test perintah, gunakan browser headless alih-alih browser standar. Di aplikasi starter Angular:

  • browsers Ubah entri dalam file proyek karma.conf.js Anda dari browsers: ['Chrome'] ke browsers: ['ChromeHeadless'].
  • singleRun Ubah entri dalam file proyek karma.conf.js Anda dari false ke true. Perubahan ini membantu memastikan bahwa proses Karma berhenti setelah berjalan.

React dan Vue

Semua dependensi untuk aplikasi React dan Vue diambil dalam file package.json Anda. File azure-pipelines.yml Anda berisi skrip standar npm .

- script: |
    npm install
  displayName: 'npm install'

- script: |
    npm run build
  displayName: 'npm build'

File build berada di folder baru, dist untuk Vue atau build untuk React. Contoh berikut membangun artefak, www, yang siap untuk rilis. Alur menggunakan tugas Gunakan Node.js, Salin file, dan Terbitkan artefak build .

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: UseNode@1
  inputs:
    version: '16.x'
  displayName: 'Install Node.js'

- script: npm install
  displayName: 'npm install'

- script: npm run build
  displayName: 'npm build'

- task: CopyFiles@2
  inputs:
    Contents: 'build/**' # Pull the build directory (React)
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs: 
    PathtoPublish: $(Build.ArtifactStagingDirectory) # dist or build files
    ArtifactName: 'www' # output artifact named www

Untuk merilis aplikasi, konfigurasikan tugas rilis Anda ke artefak dist atau build dan gunakan tugas Azure Web App.

Paket web

Anda dapat menggunakan file konfigurasi paket web untuk menentukan pengkompilasi seperti Babel atau TypeScript, untuk menerjemahkan JavaScript XML (JSX) atau TypeScript ke JavaScript biasa, dan untuk memaketkan aplikasi Anda.

- script: |
    npm install webpack webpack-cli --save-dev
    npx webpack --config webpack.config.js

Membangun pelari tugas

Biasanya menggunakan Gulp atau Grunt sebagai pemroses tugas untuk membangun dan menguji aplikasi JavaScript.

Gulp

Gulp telah diinstal sebelumnya pada agen yang dihosting Microsoft.

Anda dapat menjalankan gulp perintah dalam file alur YAML.

- script: gulp # add any needed options

Jika langkah-langkah dalam file gulpfile.js Anda memerlukan autentikasi dengan registri npm, tambahkan tugas autentikasi npm .

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

- script: gulp

Untuk menerbitkan hasil pengujian JUnit atau xUnit ke server, tambahkan tugas Terbitkan hasil pengujian .

- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/TEST-RESULTS.xml'
    testRunTitle: 'Test results for JavaScript using gulp'

Untuk menerbitkan hasil cakupan kode ke server, tambahkan tugas Terbitkan hasil cakupan kode . Anda dapat menemukan metrik cakupan dalam ringkasan build, dan Anda dapat mengunduh laporan HTML untuk analisis lebih lanjut.

- task: PublishCodeCoverageResults@1
  inputs: 
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'

Grunt

Grunt telah diinstal sebelumnya pada agen yang dihosting Microsoft.

Anda dapat menjalankan grunt perintah dalam file YAML.

- script: grunt # add any needed options

Jika langkah-langkah dalam file Gruntfile.js Anda memerlukan autentikasi dengan registri npm, tambahkan tugas autentikasi npm .

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

- script: grunt

Troubleshooting

Jika Anda dapat membangun proyek di komputer pengembangan tetapi tidak dapat membuatnya di Azure Pipelines, jelajahi potensi penyebab dan tindakan korektif berikut.

  • Periksa apakah versi Node.js dan pengelola tugas pada mesin pengembangan Anda cocok dengan yang ada di agen.

    Anda dapat menyertakan skrip baris perintah seperti node --version di alur Anda untuk memeriksa versi yang diinstal pada agen. Gunakan tugas Use Node.js untuk menginstal versi yang sama pada agen, atau jalankan perintah npm install untuk memperbarui versi alat.

  • Jika build Anda gagal sesekali saat Anda memulihkan paket, registri npm mengalami masalah, atau ada masalah jaringan antara pusat data Azure dan registri. Jelajahi apakah menggunakan Artefak Azure dengan registri npm sebagai sumber hulu meningkatkan keandalan build Anda.

  • Jika Anda menggunakan nvm untuk mengelola versi Node.jsyang berbeda, pertimbangkan untuk beralih ke tugas Gunakan Node.js (UseNode@1). nvm diinstal karena alasan historis pada citra macOS. nvm mengelola beberapa versi Node.js dengan menambahkan alias shell dan mengubah PATH, yang berinteraksi dengan buruk dengan cara Azure Pipelines menjalankan setiap tugas dalam proses baru. Untuk informasi selengkapnya, lihat Pipeline eksekusi.

    Tugas Use Node.js menangani model ini dengan benar. Namun, jika pekerjaan Anda memerlukan penggunaan nvm, Anda dapat menambahkan skrip berikut ke awal setiap alur:

    steps:
    - bash: |
        NODE_VERSION=16  # or your preferred version
        npm config delete prefix  # avoid a warning
        . ${NVM_DIR}/nvm.sh
        nvm use ${NODE_VERSION}
        nvm alias default ${NODE_VERSION}
        VERSION_PATH="$(nvm_version_path ${NODE_VERSION})"
        echo "##vso[task.prependPath]$VERSION_PATH"
    

    Kemudian, node dan alat baris perintah lainnya berfungsi untuk sisa pekerjaan alur. Di setiap langkah di mana Anda menggunakan nvm perintah , mulai skrip dengan kode berikut:

    - bash: |
        . ${NVM_DIR}/nvm.sh
        nvm <command>
    

FAQ

Bagaimana cara memperbaiki kegagalan alur dengan pesan 'KESALAHAN FATAL: alokasi CALL_AND_RETRY_LAST gagal - Tumpukan JavaScript kehabisan memori'?

Jenis kegagalan ini terjadi ketika paket Node.js melebihi batas penggunaan memori. Untuk mengatasi masalah ini, tambahkan variabel seperti NODE_OPTIONS dan tetapkan nilai --max_old_space_size=16384.

Bagaimana cara membuat versi paket npm saya sebagai bagian dari proses build?

Salah satu opsinya adalah menggunakan kombinasi kontrol versi dan versi npm. Di akhir eksekusi alur, Anda dapat memperbarui repositori dengan versi baru. Alur YAML berikut memiliki repositori GitHub, dan paket disebarkan ke npmjs. Build gagal jika ada ketidakcocokan antara versi paket pada npmjs dan file package.json .

variables:
    MAP_NPMTOKEN: $(NPMTOKEN) # Mapping secret var

trigger:
- none

pool:
  vmImage: 'ubuntu-latest'

steps: # Checking out connected repo
- checkout: self
  persistCredentials: true
  clean: true
    
- task: npmAuthenticate@0
  inputs:
    workingFile: .npmrc
    customEndpoint: 'my-npm-connection'
    
- task: UseNode@1
  inputs:
    version: '16.x'
  displayName: 'Install Node.js'

- script: |
    npm install
  displayName: 'npm install'

- script: |
    npm pack
  displayName: 'Package for release'

- bash: | # Grab the package version
    v=`node -p "const p = require('./package.json'); p.version;"`
    echo "##vso[task.setvariable variable=packageVersion]$v"

- task: CopyFiles@2
  inputs:
      contents: '*.tgz'
      targetFolder: $(Build.ArtifactStagingDirectory)/npm
  displayName: 'Copy archives to artifacts staging directory'

- task: CopyFiles@2
  inputs:
    sourceFolder: '$(Build.SourcesDirectory)'
    contents: 'package.json' 
    targetFolder: $(Build.ArtifactStagingDirectory)/npm
  displayName: 'Copy package.json'

- task: PublishBuildArtifacts@1 
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/npm'
    artifactName: npm
  displayName: 'Publish npm artifact'

- script: |  # Config can be set in .npmrc
    npm config set //registry.npmjs.org/:_authToken=$(MAP_NPMTOKEN) 
    npm config set scope "@myscope"
    # npm config list
    # npm --version
    npm version patch --force
    npm publish --access public

- task: CmdLine@2 # Push changes to GitHub (substitute your repo)
  inputs:
    script: |
      git config --global user.email "username@contoso.com"
      git config --global user.name "Azure Pipeline"
      git add package.json
      git commit -a -m "Test Commit from Azure DevOps"
      git push -u origin HEAD:main