Aracılığıyla paylaş


JavaScript uygulamaları için işlem hatları

Bu makalede Azure Pipelines'ın JavaScript uygulamalarıyla nasıl çalıştığı açıklanmaktadır. Microsoft tarafından barındırılan aracılar npm, Node.js, Yarn ve Gulp gibi yaygın JavaScript derleme, test ve dağıtım araçlarını herhangi bir altyapıyı ayarlamanıza gerek kalmadan önceden yükleyin. Kendi kendine barındırılan aracıları da yapılandırabilirsiniz.

JavaScript için hızlı bir işlem hattı oluşturmak için bkz. JavaScript hızlı başlangıcı.

Node.js araç yükleyicileri

Önceden yüklenmemiş Node.js ve npm sürümlerini yüklemek veya araçları kendi ev sahipliğini yaptığınız aracılara yüklemek için:

Belirli bir Node.js sürümünü yüklemek için azure-pipelines.yml dosyanıza aşağıdaki kodu ekleyin:

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

Not

Bu görev, işlem hattı her çalıştığında daha yeni bir küçük sürüme güncelleme işlemi için önemli bir süre gerektirebilir. Microsoft tarafından barındırılan aracılar düzenli olarak güncelleştirilir, bu nedenle bu görevi yalnızca önceden yüklenmemiş belirli Node sürümlerini yüklemek için kullanın. Microsoft tarafından barındırılan aracılara hangi Node.js ve npm sürümlerinin önceden yüklendiğini öğrenmek için bkz. Yazılım.

Birden çok düğüm sürümü kullanma

Uygulamanızı Node.js'in birden çok sürümünde derlemek ve test etmek için bir stratejiyle Node.js matrix görevini kullanabilirsiniz. Daha fazla bilgi için bkz . Çok işli yapılandırma.

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

Bağımlılık aracı kurulumu

Proje package.json veya package-lock.json dosyanızda geliştirme bağımlılık araçlarınız varsa npm aracılığıyla araçları ve bağımlılıkları yükleyin. Proje dosyası, derleme aracısı üzerinde bulunan diğer sürümlerden bağımsız olarak araçların tam sürümünü tanımlar.

Bu araçları derleme aracınıza yüklemek için işlem hattınızda bir betik, npm görevi veya komut satırı görevi kullanın.

Betik kullanmak için:

- script: npm install --only=dev

npm görevini kullanmak için:

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

Bu şekilde yüklediğiniz araçlar, PATH çözünürlüğündeki araçları algılayan npm npx paket çalıştırıcısını kullanır. Aşağıdaki örnek, test çalıştırıcısını mocha çağırır ve aracılığıyla npm install -ggenel olarak yüklenen sürüm yerine geliştirme bağımlılığı sürümünü kullanır.

- script: npx mocha

Projenizin package.json dosyasında geliştirme bağımlılıkları olarak ayarlanmamış araçları yüklemek için, işlem hattınızdaki bir betikten npm install -g'i çağrısını yapın. Aşağıdaki örnek, kullanarak Angular CLI'nin npm en son sürümünü yükler. İşlem hattındaki diğer betikler daha sonra Angular ng komutlarını kullanabilir.

- script: npm install -g @angular/cli

Not

Microsoft tarafından barındırılan Linux aracılarında komutunun sudobaşına gibi sudo npm install -gyazın.

Bu araç yükleme görevleri, işlem hattı her çalıştığında çalışır, bu yüzden derleme sürelerine olan etkilerine dikkat etmeniz önemlidir. Ek yük derleme performansını ciddi şekilde etkiliyorsa, ihtiyacınız olan araç sürümleriyle önceden yapılandırılmış kendi sunucularınızda barındırılan aracıları kullanmayı göz önünde bulundurun.

Not

Bu araç yükleme görevleri, işlem hattı her çalıştığında çalışır, bu yüzden derleme sürelerine olan etkilerine dikkat etmeniz önemlidir.

Bağımlılık paketi indirmeleri

Yarn veya Azure Artifacts'i kullanarak genel npm kayıt defterinden veya *.npmrc dosyasında belirttiğiniz özel bir npm kayıt defterinden paket indirebilirsiniz. Bir npm kayıt defteri belirtmek için url'sini kod deponuzdaki *.npmrc dosyasına ekleyin.

npm kullanma

