我有很多机器(实际上是VM)运行17.10并且我想在每个机器上安装一个已知的Node和npm可执行文件。我有一个脚本,如果我在接下来的6个月甚至一年内运行它,我想在所有机器上获得完全相同的Node和NPM版本。
我尝试使用apt软件包,但随着这些软件包的更新,我在以后的安装中获得了与早期安装不同的版本。我希望他们都一模一样。
我试过了:
node -v
v8.9.2
节点工作正常:
$ 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失败了:
adb
npm可执行文件实际上是指向tarball内部相对目录的软链接。
这样做的正确方法是什么?
答案 0 :(得分:0)
看起来你只复制二进制文件,这就是你的npm
失败的原因,它实际上试图寻找引用的tarball中的其他文件。我认为更安全的方法是使用符号(软)链接(修改代码的最后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
在我看来,即使您使用n
或nvm
中的包装工具,也没有一种事实上的标准方法可以使用npm安装。我最有说服力的方法就是像你一样自己做。