我想在 MacOSX 上安装这样的软件包,但也对 Windows 或 Linux 版本感兴趣:
npm install express
npm install swig
npm install mongodb
npm install consolidate
npm install http-auth
如果我不使用 sudo 调用 npm,其中一些将会失败:
Error: EACCES, open '/Users/me/.npm/cookie/0.1.2/package.tgz'
npm ERR! { [Error: EACCES, open '/Users/me/.npm/cookie/0.1.2/package.tgz']
npm ERR! errno: 3,
npm ERR! code: 'EACCES',
npm ERR! path: '/Users/me/.npm/cookie/0.1.2/package.tgz',
npm ERR! parent: 'express' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator
如果我使用 sudo 安装,文件最终会位于我当前目录下,并在 node_modules 下。
如果我使用 -g 命令,就会遇到访问问题。
如果我将 -g 与 sudo 一起使用,它会安装,但节点应用程序无法找到软件包:
module.js:340
throw err;
^
Error: Cannot find module 'express'
我是否遗漏了重要的东西?安装这些软件包的正确方法是什么?(有人告诉我,应该首选全局安装,以便所有应用程序始终链接到最新的软件包版本,因此如果有任何不同,请告诉我)
答案1
Node.js 将向上遍历文件夹,直到找到您的包,因此您可以在主文件夹中安装所有内容:
cd ~
npm install express
答案2
从npm help 5 npm-folders
手册页中:
本地安装(默认):
将内容放入./node_modules
当前包根目录中。全局安装(带有
-g
):
将内容放入/usr/local
或安装节点的任何位置。如果要使用
require()
它,请在本地安装它。如果您要在命令行上运行它,请全局安装它。
如果两者都需要,则在两个地方安装,或者使用 npm link。
我唯一一次使用sudo
安装是nw
因为我希望它链接到/usr/bin
。在调用之后,sudo
我遇到了类似的错误,因为root
拥有我的~/.npm/_locks
目录。
每次install
遇到错误,直到我chown
~/.npm
返回~/.npm/_locks
给我的用户。
按照手册页的说明进行操作并~/.npm
每次进行检查sudo
。