npm kullanarak işlem hattınızdaki derleme paketlerini aşağıdaki yollarla indirebilirsiniz:

  • Kimlik doğrulaması olmadan paketleri indirmenin en basit yolu için doğrudan komutunu çalıştırın npm install.
  • Kimliği doğrulanmış bir kayıt defteri kullanmak için npm görevini ekleyin.
  • npm install'yu Gulp, Grunt veya Maven görev çalıştırıcılarının içinden çalıştırmak için npm authenticate görevini kullanın.

Not

Npm akışınız kimlik doğrulaması kullanıyorsa, kimlik bilgilerini yönetmek için Azure DevOps Projesi ayarlarındakiHizmetler sekmesinde bir npm hizmet bağlantısı oluşturmanız gerekir.

Npm paketlerini doğrudan yüklemek için azure-pipelines.yml'da aşağıdaki betiği kullanın. tr-TR: Derleme aracınızın geliştirme bağımlılıklarına ihtiyacı yoksa, build sürelerini hızlandırmak için --only=prod seçeneğini npm install'ye ekleyebilirsiniz.

- script: npm install --only=prod

*.npmrc dosyanızda belirtilen özel bir kayıt defterini kullanmak için Npm@1 görevini azure-pipelines.yml dosyasına ekleyin.

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

Gulp gibi görev çalıştırıcıları aracılığıyla npm komutlarına kayıt defteri kimlik bilgilerini geçirmek için, görev çalıştırıcısını çağırmadan önce bu görevi npmAuthenticate@0 dosyasına ekleyin.

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

Not

Microsoft tarafından barındırılan aracılar her derlemede yeni bir makine kullanır. Bağımlılıkların geri yüklenmesi önemli ölçüde zaman alabilir. Sorunu azaltmak için Azure Artifacts'i veya paket önbelleğine sahip kendinizin barındırdığı bir aracı kullanabilirsiniz.

Npm kayıt defterinden paketleri geri yüklerken bağlantı sorunları nedeniyle derlemeleriniz zaman zaman başarısız olursa, paketleri önbelleğe almak için yukarı akış kaynaklarıyla Azure Artifacts'i kullanabilirsiniz. Azure Artifacts, normalde Proje Koleksiyonu Derleme Hizmeti hesabından türetilen işlem hattının kimlik bilgilerini otomatik olarak kullanır.

Not

Bağımlılıkların geri yüklenmesi önemli ölçüde zaman alabilir. Sorunu azaltmak için Azure Artifacts'i veya paket önbelleğine sahip kendinizin barındırdığı bir aracı kullanabilirsiniz.

Npm kayıt defterinden paketleri geri yüklerken bağlantı sorunları nedeniyle derlemeleriniz zaman zaman başarısız olursa, paketleri önbelleğe almak için yukarı akış kaynaklarıyla Azure Artifacts'i kullanabilirsiniz. Azure Artifacts, normalde Proje Koleksiyonu Derleme Hizmeti hesabından türetilen işlem hattının kimlik bilgilerini otomatik olarak kullanır.

Yarn kullanma

Bağımlılıkları geri yüklemek için Yarn'ı yüklemek için bir betik kullanın. Yarn, Microsoft tarafından barındırılan bazı aracılara önceden yüklenmiştir. Yarn'ı diğer araçlar gibi kendinize ait barındırılan aracılara yükleyebilir ve yapılandırabilirsiniz.

- script: yarn install

Yarn'ı çağırmak için işlem hattınızda CLI veya Bash görevini de kullanabilirsiniz.

JavaScript derleyicileri

JavaScript uygulamaları, kaynak kodu Node.js çalışma zamanı veya web tarayıcılarında kullanılabilen sürümlere dönüştürmek için Babel ve TypeScripttsc derleyicisi gibi derleyicileri kullanır. Proje package.json dosyanızda derleyicinizi çalıştırmak için ayarlanmış bir betik nesneniz varsa, bunu işlem hattınızda çağırabilirsiniz.

- script: npm run compile

Ayrıca bir betik kullanarak derleyicileri doğrudan işlem hattından çağırabilirsiniz. Bu komutlar kopyalanan kaynak kodu deposunun kökünden çalıştırılır.

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

Projeniz package.jsonbir derleme betiği tanımlıyorsa npm görevini kullanarak kodu oluşturabilirsiniz. Derleme betiği tanımlamazsanız bash görevini kullanarak kodunuzu derleyebilirsiniz.

Birim testi

İşlem hatlarınızı JavaScript testlerinizi çalıştıracak şekilde yapılandırarak sonuçları JUnit XML biçiminde üretmelerini sağlayabilirsiniz. Ardından , Test sonuçlarını yayımla görevini kullanarak sonuçları yayımlayabilirsiniz.

