Хороший способ установить точную зависимость глобально
В мире Node.js мы можем использовать NVM для переключения между версиями Node.js, а также для переключения глобальных пакетов в область действия (в $PATH).
Однако что, если я хочу убедиться, что я использую машинописную версию 3.3.334 в командной строке? Очевидно, что я мог бы установить эту версию машинописи в свой локальный проект, но если я хотел избежать локальной зависимости, как я могу использовать программу оболочки, чтобы использовать точную версию машинописи в командной строке?
Я думаю что-то вроде этого:
package="typescript@3.3.334"
dir="$HOME/.temp/$package";
if [ ! -d "$dir" ]; then
mkdir -p "$dir"
(cd "$dir" && npm i "$package")
fi
export PATH="$dir/node_modules/.bin:$PATH"
do_the_original_thing_you_wanted_to_do foo bar
2 ответа
Учитывая, что npm поставляется с npx в комплекте, вы можете просто запустить TypeScript с npx и указать желаемый номер версии, например:
$ npx typescript@3.3.334
Это загрузит typescript
упакуйте в нужную версию и запустите (и затем выбросьте). Единственным недостатком этого является то, что пакет будет переустанавливаться снова и снова, каждый раз, когда вы запускаете npx.
Вы можете обойти это, установив typescript
локально: если он уже установлен локально, эта локальная копия используется, что ускоряет работу, но, вообще говоря, это самый простой способ убедиться, что при каждом вызове вы получаете ожидаемую версию (в отличие от глобальной установки через npm -g typescript@3.3.334
, который может быть перезаписан кем-то другим, даже если вы этого не заметите.
Тем не менее, это то, что вы прямо упомянули, что вы хотите избежать этого. Таким образом, описанный выше способ может стать лучшим выбором для вас.
Я, вероятно, в конечном итоге напишу какой-нибудь сценарий оболочки или функцию bash для простого переключения версий глобальных инструментов cli, это работает:
#!/usr/bin/env bash
package="typescript"
version="3.4.1"
dir="$HOME/.npz_temp/$package/$version";
json='{"name":"foo"}'
if [[ ! -f "$dir/success.json" ]]; then
mkdir -p "$dir"
(
cd "$dir" &&
echo "$json" > "$dir/package.json" &&
npm install "$package@$version" &&
echo 'npm install success' > "$dir/success.json"
)
fi
export PATH="$dir/node_modules/.bin:$PATH"
tsc --version
все, что вам нужно сделать, чтобы генерировать его - это иметь аргументы для пакета и версии. эта техника должна работать и с пакетами скомпилированного / нативного кода, я не предвижу проблем с этим.