npm安装自己没有依赖

时间:2015-09-18 05:12:08

标签: node.js npm centos6

我正按照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,它经常抱怨如上所述缺少依赖性。

  3. 所以我卸载了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&amp; amp; npm RPMs是:

    • 的NodeJS-0.10.36-3.el6
    • NPM-1.3.6-5.el6

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

1 个答案:

答案 0 :(得分:2)

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

nvm是节点版本管理器。很酷的想法是你可以用一个命令切换版本并保持不断更新。安装所需的节点版本后,还可以升级npm。

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