更改 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 提交 + 版本控制 + 标记

npm管理工具介绍

仅当 tfs build 中的版本更改时 npm publish

Jenkins Xcode 构建参数以更改应用程序名称

node你不得不知道的一些事

node你不得不知道的一些事