package.json sürümünü otomatik olarak güncelle


183

Küçük bir sürüm yapmadan ve etiketlemeden önce, programın yeni sürümünü yansıtacak şekilde package.json dosyasını güncellemek istiyorum.

Dosyayı package.jsonotomatik olarak düzenlemenin bir yolu var mı ?

git pre-release hookYardım ister misiniz ?


1
Neden package.json dosyasını düzenleyen, işleyen ve etiketleyen bir kabuk betiği oluşturmuyorsunuz?
gustavotkg

Evet, böylece yayın öncesi kanca bu komut dosyasını çağırır değil mi?
tUrG0n

Yanıtlar:


94

npm versionmuhtemelen doğru cevaptır. Sadece bir alternatif vermek için homurdanma yumru öneririz . Angular.js'den biri tarafından korunur.

Kullanımı:

grunt bump
>> Version bumped to 0.0.2

grunt bump:patch
>> Version bumped to 0.0.3

grunt bump:minor
>> Version bumped to 0.1.0

grunt bump
>> Version bumped to 0.1.1

grunt bump:major
>> Version bumped to 1.0.0

Yine de grunt kullanıyorsanız, en basit çözüm olabilir.


12
Ve gulpjs kullanıyorsanız : gulp -bump :)
GabLeRoux

Vik için kodladım, bu da npm, Bower, vb.'yi çarptı ... bir düşüşle düştü: github.com/Wildhoney/Vik
Wildhoney

8
npm'de bu işlev yerleşik olduğunda neden harici kitaplıklar kullanılır?
linuxdan

8
Bunları kullanmanın yararı nedir npm version?
Steve Bennett

3
@ConAntonakos Evet. Gibi bir şey deneyin npm --no-git-tag-version version patch.
Tong Shen

165

Doğru cevap

Bunu yapmak için, sadece npm version patch=)

Eski cevabım

pre-releaseBaşlangıçta kanca yok git. En azından man githooksgöstermiyor.

Örneğin git-extra( https://github.com/visionmedia/git-extras ) kullanıyorsanız pre-release, https://github.com/visionmedia/ adresinde de görebileceğiniz gibi, tarafından uygulanan bir kanca kullanabilirsiniz. git-extras / blob / master / bin / git-release . Yalnızca .git/hook/pre-release.shdosyanızı düzenleyen yürütülebilir bir dosya gerekir package.json. Taahhüt, itme ve etiketleme git releasekomut tarafından yapılacaktır .

İçin herhangi bir uzantı kullanmıyorsanız git, bir kabuk betiği yazabilirim (adlandıracağım git-release.sh) ve daha sonra git releaseböyle bir şeyle takma adlandırabilirsiniz :

git config --global alias.release '!sh path/to/pre-release.sh $1'

git release 0.4Yürütülecek olanı kullanabilirsiniz path/to/pre-release.sh 0.4. Komut dosyanız düzenleyebilir package.json, etiketi oluşturabilir ve sunucuya gönderebilir.


komut dosyasının neye benzeyeceğini belirten bir kod snippet'i paylaşabilir misiniz? : D
tUrG0n


Aslında visionmedia'nın git-extra repo kullanıyorum. Ancak git releasepaketi güncellemez. Json buna göre ... github.com/visionmedia/git-extras/issues/150 : D
tUrG0n

Yani, sadece .git/hooks/pre-release.shiçerenleri oluşturun : echo -e "{\n\"version\": "$1"\n}" > package.jsonve kullanmayı deneyingit release $version
gustavotkg

5
olarak Yorumlananlar burada npm version patch ya npm version 0.3.1 çözecek! Cevabınızı buna göre güncelleyebilir misiniz? ty !!
tUrG0n

75

Normalde projelerimle yaptığım budur:

npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish

İlk satır, npm version patchyama sürümünü 1 (xx1 ila xx2) inç artıracaktır package.json. Ardından package.json, bu noktada değiştirilenler de dahil olmak üzere tüm dosyaları eklersiniz . Sonra, olağan git commitve git pushve son npm publisholarak modülü yayınlamak.

Umarım bu mantıklı gelir...

Merc.


9
Anlayabildiğim kadarıyla npm version patch, taahhüdü kendisi yapar; Ancak, etiketi github'a göndermek için, bence de buna ihtiyacınız var git push --tags.
ChrisV

@ChrisV doğrudur - npm version patchsürüm numarasını çarpar ve hemen değişikliği yapar
Dan Esparza

2
@DanEsparza Bu ayarlayıcı bir şey olabilir. npm version patchbenim için hiçbir şey taahhüt etmiyor.
Mordred

@Mordred Hmmm ... muhtemelen. Bu konuda npm yapılandırma belgelerinde hiçbir şey görmüyorum , ama yolunuzda git yok olabilir mi?
Dan Esparza

@DanEsparza git kesinlikle çalıştırıyorum aynı klasörden taahhüt olarak yolda npm version.
Mordred

29

Daha güncel bir yaklaşım sunmak.

package.json

  "scripts": {
    "eslint": "eslint index.js",
    "pretest": "npm install",
    "test": "npm run eslint",
    "preversion": "npm run test",
    "version": "",
    "postversion": "git push && git push --tags && npm publish"
  }

Sonra çalıştırın:

npm version minor --force -m "Some message to commit"

Hangisi:

  1. ... testleri yap ...

  2. Yaptığınız değişiklik package.jsonbir sonraki alt sürümüne (örn: 1.8.1 1.9.0 için)

  3. değişikliklerini zorla

  4. yeni bir git etiketi sürümü oluştur ve

  5. npm paketinizi yayınlayın.

--forcekimin patron olduğunu göstermektir! Şaka bir yana bkz. Https://github.com/npm/npm/issues/8620


3
Ayrıca "deploy-minor": "npm version minor --force -m \"version %s\""hatırlamanız gereken tek şey npm run deploy-minor:) gibi bir komut dosyası da ekleyebilirsiniz
Kristofor Carle


