【问题标题】:npm installing itself without dependanciesnpm 自行安装,不依赖
【发布时间】:2015-12-15 03:34:41
【问题描述】:

我正在尝试按照the npm doc site 上的说明安装最新的 npm。

我的问题是使用命令:

npm install -g npm

获取最新版本的 NPM 似乎不起作用:它似乎没有安装任何所需的依赖项,所以当我运行它时,我收到如下错误:

module.js:340
    throw err;
          ^
Error: Cannot find module 'are-we-there-yet'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/harmic/.node_modules/lib/node_modules/npm/node_modules/npmlog/log.js:2:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

我使用的是 Centos 6 机器,所以我首先从 EPEL 安装 node + npm,如下所示:

yum install nodejs npm

一切顺利。然后我按照上面链接和我见过的许多其他页面的建议安装了最新的 npm。我的第一次尝试

sudo npm install -g npm

不是很好,有两个原因:

  1. 它安装在 /usr/lib/node_modules 中,位于原始 RPM 安装的顶部。我认为这是非常糟糕的做法,因为下次我在系统上执行yum update 时,新安装的文件很有可能会被包含的任何传入 RPM 包覆盖,从而造成一团糟。

    李>
  2. 无论如何它都不起作用:我根本无法启动 npm,它不断抱怨如上所述缺少依赖项。

所以我卸载了 RPM,删除了所有剩余的文件,然后再次重新安装了 RPM。这次我创建了一个~/.npmrc 文件并将其放入其中:

prefix = ${HOME}/.node_modules

我还设置了 NODE_PATH 环境变量以包含该路径。在此之后,npm 确实将自己安装在我想要的位置,但没有安装任何依赖项:

$ npm install -g npm
npm http GET https://registry.npmjs.org/npm
npm http 304 https://registry.npmjs.org/npm
/home/harmic/.node_modules/bin/npm -> /home/harmic/.node_modules/lib/node_modules/npm/bin/npm-cli.js
npm@3.3.3 /home/harmic/.node_modules/lib/node_modules/npm

从新安装的路径运行它会在页面顶部出现错误。

尽管我认为我一定是做错了什么,但我还是开始尝试安装未满足的依赖项,一次一个:

npm install -g are-we-there-yet
npm install -g gauge
npm install -g os-tmpdir
npm install -g os-homedir
npm install -g is-absolute
npm install -g asap
npm install -g path-is-absolute
npm install -g builtins
npm install -g validate-npm-package-license
npm install -g concat-stream
npm install -g json-parse-helpfulerror
npm install -g readdir-scoped-modules
npm install -g debuglog
npm install -g lodash._baseclone
npm install -g lodash._bindcallback
npm install -g lodash._baseflatten
npm install -g lodash._baseuniq
...

它仍然抱怨需要更多。

最后我得出结论,我一定错过了一些重要的事情,所以我决定向 SO 社区寻求帮助......

最初安装的 node 和 npm RPM 版本是:

  • nodejs-0.10.36-3.el6
  • npm-1.3.6-5.el6

哦,如果您想知道,我首先尝试更新 npm 的原因是因为在尝试安装 this package 时遇到了构建错误,解决方案显然是安装更新的 npm .

【问题讨论】:

    标签: node.js npm centos6


    【解决方案1】:

    首先,我建议您忘记使用 RPM/APT 等安装节点,原因是它们通常具有过时的版本。事实上 0.10 已经很老了,0.12 已经快一年了,现在已经有了 4.1。所以我的建议是使用nvmhttps://github.com/creationix/nvm

    nvm 是一个节点版本管理器。很酷的想法是您可以使用单个命令切换版本并始终保持更新。安装好想要的node版本后,还可以升级npm。

    您甚至可以为系统中的某个文件夹选择节点版本(例如,如果您的代码仅在旧版本中运行)

    【讨论】:

    • 对于我的开发环境来说,避免 RPM 可能没问题,但在部署方面就不可行了。我不能指望系统管理员学习和管理多个包管理系统、版本管理器等。但我至少会为我的开发环境检查 nvm。
    • 但是此时,在服务器上会出现升级非RPM提供的版本的问题,他们可以编译;)
    • 使用 nvm 比尝试 apt/rpm 更容易。
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多