Краткий ответ: npm не предоставляет встроенную функцию для точного удовлетворения ваших требований.
Однако npm предоставляет команду npm-view . Документация гласит следующее:
Если указан диапазон версий, то данные будут распечатываться для каждой соответствующей версии пакета. Это покажет, какая версия jsdom была необходима для каждой соответствующей версии yui3:
npm view yui3@'>0.5.4' dependencies.jsdom
.
Два приведенных ниже решения демонстрируют, как вывод команды npm view
можно анализировать / манипулировать в соответствии с вашими требованиями (без необходимости устанавливать другую глобальную зависимость).
Решение A: * Только для платформ Nix (Linux / MacOS ...)
Следовательно, можно выполнить ваши требования с помощью некоторых дополнительных утилит Bash для анализа выходных данных. .
Попробуйте выполнить следующую составную команду:
npm view npm@'6.12.x' version | tail -n 1 | cut -d "'" -f2
Объяснение
Ниже приводится объяснение составных частей в вышеупомянутой составной команде:
npm view npm@'6.12.x' version
Эта часть использует команду npm view
для возврата всех версий в данном диапазоне, т. Е. 6.12.x
.
Автономный запуск этих компонентов выведет на консоль следующую информацию:
npm@6.12.0 '6.12.0'
npm@6.12.1 '6.12.1'
| tail -n 1
Ранеепоказанный результат затем передается по каналу tail
с использованием параметра -n 1
, так что печатается только последняя строка.
Запуск:
npm view npm@'6.12.x' version | tail -n 1
печать:
npm@6.12.1 '6.12.1'
| cut -d "'" -f2
Ранее шоЗатем результат передается в cut
с использованием опции -d
и указанием одинарной кавычки в качестве разделителя. Партия -f2
затем выбирает второй элемент.
Выполнение полной составной команды:
npm view npm@'6.12.x' version | tail -n 1 | cut -d "'" -f2
выводит желаемый результат:
6.12.1
Полуразделы тильды (~
) и каретки (^
).
Вы также можете указать диапазоны тильды или каретки с помощью вышеупомянутой составной команды.
Примеры:
Задание диапазона тильды:
npm view npm@'~4.0.0' version | tail -n 1 | cut -d "'" -f2
^^^^^^
отпечатков:
4.0.5
Указание диапазона каретки:
npm view npm@'^4.0.0' version | tail -n 1 | cut -d "'" -f2
^^^^^^
отпечатков:
4.6.1
Решение B: Кроссплатформенная (Windows / Linux / macOS ...)
Если вы используете Windows или хотите кроссплатформенностьРешением (т. е. успешно работающим в Windows, Linux и macOS ...) вам нужно будет использовать nodejs для выполнения ваших требований.
Рассмотрите возможность выполнения следующей составной команды:
node -e "var res = require('child_process').execSync('npm view npm@"\"6.12.x\"" version', {encoding: 'utf-8'}).split('\n').filter(Boolean); if (res.length) { if (res.length === 1) { res = res[0]; } else { res = res.pop().split(' ')[1]; } console.log(res.replace(/[']/g, '')); }"
Да, я согласен, это несколько словесноПо сравнению с Решение A :)
Пояснение
Ниже приводится объяснение составных частей в вышеупомянутой составной команде:
node -e "..."
Мы вызываем node
, а параметр командной строки nodejs -e
используется для оценки заданного встроенного JavaScript.
var res = require('child_process').execSync('npm view npm@"\"6.12.x\"" version', {encoding: 'utf-8'})
Эта часть данного скрипта node.js (JavaScript) выполняет ту же команду npm view
, что и в Решение A , т.е. npm view npm@"\"6.12.x\"" version
, с использованием execSync () .
.split('\n').filter(Boolean);
Результат команды npm view
преобразуется из строки в массив с использованием метода строки split()
- по сути, каждая строка результата разделяется символом новой строки \n
, так что каждая строкавывода становится элементом в массиве.
Часть .filter(Boolean)
удаляет пустые элементы из массива, созданные дополнительным трейлом. g пустых строк, которые печатает команда npm view
.
if (res.length) { if (res.length === 1) { res = res[0]; } else { res = res.pop().split(' ')[1]; } ... }
Здесь мы используем некоторые условные if..else
операторы, чтобы гарантировать получение нужного элемента из массива.
console.log(res.replace(/[']/g, ''));
Наконец, мы записываем результат в консоль и используем метод replace()
для удаления одинарных кавычек ('
), которые заключают в себе значение semver.
Диапазоны тильды (~) и каретки (^).
Согласно Решение A , вы также можете указать диапазоны тильды или каретки с помощью вышеупомянутой составной команды.
Примеры:
Указание диапазона тильды:
node -e "var res = require('child_process').execSync('npm view npm@"\"~4.0.0\"" version', {encoding: 'utf-8'}).split('\n').filter(Boolean); if (res.length) { if (res.length === 1) { res = res[0]; } else { res = res.pop().split(' ')[1]; } console.log(res.replace(/[']/g, '')); }"
^^^^^^
Отпечатки:
4.0.5
Указание диапазона каретки:
node -e "var res = require('child_process').execSync('npm view npm@"\"^4.0.0\"" version', {encoding: 'utf-8'}).split('\n').filter(Boolean); if (res.length) { if (res.length === 1) { res = res[0]; } else { res = res.pop().split(' ')[1]; } console.log(res.replace(/[']/g, '')); }"
^^^^^^
Отпечатки:
4.6.1