Я написал скрипт, который обновляет зависимости проекта (только миноры и патчи).Я хотел автоматизировать процесс обновления, так как все версии точны, и, насколько я знаю, нет никакого способа намекнуть npm update
, что я хочу поднять все, независимо от того.
Одним словом, требуется выводработает npm outdated
, создает список пакетов в соответствии с критериями и передает его в npm install
в самом конце.Все работает так, как задумано, однако мне было интересно, можно ли написать его более кратко, например, без создания временного текстового файла?Я также ищу некоторые общие отзывы.
PS Я только начинаю со сценариев bash, поэтому, пожалуйста, избавьте меня: D Ваш совет очень ценится!
Вот примервывод npm outdated
:
Package Current Wanted Latest Location
@commitlint/cli 7.5.0 ..... 8.0.0 .....
@commitlint/config-conventional 7.5.0 ..... 8.0.0 .....
eslint 5.13.0 ..... 6.0.1 .....
eslint-plugin-jsx-a11y 6.2.0 ..... 6.2.3 .....
eslint-plugin-react 7.12.4 ..... 7.14.2 .....
eslint-plugin-react-hooks 1.6.0 ..... 1.6.1 .....
Вот код:
# Temporary file to hold output of `npm outdated` command
OUTPUT=updates.log
PACKAGES_TO_UPDATE=()
function get_major_version { echo $(echo $1 | grep -o -E '^[0-9]{1,2}'); }
# /1079371/kak-ya-mogu-obedinit-elementy-massiva-v-bash
function join_by { local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}"; }
# Redirect output once.
{
npm outdated
} > $OUTPUT
wait
{
# Skip first line as it contains column headers.
read
while read package current wanted latest location
do
# Filter out major updates.
if [ "$(get_major_version $current)" = "$(get_major_version $latest)" ]; then
PACKAGES_TO_UPDATE+=("${package}@latest")
fi
done
} < $OUTPUT
npm install "${PACKAGES_TO_UPDATE[@]}"
rm $OUTPUT