1

对于 Node.js 世界,我们可以使用 NVM 在 Node.js 版本之间切换,也可以切换出哪些全局包在范围内(在 $PATH 中)。

但是,如果我想确保在命令行中使用 typescript 版本 3.3.334 怎么办?显然,我可以将该版本的 typescript 安装到我的本地项目中,但是如果我想避免本地依赖,我如何使用 shell 程序在命令行中使用精确版本的 typescript?

我在想这样的事情:

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
4

2 回答 2

1

鉴于 npm 与 npx 捆绑在一起,您可能只想使用 npx 运行 TypeScript 并指定所需的版本号,例如:

$ npx typescript@3.3.334

这将下载typescript所需版本的包并运行它(然后将其丢弃)。唯一的缺点是每次运行 npx 时都会一遍又一遍地重新安装该软件包。

您可以通过在本地安装来解决此问题typescript:如果已在本地安装,则正在使用此本地副本,这可以加快速度,但一般来说,这是确保每次调用都能获得所需版本的最简单方法(与通过全局安装相反npm -g typescript@3.3.334,它可能会被其他人覆盖而您甚至没有注意到。

但是,这是您明确提到要避免的。因此,上述方式可能是您的最佳选择。

于 2019-04-10T18:19:07.050 回答
0

我可能最终会编写一些 shell 脚本或 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

你所要做的就是为包和版本提供一些参数。这种技术也应该适用于编译/本机代码包,我不认为有问题。

于 2019-04-10T21:00:10.610 回答