Zanim zrobię małą wersję i oznaczę ją, chciałbym zaktualizować plik package.json, aby odzwierciedlić nową wersję programu.
Czy istnieje sposób package.json
automatycznej edycji pliku ?
Czy skorzystałbyś z git pre-release hook
pomocy?
Zanim zrobię małą wersję i oznaczę ją, chciałbym zaktualizować plik package.json, aby odzwierciedlić nową wersję programu.
Czy istnieje sposób package.json
automatycznej edycji pliku ?
Czy skorzystałbyś z git pre-release hook
pomocy?
Odpowiedzi:
npm version
jest prawdopodobnie poprawną odpowiedzią. Żeby dać alternatywę, polecam chrząknięcie . Obsługuje go jeden z facetów z angular.js.
Stosowanie:
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
Jeśli mimo wszystko używasz chrząka, może to być najprostsze rozwiązanie.
npm version
?
npm --no-git-tag-version version patch
.
Poprawna odpowiedź
Aby to zrobić, po prostu npm version patch
=)
Moja stara odpowiedź
pre-release
Początkowo nie ma haka git
. Przynajmniej man githooks
tego nie pokazuje.
Jeśli używasz git-extra
( https://github.com/visionmedia/git-extras ), na przykład, możesz użyć pre-release
haka, który jest przez niego implementowany, jak widać na https://github.com/visionmedia/ git-extras / blob / master / bin / git-release . Potrzebny jest tylko .git/hook/pre-release.sh
plik wykonywalny, który edytuje package.json
plik. Zatwierdzanie, pchanie i oznaczanie będzie wykonywane przez git release
polecenie.
Jeśli nie używasz żadnego rozszerzenia git
, możesz napisać skrypt powłoki (nazwę go git-release.sh
), a następnie możesz połączyć go git release
z aliasem za pomocą czegoś takiego:
git config --global alias.release '!sh path/to/pre-release.sh $1'
Możesz, niż użyć, git release 0.4
który zostanie wykonany path/to/pre-release.sh 0.4
. Twój skrypt może edytować package.json
, tworzyć znaczniki i przekazywać je na serwer.
git release
nie aktualizuje odpowiednio package.json ... github.com/visionmedia/git-extras/issues/150 : D
.git/hooks/pre-release.sh
echo -e "{\n\"version\": "$1"\n}" > package.json
git release $version
Tak zwykle robię z moimi projektami:
npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish
Pierwszy wiersz npm version patch
zwiększy wersję łatki o 1 (xx1 do xx2) w package.json
. Następnie dodajesz wszystkie pliki - w tym te, package.json
które w tym momencie zostały zmodyfikowane. Potem zazwyczaj git commit
i git push
, wreszcie npm publish
opublikować moduł.
Mam nadzieję, że to ma sens...
Merc.
npm version patch
samo zatwierdzenie; jednak, aby przesłać tag do github, myślę, że również musisz git push --tags
.
npm version patch
numer wersji i natychmiast zatwierdza zmianę
npm version patch
nic dla mnie nie popełnia.
npm version
.
Aby zapewnić bardziej aktualne podejście.
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"
}
Następnie uruchom:
npm version minor --force -m "Some message to commit"
Które będą:
... uruchom testy ...
zmień package.json
na następną mniejszą wersję (np .: 1.8.1 na 1.9.0)
popchnij swoje zmiany
utwórz nową wersję tagu git i
opublikuj swój pakiet npm.
--force
jest pokazanie, kto jest szefem! Żarty na bok patrz https://github.com/npm/npm/issues/8620
"deploy-minor": "npm version minor --force -m \"version %s\""
aby wszystko, co musisz pamiętać, to npm run deploy-minor
:)
Jako dodatek npm version
możesz użyć --no-git-tag-version
flagi, jeśli chcesz wersji wypukłości, ale nie ma tagu lub nowego zatwierdzenia:
npm --no-git-tag-version version patch
Jeśli używasz przędzy, możesz jej użyć
yarn version --patch
Spowoduje to zwiększenie package.json
wersji przez łatkę (0.0.x)
, zatwierdzenie i oznaczenie jej formatemv0.0.0
Podobnie możesz zderzyć mniejszą lub większą wersję za pomocą --minor
lub--major
Pchając do git, upewnij się, że również wypychasz tagi za pomocą --follow-tags
git push --follow-tags
Możesz także utworzyć dla niego skrypt
"release-it": "yarn version --patch && git push --follow-tags"
Po prostu uruchom go, pisząc yarn release-it
Używam husky i git-branch-jest :
Od husky v1 +:
// package.json
{
"husky": {
"hooks": {
"post-merge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
}
}
}
Przed husky V1:
"scripts": {
...
"postmerge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
...
},
Przeczytaj więcej o wersji npm
Webpack lub Vue.js
Jeśli używasz webpacka lub Vue.js, możesz wyświetlić to w interfejsie użytkownika za pomocą wersji Auto-wstrzykiwania - wtyczka Webpack
NUXT
W nuxt.config.js
:
var WebpackAutoInject = require('webpack-auto-inject-version');
module.exports = {
build: {
plugins: [
new WebpackAutoInject({
// options
// example:
components: {
InjectAsComment: false
},
}),
]
},
}
Wewnątrz template
na przykład w stopce:
<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>
postmerge
, ale jest teraz post-merge
w husky: {hooks:{}}
konfiguracji. Z czym masz problem git-branch-is
?
Chcę dodać jasności do odpowiedzi na to pytanie.
Nawet jeśli są tutaj odpowiedzi, które właściwie rozwiązują problem i zapewniają rozwiązanie, nie są one prawidłowe. Prawidłową odpowiedzią na to pytanie jest użycienpm version
Czy istnieje sposób automatycznej edycji pliku package.json?
Tak, co możesz zrobić, aby tak się stało, to uruchom npm version
polecenie w razie potrzeby, możesz przeczytać więcej na ten temat tutaj npm wersja , ale podstawowe użycie byłoby npm version patch
i dodałoby 3-cyfrową kolejność w twojej package.json
wersji (1.0. X )
Czy skorzystanie z haka pre-release git pomoże?
Możesz skonfigurować uruchamianie npm version
polecenia na haku przedpremierowym, tak jak potrzebujesz, ale to zależy, czy tego właśnie potrzebujesz w rurze CD / CI, ale bez npm version
polecenia git pre-release
hak nie może nic zrobić „łatwo” zpackage.json
Powodem, dla którego npm version
jest poprawna odpowiedź jest następująca:
package.json
, używa, npm
jeśli używa npm
, ma dostęp do npm scripts
.npm scripts
, ma dostęp do npm version
polecenia.Inne odpowiedzi, w których proponowane są inne narzędzia, są nieprawidłowe.
gulp-bump
działa, ale wymaga innego dodatkowego pakietu, który może powodować problemy w dłuższej perspektywie (punkt 3 mojej odpowiedzi)
grunt-bump
działa, ale wymaga innego dodatkowego pakietu, który może powodować problemy w dłuższej perspektywie (punkt 3 mojej odpowiedzi)
Najpierw musisz zrozumieć zasady uaktualniania numeru wersji. Możesz przeczytać więcej o wersji semantycznej tutaj.
Każda wersja będzie miała wersję xyz, w której definiuje się ją w innym celu, jak pokazano poniżej.
Aby uruchomić skrypty, możesz to zdefiniować w pliku package.json.
"script": {
"buildmajor": "npm version major && ng build --prod",
"buildminor": "npm version minor && ng build --prod",
"buildpatch": "npm version patch && ng build --prod"
}
W swoim terminalu wystarczy uruchomić npm odpowiednio do swoich potrzeb
npm run buildpatch
Jeśli uruchomisz go w git repo, domyślna wersja git-tag-true ma wartość true, a jeśli nie chcesz tego robić, możesz dodać poniższe polecenie do swoich skryptów:
--no-git-tag-version
na przykład: "npm --no-git-tag-version version major && ng build --prod"
Stworzyłem narzędzie, które może realizować automatyczne wersjonowanie semantyczne na podstawie znaczników w komunikatach zatwierdzania, znanych jako typy zmian. Jest to ściśle zgodne z Konwencją Angular Commit Message i specyfikacją wersjonowania semantycznego.
Możesz użyć tego narzędzia, aby automatycznie zmienić wersję pliku package.json przy użyciu interfejsu wiersza polecenia npm (opisano to tutaj ).
Ponadto może tworzyć dziennik zmian na podstawie tych zatwierdzeń, a także ma menu (z funkcją sprawdzania pisowni komunikatów zatwierdzania) do tworzenia zatwierdzeń na podstawie typu zmiany. Bardzo polecam sprawdzenie i przeczytanie dokumentów, aby zobaczyć wszystko, co można z tym zrobić.
Napisałem to narzędzie, ponieważ nie mogłem znaleźć niczego, co odpowiadałoby moim potrzebom dla mojego rurociągu CICD do automatyzacji wersjonowania semantycznego. Wolę skupić się na faktycznych zmianach niż na wersji i właśnie tam moje narzędzie oszczędza dzień.
Aby uzyskać więcej informacji na temat uzasadnienia dla narzędzia, zobacz to .