1

我在安装 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 进行了尝试。

知道还有什么可能吗?

4

2 回答 2

4

chromedriver 模块正在尝试运行一个安装脚本,该脚本会触及模块目录之外的文件。

这是 chromedriver 模块的错误。它不应该在安装时尝试触及其模块文件夹之外的任何文件。如果这是绝对必要的,它可以在运行时请求您的许可并做它需要做的事情。

为了防止令人惊讶的漏洞,npm 运行包生命周期脚本,就像nobody你运行 npm as 时一样rootnobody用户没有写入权限/Users/xxx/tmp(您选择的奇怪用户名,顺便说一句),因此安装脚本失败。

如果一个包要写入/etc/hosts或其他东西,并添加一堆钓鱼网站 IP 地址作为各种银行网站的位置怎么办?如果你下载一个命令,然后运行它,它做了一些坏事,好吧,你搞砸了并且信任了错误的程序。但是,如果简单地安装程序会做一些这样的坏事,那么 npm 已经违反了您的信任,我尽量不让这种情况发生。

您可能会争辩说您已明确要求下载该程序,但由于具有小依赖关系的信任网络可能会变得非常广泛,所以我晚上睡不好觉有点太危险了,所以这就是 npm 有这个规则的原因。

于 2013-08-26T16:23:57.653 回答
2

问题可能与使用有关sudo,该模块是本地模块,因此您应该能够在不使用 sudo 的情况下安装它。

下载 chromedriver 可执行文件后,安装程序会尝试修复下载文件的权限,这可能会导致此问题。

进一步阅读 sudo 与否:http ://howtonode.org/introduction-to-npm

于 2013-08-25T16:20:01.700 回答