工具来改变NPM版本进行测试 - 通过符号链接不同版本的全球空间(Tool to change NP

2019-09-25 20:36发布

NVM是一个伟大的工具,使我们能够随意更改节点版本。 我想发展好东西,这将允许用户更改NPM版本随意,主要用于测试库代码的目的,发布之前。

所以,我的工作“@ oresoftware / npm.version”,其中有一个可执行文件,称为npmv将在$ PATH改变了当前的NPM版本。

用户运行:

npmv use 5.3

如果没有安装5.3后,将其安装到与用户主目录,然后将符号链接该版本全球空间。

以下是我有:

#!/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>针对这本身就是一个符号,不能正常工作?

Answer 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" 


文章来源: Tool to change NPM version for testing - by symlinking different versions to global space
标签: node.js npm