Test çerçeveniz JUnit çıkışını desteklemiyorsa , mocha-junit-reporter gibi bir iş ortağı raporlama modülü aracılığıyla destek ekleyin. Test betiğinizi JUnit muhabirini kullanacak şekilde güncelleştirebilir veya muhabir komut satırı seçeneklerini destekliyorsa bu seçenekleri görev tanımına geçirebilirsiniz.

Aşağıdaki tabloda, XML sonuçları üretmek için en yaygın kullanılan test çalıştırıcıları ve kullanabileceğiniz muhabirler listelenir:

Test çalıştırıcısı XML raporları için muhabirler
Mocha mocha-junit-reporter
cypress-multi-reporters
Yasemin yasemin-muhabirler
Jest jest-junit
jest-junit-reporter
Karma karma-junit-reporter
Ava tap-xunit

Aşağıdaki örnekte mocha-junit-reporter kullanılır ve doğrudan bir betik kullanılarak çağrılırmocha test. Bu betik JUnit XML çıkışını ./test-results.xmlvarsayılan konumunda üretir.

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

Proje test betiği, package.json dosyanızda tanımladıysanız, npm test kullanarak çağırabilirsiniz.

- script: npm test

Test sonuçlarını yayımlama

Test sonuçlarını yayımlamak için Test sonuçlarını yayımla görevini kullanın.

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

Kod kapsamı sonuçlarını yayımlama

Test betikleriniz İstanbul gibi bir kod kapsamı aracı çalıştırıyorsa Kod kapsamı sonuçlarını yayımla görevini ekleyin. Daha sonra derleme özetinde kapsam ölçümlerini görebilir ve daha fazla analiz için HTML raporlarını indirebilirsiniz.

Görev, Cobertura veya JaCoCo raporlama çıktısını bekler. Kod kapsamı aracınızın doğru çıkışı oluşturmak için gerekli seçeneklerle çalıştığından emin olun, örneğin --report cobertura.

Aşağıdaki örnekte, İstanbul komut satırı arayüzü nyc ile birlikte mocha-junit-reporter kullanılır ve npm test çağrılır.

- 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'

Uçtan uca tarayıcı testi

İşlem hattınız , protractor veya Karma gibi araçları kullanarak testleri başsız tarayıcılarda çalıştırabilir ve ardından test sonuçlarını yayımlayabilir. Tarayıcı test ve yayımlama sonuçlarını yapılandırmak için şu adımları izleyin:

  1. Yapı aracısına, Chrome veya Firefox gibi başsız bir tarayıcı test sürücüsü veya PhantomJS gibi bir tarayıcı simülasyon aracı yükleyin.
  2. Test çerçevenizi, aracın belgelerine göre başsız tarayıcınızı veya sürücü seçeneğinizi kullanacak şekilde yapılandırın.
  3. Test çerçevenizi genellikle bir raporlayıcı eklenti veya yapılandırma ile JUnit biçimli test sonuçlarını çıktısı olarak oluşturacak şekilde yapılandırın.
  4. Başsız tarayıcı örneklerini başlatmak için bir betik veya CLI görevi ekleyin.
  5. Birim testlerinizle birlikte işlem hattı aşamalarında uçtan uca testleri çalıştırın.
  6. Aynı Test sonuçlarını yayımla görevini kullanarak, sonuçlarınızı birim testlerinizle birlikte yayımlayın.

Paketleme ve teslimat

Uygulamanızı derleyip test ettikten sonra şunları yapabilirsiniz:

  • Derleme çıkışını Azure Pipelines'a yükleyin.
  • Npm veya Maven paketi oluşturun ve yayımlayın.
  • Derleme çıkışını bir web uygulamasına dağıtım için ZIP arşivinde paketleyin.

Azure Pipelines'da dosya yayımlama

Çalışma dizininin tamamını karşıya yüklemek için derleme yapıtlarını yayımla görevini azure-pipelines.yml dosyanıza ekleyin.

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

Dosyaların bir alt kümesini karşıya yüklemek için, önce gerekli dosyaları çalışma dizininden Dosyaları kopyala göreviyle bir hazırlama dizinine kopyalayın ve ardından Derleme yapıtlarını yayımla görevini kullanın.

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

- task: PublishBuildArtifacts@1

Npm kayıt defterinde modül yayımlama

Projenizin çıktısı diğer projelerin kullanması için bir npm modülse ve bir web uygulaması değilse, modülü yerel bir kayıt defterinde veya genel npm kayıt defterinde yayımlamak için npm görevini kullanın. Her yayımladığınızda benzersiz bir ad/sürüm bileşimi sağlayın.

