我有很多运行 17.10 的机器(实际上是虚拟机(,我想在每台机器上安装一个已知的 Node 和 npm 可执行文件。我有一个脚本,如果我在接下来的 6 个月甚至一年内运行它,我想在所有机器上获得完全相同的 Node 和 NPM 版本。
我尝试使用 apt 软件包,但随着这些软件包的更新,我在以后的安装中获得了与早期安装不同的版本。我希望它们都是相同的。
我试过这个:
NVERS=v8.9.2
sudo rm -rf node-$NVERS-linux-x64
sudo rm -f node-$NVERS-linux-x64.tar.xz
wget https://nodejs.org/dist/$NVERS/node-$NVERS-linux-x64.tar.xz
tar xvf node-$NVERS-linux-x64.tar.xz
sudo cp node-$NVERS-linux-x64/bin/node /usr/local/bin/node
sudo cp node-$NVERS-linux-x64/bin/npm /usr/local/bin/npm
节点工作正常:
node -v
v8.9.2
但是 npm 失败了:
$ npm -v
module.js:538
throw err;
^
Error: Cannot find module '../lib/utils/unsupported.js'
at Function.Module._resolveFilename (module.js:536:15)
at Function.Module._load (module.js:466:25)
at Module.require (module.js:579:17)
at require (internal/module.js:11:18)
at /usr/local/bin/npm:19:21
at Object.<anonymous> (/usr/local/bin/npm:92:3)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
npm 可执行文件实际上是指向压缩包内相对目录的软链接。
正确的方法是什么?
看起来你只复制了二进制文件,这就是你的npm
失败的原因,它实际上试图在外接的压缩包中查找其他文件。我认为更安全的方法是使用符号(软(链接(修改了代码的最后 4 行(:
NVERS=v8.9.2
sudo rm -rf node-$NVERS-linux-x64
sudo rm -f node-$NVERS-linux-x64.tar.xz
wget https://nodejs.org/dist/$NVERS/node-$NVERS-linux-x64.tar.xz
tar xvf node-$NVERS-linux-x64.tar.xz /usr/local/lib # Extracting under Root
sudo ln -s /usr/local/lib/node-$NVERS-linux-x64/bin/node /usr/local/bin/node # Symlink
sudo ln -s /usr/local/lib/node-$NVERS-linux-x64/bin/npm /usr/local/bin/npm # Symlink
在我看来,没有一种事实上的标准方法来处理 npm 安装,即使您使用 n
或 nvm
的包装器工具。我最确信的方法是像你一样自己做。