我在安装Chrome浏览器Dalek JS模块时遇到问题。
以下是控制台输出的摘录:
npm http 304 https://registry.npmjs.org/abbrev
> dalek-browser-chrome@0.0.2 install /Users/xxx/Sites/tests/node_modules/dalek-browser-chrome
> node install.js
Chromedriver installation failed Error: EACCES, permission denied '/Users/xxx/tmp/chromedriver'
at Object.fs.unlinkSync (fs.js:582:18)
at rimrafSync (/Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/node_modules/rimraf/rimraf.js:154:8)
at Promise._successFn (/Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/install.js:176:7)
at Promise._withInput (/Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/node_modules/kew/kew.js:204:25)
at Promise._chainPromise (/Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/node_modules/kew/kew.js:244:13)
at Promise.then (/Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/node_modules/kew/kew.js:144:13)
at /Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/install.js:175:23
at loadCbs.length (/Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/node_modules/npmconf/npmconf.js:76:7)
at Array.forEach (native)
at /Users/xxx/Sites/tests/node_modules/dalek-browser-chrome/node_modules/npmconf/npmconf.js:75:13
npm ERR! dalek-browser-chrome@0.0.2 install: `node install.js`
npm ERR! `sh "-c" "node install.js"` failed with 1
npm ERR!
npm ERR! Failed at the dalek-browser-chrome@0.0.2 install script.
npm ERR! This is most likely a problem with the dalek-browser-chrome package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node install.js
npm ERR! You can get their info via:
npm ERR! npm owner ls dalek-browser-chrome
npm ERR! There is likely additional logging output above.
npm ERR! System Darwin 12.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "dalek-browser-chrome" "--save-dev"
npm ERR! cwd /Users/xxx/Sites/tests
npm ERR! node -v v0.8.15
npm ERR! npm -v 1.1.66
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/xxx/Sites/tests/npm-debug.log
npm ERR! not ok code 0
我正在运行Mac OS X 10.8.4。它看起来像一个权限问题,但我按如下方式运行安装:
sudo npm install dalek-browser-chrome --save-dev
我确实在没有sudo的情况下尝试运行它 - 但是得到了以下内容:
── ncp@0.4.2
├── kew@0.1.7
├── q@0.9.6
├── adm-zip@0.4.3
├── rimraf@2.2.2 (graceful-fs@2.0.0)
└── npmconf@0.1.2 (once@1.1.1, inherits@2.0.1, osenv@0.0.3, ini@1.1.0, mkdirp@0.3.5, semver@2.1.0, nopt@2.1.2, config-chain@1.1.7)
npm ERR! Error: EACCES, open '/Users/xxx/Sites/tests/package.json'
npm ERR! { [Error: EACCES, open '/Users/xxx/Sites/tests/package.json']
npm ERR! errno: 3,
npm ERR! code: 'EACCES',
npm ERR! path: '/Users/xxx/Sites/tests/package.json' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! System Darwin 12.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "dalek-browser-chrome" "--save-dev"
npm ERR! cwd /Users/xxx/Sites/tests
npm ERR! node -v v0.8.15
npm ERR! npm -v 1.1.66
npm ERR! path /Users/xxx/Sites/tests/package.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/xxx/Sites/tests/package.json'
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/xxx/Sites/tests/npm-debug.log
npm ERR! not ok code 0
基于此,我尝试用Sudo。
知道它可能是什么吗?
答案 0 :(得分:4)
chromedriver模块正在尝试运行一个安装脚本,该脚本触及模块目录之外的文件。
这是chromedriver模块的一个错误。它不应该在安装时尝试触摸其模块文件夹之外的任何文件。如果这是绝对必要的,它可以在运行时请求您的许可并执行它需要做的事情。
为了防止出现令人惊讶的漏洞,当您以nobody
运行npm时,npm将包生命周期脚本作为root
运行。 nobody
用户无权写入/Users/xxx/tmp
(您选择的奇怪用户名,顺便说一句),因此安装脚本失败。
如果软件包要写入/etc/hosts
或其他内容,并添加一堆网络钓鱼网站IP地址作为各种银行网站的位置,该怎么办?如果您下载命令,然后运行它,它会做一些不好的事情,好吧,你搞砸了并且信任了错误的程序。但是如果只是简单地安装程序会做一些像这样的坏事,那么npm就会侵犯你的信任,我尽量不让这种情况发生。
你可能会争辩说你已明确要求下载该程序,但由于具有小依赖关系的信任网络可以变得非常广泛,所以对我来说睡眠很有点太危险,所以这就是为什么npm有这个规则。
答案 1 :(得分:2)
问题可能与使用sudo
有关,
该模块是本地模块,因此您应该能够在不使用sudo的情况下安装它。
下载chromedriver可执行文件后,安装程序会尝试修复下载文件的权限,这可能会导致此问题。
进一步阅读sudo与否:http://howtonode.org/introduction-to-npm