17

İplik kullanıyorsanız,

yarn version --patch

Bu, package.jsonsürümü yama (0.0.x), taahhüt ve formatla etiketleyecekv0.0.0

Aynı şekilde sen kullanarak minör veya majör sürüm çarpmak edebilir --minorya da--major

Git tuşuna basarken etiketleri --follow-tags

git push --follow-tags

Bunun için bir komut dosyası da oluşturabilirsiniz

    "release-it": "yarn version --patch && git push --follow-tags"

Sadece yazarak çalıştırın yarn release-it


11

Ben husky ve git-branch-is kullanıyorum :

Husky v1 + 'dan itibaren:

// package.json
{
  "husky": {
    "hooks": {
      "post-merge": "(git-branch-is master && npm version minor || 
  (git-branch-is dev && npm --no-git-tag-version version patch)",
    }
  }
}

Husky V1'den önce:

"scripts": {
  ...
  "postmerge": "(git-branch-is master && npm version minor || 
  (git-branch-is dev && npm --no-git-tag-version version patch)",
  ...
},

Npm sürümü hakkında devamını oku

Webpack veya Vue.js

Webpack veya Vue.js kullanıyorsanız, bunu Otomatik enjekte sürümü - Webpack eklentisini kullanarak kullanıcı arayüzünde görüntüleyebilirsiniz

NuxT

İçinde nuxt.config.js:

var WebpackAutoInject = require('webpack-auto-inject-version');

module.exports = {
  build: {
    plugins: [
      new WebpackAutoInject({
        // options
        // example:
        components: {
          InjectAsComment: false
        },
      }),
    ]
  },
}

İçinde templateörneğin altbilgide:

<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>