Aşağıdaki örnek, npm genel kayıt defterine yayınlamak için betiği kullanır. Örnekte , npm sürümü gibi sürüm bilgilerini sürüm denetimindeki birpackage.json dosyası aracılığıyla yönettiğiniz varsayılır.

- script: npm publish

Aşağıdaki örnek, deponuzun *.npmrc dosyasında tanımlanan özel bir kayıt defterinde yayımlar. Derleme çalıştırılırken bağlantıya kimlik doğrulaması kimlik bilgilerini eklemek için bir npm hizmet bağlantısı ayarlayın.

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

Aşağıdaki örnek, modülü bir Azure DevOps Services paket yönetim akışında yayımlar.

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

Npm paketlerini sürüm oluşturma ve yayımlama hakkında daha fazla bilgi için bkz. Npm paketlerini yayımlama ve Derleme işleminin bir parçası olarak npm paketlerimi nasıl sürümleyebilirim?

Web uygulamasını paketleme ve dağıtma

Ara çıkışları ve bağımlılıkları olan tüm modülleri dağıtıma hazır statik varlıklar halinde paketlemek için uygulamaları paketleyebilirsiniz. Webpack veya Angular CLI ng derlemesi gibi bir aracı çalıştırmak için derleme ve testten sonra işlem hattı aşaması ekleyin.

Aşağıdaki örnek öğesini çağırır webpack. Bu işlemin çalışması içinpackage.jsonproje dosyanızda geliştirme bağımlılığı olarak webpack emin olun. Projenizin kök klasöründe bir webpack dosyanız olmadığı sürece bu betik varsayılan yapılandırmayla çalışır.

- script: webpack

Aşağıdaki örnek, proje npm run build dosyasında tanımlanan build betik nesnesini çağırmak için kullanır. Projenizde betik nesnesini kullanmak, derleme mantığını kaynak koda ve işlem hattı dışına taşır.

- script: npm run build

Ayrıca, işlem hattınızdaki CLI veya Bash görevini kullanarak webpack veya Angular'ın ng build gibi paketleme araçlarını çağırabilirsiniz.

Bir web uygulamasında yayımlamaya hazır *.zip dosya arşivi oluşturmak için Dosyaları arşivle görevini kullanın.

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

Bu arşivi bir web uygulamasında yayımlamak için bkz. Azure Pipelines kullanarak Azure App Service'e dağıtma.

JavaScript çerçeveleri

Çeşitli JavaScript çerçevelerini desteklemek için işlem hattınıza paket yükleyebilirsiniz.

Angular

Angular uygulamaları için, , ng testve ng buildgibi ng e2eAngular'a özgü komutları çalıştırabilirsiniz. İşlem hattınızda Angular CLI komutlarını kullanmak için derleme aracısına angular/cli npm paketini yükleyin.

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

Not

Microsoft tarafından barındırılan Linux aracılarında komutunun sudobaşına gibi sudo npm install -gyazın.

