Краткий ответ: К сожалению, для этого не существует встроенной команды / функции npm.Однако вы можете использовать свой собственный скрипт nodejs.Затем сценарий nodejs можно запустить с помощью команды, если вы определите его в разделе scripts
вашего package.json .
Ниже описано, как этого добиться.
Решение
check-deps.js
Создайте скрипт nodejs следующим образом.Давайте назовем скрипт check-deps.js
и сохраним его где-нибудь в каталоге вашего проекта.
const isSemverRange = require('is-semver-range');
const pkgPath = './path/to/your/package.json';
const pkgData = require(pkgPath);
function hasSemverRange({ dependencies = {}}) {
return Object.values(dependencies).some(semver => isSemverRange(semver));
}
if (hasSemverRange(pkgData)) {
console.log(`Semver range(s) found in dependencies section of ${pkgPath}`);
process.exit(1);
}
Объяснение check-deps.js
:
Во-первыхмы require
пакет is-semver-range , который мы будем использовать для проверки любых диапазонов semver .Установить этот пакет;cd
в каталог вашего проекта и выполните следующую команду:
npm i -D is-semver-range
Затем мы определим путь к файлу package.json (т.е. к файлу, который мыхотите проверить), а затем мы require
его содержимое.
const pkgPath = './path/to/your/package.json'; // <-- Redefine path.
const pkgData = require(pkgPath);
Примечание: вам необходимо переопределить ваш путь к package.json при необходимости.
Определение параметров функции hasSemverRange
использует деструктуризацию объекта для распаковки объекта dependencies
и назначает пустой объект как значение по умолчанию , чтобы избежать ошибокпроисходит, если в package.json .
отсутствует раздел dependencies
. В теле функции мы передаем объект dependencies
методу Object.values
и используйте метод Array.some()
, чтобы проверить, является ли хотя бы одно из значений диапазоном полуавтоматического значения.
Эта функция возвращает true
, если значение какого-либо свойства / ключаdependencies
объект находится в качестве диапазона полупериода, в противном случае он возвращает false
.
Наконец, в if
условие условия мы вызываем функцию hasSemverRange
, передавая ей проанализированное содержимое в package.json .Если условие truey , мы записываем сообщение об ошибке в консоль и выходим из сценария с ненулевым кодом выхода, например process.exit(1)
.
package.json
В разделе scripts
вашего package.json определите скрипт следующим образом.Давайте назовем сценарий check-deps
:
"scripts": {
"check-deps": "node path/to/check-deps.js",
...
}
Примечание: вам необходимо переопределить ваш путь к check-deps.js , если необходимо.
Запуск сценария npm
Выполните следующую команду через CLI для вызова сценария check-deps
:
npm run check-deps
Если значение какого-либо свойстваопределенный в разделе dependencies
вашего package.json - это диапазон полуверсии, в вашей консоли будет отображаться что-то вроде следующей ошибки:
Semver range(s) found in dependencies section of ./path/to/package.json
Интеграция проверки с вашим инструментом CI.
Из вашего вопроса неясно, какой инструмент CI вы используете.Однако, как правило, инструменты CI предоставляют функцию, которая позволяет вам вызывать скрипт npm.
Например, если вы используете Travis CI , вы можете определить сценарий для запуска в вашем .Файл travis.yml выглядит следующим образом:
.travis.yml
script:
- npm check-deps
Дополнительное примечание:
Вы также можете вызвать сценарий npm check-deps
через существующий сценарий test
, который вы, возможно, уже определили в своем package.json , используя оператор &&
.Например:
"scripts": {
"check-deps": "node path/to/check-deps.js",
"test": "yourCurrentTestcommands && npm run check-deps"
...
}
Примечание. В сценарии test
над частью yourCurrentTestcommands
следует заменить любые команды, которые вы в данный момент выполняете.