i artık olduğu gibi çalışmıyorum rağmen bu husky seçeneği en iyi gibi. 'postmerge' var olduğunu sanmıyorum, "pre-push" muhtemelen en iyi seçenektir. ve 'git-branch-is' sonuçları hata verdikleri ve temel olarak tüm gönderiyi kilitledikleri için gerçekten işe yaramaz (hem master hem de dev'i kontrol ettiği için bunlardan birinde hata olur)
Phil

@Phil Hala kullanabilirsiniz postmerge, ancak şimdi yapılandırma post-mergeiçinde husky: {hooks:{}}. Hangi sorunun var git-branch-is?
Anima-t3d

koşmak yerine benim için hata yapardı. Endişelenmeyin, bu seçenekle devam ettim: marketplace.visualstudio.com/…
Phil

1
@Phil takip ettiğiniz için teşekkürler. Sadece güncellenmiş sürümü ile denedim ve hiçbir hatam yok, belki birleştirme sonrası komutunun kendisi ile ilgili bir sorun var.
Anima-t3d

5

Bu sorunun cevabına biraz açıklık getirmek istiyorum.

Burada problemi düzgün bir şekilde ele alan ve bir çözüm sunan bazı cevaplar olduğunu düşünse bile, bunlar doğru cevaplar değildir. Bu sorunun doğru cevabı kullanmaknpm version

Package.json dosyasını otomatik olarak düzenlemenin bir yolu var mı?

Evet, bunu yapmak için yapabileceğiniz şey, npm versiongerektiğinde komutu çalıştırmaktır, burada npm sürümü hakkında daha fazla bilgi edinebilirsiniz , ancak temel kullanım olurdu npm version patchve package.jsonsürümünüze 3. basamak sırasını ekleyecektir (1.0. X )

Git öncesi yayın kancası kullanmak yardımcı olur mu?

npm versionKomutu yayın öncesi kancada istediğiniz gibi çalıştıracak şekilde yapılandırabilirsiniz , ancak bu CD / CI borunuzda ihtiyacınız olan şey olup olmadığına bağlıdır, ancak npm versionkomut olmadan bir git pre-releasekanca "kolayca" hiçbir şey yapamaz ilepackage.json

npm versionDoğru cevabın nedeni şu:

  1. Kullanıcı bir klasör yapısını kullanıyorsa hangi o var package.jsondiye kullanıyor npmdiye kullanıp kullanmadığını npmUlaşabildiği npm scripts.
  2. Eğer erişimi varsa npm scripts, npm versionkomuta erişimi vardır .
  3. Bu komutu kullanarak bilgisayarına veya CD / CI borusuna uzun vadede proje için sürdürülebilirlik çabasını azaltacak ve kurulumda yardımcı olacak başka bir şey yüklemesine gerek yoktur.

Diğer araçların önerildiği diğer cevaplar yanlıştır.

gulp-bump çalışır, ancak uzun vadede sorun yaratabilecek başka bir ekstra paket gerektirir (cevabımın 3. noktası)

grunt-bump çalışır, ancak uzun vadede sorun yaratabilecek başka bir ekstra paket gerektirir (cevabımın 3. noktası)


2

İlk olarak, sürüm numarasını yükseltmek için kuralları anlamanız gerekir. Anlamsal sürüm hakkında daha fazla bilgiyi buradan edinebilirsiniz.

Her sürüm, aşağıda gösterildiği gibi farklı amaç için tanımladığı xyz sürümüne sahip olacaktır.

  1. x - major, büyük değişiklikleriniz olduğunda ve bu değişikliklerin büyük tutarsızlığı olduğunda.
  2. y - minör, yeni işlevsellik veya donanımınız olduğunda bunu yapın.
  3. z - patch, hataları düzelttiğinizde veya önceki sürümdeki değişiklikleri geri aldığınızda bunu yukarı kaldırın.

Komut dosyalarını çalıştırmak için paketinizde tanımlayabilirsiniz. Json.

"script": {
    "buildmajor": "npm version major && ng build --prod",
    "buildminor": "npm version minor && ng build --prod",
    "buildpatch": "npm version patch && ng build --prod"
}

Terminalinizde, npm gibi ihtiyaçlarınıza göre çalışmanız yeterlidir

npm run buildpatch

Git repo'da çalıştırırsanız, varsayılan git-tag-version true'dur ve bunu yapmak istemiyorsanız, komut dosyalarınıza aşağıdaki komutu ekleyebilirsiniz:

--no-git-tag-version

örneğin: "npm --no-git-tag-version version major && ng build --prod"


0

Değişiklik türleri olarak bilinen tamamlama iletilerindeki etiketlere dayalı otomatik semantik sürümleme yapabilen bir araç oluşturdum . Bu, Semantik Versiyon Spesifikasyonu ile birlikte Açısal Taahhüt Mesajı Sözleşmesini yakından takip eder.

Bu aracı, npm CLI'yi kullanarak package.json içindeki sürümü otomatik olarak değiştirmek için kullanabilirsiniz ( burada açıklanmaktadır ).

Buna ek olarak, bu taahhütlerden bir değişiklik günlüğü oluşturabilir ve ayrıca değişiklik türüne göre komisyonlar oluşturmak için bir menü (taahhüt mesajları için bir yazım denetleyicisi ile) içerir. Kontrol etmenizi ve onunla gerçekleştirilebilecek her şeyi görmek için dokümanlara okumanızı şiddetle tavsiye ederim.

Aracı yazdım çünkü CICD Pipeline'ımın semantik sürümlendirmeyi otomatikleştirmesi için gereksinimlerime uygun hiçbir şey bulamadım. Gerçek değişikliklerin ne olduğuna, sürümün olması gerekenden daha fazla odaklanmayı tercih ederim ve burası aracımın günü kurtardığı yer.

Aracın mantığı hakkında daha fazla bilgi için lütfen buna bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.