İşlem hattınızda bir tarayıcının çalıştırılmasını gerektiren testlerde (örneğin, Karma'yı komutuyla ng test çalıştırmak) standart tarayıcı yerine başsız bir tarayıcı kullanın. Angular başlangıç uygulamasında:

  • browsers karma.conf.js proje dosyanızdaki girdiyi browsers: ['Chrome']olarak browsers: ['ChromeHeadless'] değiştirin.
  • singleRun karma.conf.js proje dosyanızdaki girdiyi falseolarak true değiştirin. Bu değişiklik Karma işleminin çalıştıktan sonra durmasını sağlamaya yardımcı olur.

React ve Vue

React ve Vue uygulamalarının tüm bağımlılıkları package.json dosyanızda yakalanır. azure-pipelines.yml dosyanız standart npm betikleri içerir.

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

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

Derleme dosyaları yeni bir klasörde, Vue için dist veya React için build bulunuyor. Aşağıdaki örnek, www yayına hazır bir artefakt oluşturur. İşlem hattı Node.jskullan , Dosya kopyala ve Derleme yapıtlarını yayımla görevlerini kullanır.

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

Uygulamayı yayınlamak için, yayın görevinizi dist veya build bağımlılığına işaret edin ve Azure Web App görevini kullanın.

Webpack

Webpack yapılandırma dosyasını kullanarak Babel veya TypeScript gibi bir derleyici belirtebilir, JavaScript XML (JSX) veya TypeScript'i düz JavaScript'e çevirebilir ve uygulamanızı paketleyebilirsiniz.

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

Görev çalıştırıcıları oluşturma

JavaScript uygulamaları derlemek ve test etmek için gulp veya Grunt'ı görev çalıştırıcıları olarak kullanmak yaygın bir durumdur.

Gulp

Gulp, Microsoft tarafından barındırılan aracılara önceden yüklenmiştir.

YAML işlem hattı dosyasında komutunu çalıştırabilirsiniz gulp .

- script: gulp # add any needed options

gulpfile.js dosyanızdaki adımlar npm kayıt defteriyle kimlik doğrulaması gerektiriyorsa npm kimlik doğrulama görevini ekleyin.

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

- script: gulp

JUnit veya xUnit test sonuçlarını sunucuda yayımlamak için Test sonuçlarını yayımla görevini ekleyin.

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

Kod kapsamı sonuçlarını sunucuda yayımlamak için Kod kapsamı sonuçlarını yayımla görevini ekleyin. Kapsam ölçümlerini derleme özetinde bulabilir ve daha fazla analiz için HTML raporlarını indirebilirsiniz.

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

Grunt

Grunt, Microsoft tarafından barındırılan aracılara önceden yüklenmiştir.

YAML dosyasında komutunu çalıştırabilirsiniz grunt .

- script: grunt # add any needed options

Gruntfile.js dosyanızdaki adımlar npm kayıt defteriyle kimlik doğrulaması gerektiriyorsa npm kimlik doğrulama görevini ekleyin.

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

- script: grunt

Sorun giderme

Projenizi geliştirme makinenizde derleyebilir ancak Azure Pipelines'da derleyemezseniz aşağıdaki olası nedenleri ve düzeltici eylemleri keşfedin.

  • geliştirme makinenizdeki Node.js sürümlerinin ve görev çalıştırıcısının aracıdakilerle eşleşip eşleşmediğini denetleyin.

    Aracıda yüklü sürümleri denetlemek için node --version gibi komut satırı betiklerini işlem hattınıza ekleyebilirsiniz. Aracıya aynı sürümü yüklemek için Use Node.js görevini kullanın veya araç sürümlerini güncelleştirmek için npm install komutlarını çalıştırın.

  • Paketleri geri yüklerken derlemeleriniz zaman zaman başarısız olursa npm kayıt defterinde sorunlar vardır veya Azure veri merkezi ile kayıt defteri arasında ağ sorunları vardır. Azure Artifacts'i npm kayıt defteriyle yukarı akış kaynağı olarak kullanmanın derlemelerinizin güvenilirliğini artırıp artırmadığını keşfedin.

  • Node.jsfarklı sürümlerini yönetmek için kullanıyorsanız nvm bunun yerine Node.js kullan (UseNode@1) görevine geçmeyi göz önünde bulundurun. nvm , macOS görüntüsünde geçmiş nedenlerle yüklenmiştir. kabuk diğer adlarını ekleyip değiştirerek birden çok Node.js sürümünü yönetir; bu da Azure Pipelines'ın her görevi yeni bir işlemde çalıştırma biçimiyle uyumsuzluk yaratır. Daha fazla bilgi için İşlem hattı çalıştırmaları'na bakın.

    Use Node.js modeli bu görev doğru şekilde işler. Ancak işiniz `nvm` kullanmayı gerektiriyorsa, her işlem hattının başına aşağıdaki betik eklenebilir:

    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"
    

    Ardından ve diğer komut satırı araçları işlem node hattı işinin geri kalanında çalışır. komutunu kullandığınız nvm her adımda betiği aşağıdaki kodla başlatın:

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

SSS

'FATAL ERROR: CALL_AND_RETRY_LAST Ayırma başarısız oldu - JavaScript yığını bellek dışı' iletisiyle işlem hattı hatasını nasıl düzeltebilirim?

bu hata türü, Node.js paketi bellek kullanım sınırını aştığında oluşur. Sorunu çözmek için gibi NODE_OPTIONS bir değişken ekleyin ve değerini atayın --max_old_space_size=16384.

Derleme işleminin bir parçası olarak npm paketlerimi nasıl sürüme ekleyebilirim?

Bir seçenek, sürüm denetimi ve npm sürümünün bir birleşimini kullanmaktır. İşlem hattı çalıştırmasının sonunda deponuzu yeni sürümle güncelleştirebilirsiniz. Aşağıdaki YAML işlem hattı bir GitHub deposuna sahiptir ve paket npmjs'ye dağıtılır. npmjs üzerindeki paket sürümü ile package.json dosyası arasında bir uyuşmazlık varsa derleme başarısız olur.

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