Получить версию в npm preversion скрипте - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь узнать, какую версию я создаю в npm сценарии предварительной версии.

Как в:

{
    "scripts": {
        "preversion": "echo $version"
    }        
}

Но я не могу найти, что написать вместо из $version.

Я хочу получить версию, которую я создаю, когда делаю npm version <something>. Например, если я сделаю npm version 1.0.1, я хочу получить 1.0.1. Но если я делаю npm version minor, когда у меня версия 1.0.0, я хочу получить 1.1.0.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Переопределите сценарий preversion следующим образом:

"scripts": {
  "preversion": "echo $npm_package_version"
}

Объяснение:

Доступ к пакету . json vars, Переменная npm_package_version является одной из многих переменных среды, которые создает npm.

На * nix платформах npm запускает пакет. json сценарии используя sh по умолчанию. Поэтому вы ссылаетесь на переменные среды внутри скриптов npm, используя префикс $, то есть $npm_package_version.

Однако на Windows npm скрипты запускаются с использованием cmd по умолчанию. В этом случае вам нужно будет ссылаться на переменные среды внутри скриптов npm, используя синтаксис %...%. Например:

"preversion": "echo %npm_package_version%"

Если необходима межплатформенная поддержка, вы можете избежать различий в синтаксисе, то есть префикс $ против %...%, используя cross-var . В этом случае вам нужно будет переопределить скрипт preversion следующим образом:

"scripts": {
  "preversion": "cross-var echo $npm_package_version"
}

Совет: Если вы cd перейдете в каталог вашего проекта и запустите npm run env, он выведет список все переменные среды с префиксом npm_*, которые создает npm.

0 голосов
/ 06 февраля 2020

Из документов :

Точный порядок выполнения следующий:

[...]

Запустить сценарий preversion . Эти сценарии имеют доступ к старой версии в пакете. json.

Поэтому невозможно легко получить будущую версию в сценарии preversion, так как он запускается до версия действительно меняется. Вы можете придумать какое-нибудь хакерское решение, например, такое:

"preversion": "mkdir ../ver && node -e \"const p = require('./package.json'); delete p.scripts.preversion; require('fs').writeFileSync('../ver/package.json', JSON.stringify(p), 'utf8')\" && cd ../ver && npm version minor && node -e \"console.log('new version is gonna be',require('./package.json').version);\" && cd -"

, которое в основном копирует файл пакета. json в другой каталог, запускает npm version minor и печатает новую версию. Проблема в жестком коде npm version minor, который не даст вам правильного результата при запуске, например, npm version 1.0.1, и нет способа получить ту же команду, которая запустила этот скрипт (по крайней мере, я не знаю, как это сделать) и запустите его снова, пока он не закончится.

Я не знаю ваших требований, но я бы go со скриптами version или postversion, чтобы легко получить новую версию. Или вы можете создать какой-нибудь пользовательский скрипт, который делает то же самое, но генерирует новую версию до того, как все скрипты будут запущены и новая версия будет доступна.

...