更改 NPM 版本以进行测试的工具 - 通过将不同版本符号链接到全局空间
Posted
技术标签:
【中文标题】更改 NPM 版本以进行测试的工具 - 通过将不同版本符号链接到全局空间【英文标题】:Tool to change NPM version for testing - by symlinking different versions to global space 【发布时间】:2018-12-01 05:38:32 【问题描述】:NVM 是一个很棒的工具,可以让我们随意更改 Node 版本。我正在尝试开发一些好的东西,允许用户在发布之前随意更改 NPM 版本,主要是为了测试库代码。
所以我正在研究“@oresoftware/npm.version”,它有一个名为 npmv 的可执行文件,它将更改 $PATH 中的当前 npm 版本。
用户运行:
npmv use 5.3
如果未安装 5.3,它会将其安装到用户 home 的目录中,然后将该版本符号链接到全局空间。
这是我所拥有的:
#!/usr/bin/env bash
set -e;
desired_npm_version="$1"
if [ -z "$desired_npm_version" ]; then
echo >&2 "No desired npm version provided.";
exit 1;
fi
desired_v="$npmvv/$desired_npm_version"
if [ ! -d "$desired_v" ]; then
mkdir -p "$desired_v";
cd "$desired_v";
npm init -f --silent;
npm install "npm@$desired_npm_version" -f --silent
fi
cd "$npmvv/$desired_npm_version";
npm_root="$(npm root -g)";
npm_bin="$(npm bin -g)";
rm -rf "$npm_root/npm";
rm -rf "$npm_bin/npm";
rm -rf "$npm_bin/npx";
ln -sf node_modules/npm "$npm_root"
ln -sf node_modules/.bin/npm "$npm_bin/npm"
ln -sf node_modules/.bin/npx "$npm_bin/npx"
# end
不要运行它,因为它可能会破坏你的 NPM 安装。 我不知道为什么它不起作用,但至少它不能很好地与 NVM(节点版本管理器)配合使用。
请注意,NPM 仅附带两个可执行文件(npm、npx)。
如果您知道自己在做什么并且看到脚本中可能缺少的内容,请告诉我。我能想到的唯一一件事是,也许对本身就是符号链接的符号运行 ln -s <source-file> <target-link>
不起作用?
【问题讨论】:
【参考方案1】:我现在有一些非常好用的东西,只是使用符号链接。需要注意的一件重要事情是不保证 npm 节点兼容性。许多 npm 版本与旧节点版本或新节点版本不兼容。
https://github.com/ORESoftware/npm.version
主要思想是,我们在用户主页安装新需要的 NPM 版本,然后使用符号链接符号链接到该 NPM 版本:
npm_bin="$(npm bin -g)"
npm_root="$(npm root -g)"
cd "$HOME/.npmv_stash/versions/6.1.0";
ln -s "$PWD/node_modules/npm" "$npm_root/npm";
npm_source="$(readlink -f "$PWD/node_modules/.bin/npm")";
npx_source="$(readlink -f "$PWD/node_modules/.bin/npx")";
ln -sf "$npm_source" "$npm_bin/npm"
ln -sf "$npx_source" "$npm_bin/npx"
【讨论】:
或者只使用nvm工具的参数,在这里查看最新更新***.com/a/33575448/823282以上是关于更改 NPM 版本以进行测试的工具 - 通过将不同版本符号链接到全局空间的主要内容,如果未能解决你的问题,请参考以下文章
通过 npm 节点自动化 Git 提交 + 版本控制 + 标记