以前、このマシンに phantomjs をインストールしていましたが、実行可能ファイルが見つかりません。だから私はそれをアンインストールしました(npm uninstall phantomjs
、npm uninstall phantomjs-prebuild
)。
しかし、それをインストールすることはできません。誰かがなぜ/どのようにそれを修正するのか教えてもらえますか?
$ Sudo -H npm -g install phantomjs-prebuilt
/usr/bin/phantomjs -> /usr/lib/node_modules/phantomjs-prebuilt/bin/phantomjs
> [email protected] install /usr/lib/node_modules/phantomjs-prebuilt
> node install.js
Considering PhantomJS found at /usr/bin/phantomjs
Looks like an `npm install -g`
Could not link global install, skipping...
Downloading https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
Saving to /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
Receiving...
[=======================================-] 98%
Received 22866K total.
Extracting tar contents (via spawned process)
Removing /usr/lib/node_modules/phantomjs-prebuilt/lib/phantom
Copying extracted folder /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1505979849548/phantomjs-2.1.1-linux-x86_64 -> /usr/lib/node_modules/phantomjs-prebuilt/lib/phantom
Phantom installation failed { Error: EACCES: permission denied, link '/tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1505979849548/phantomjs-2.1.1-linux-x86_64' -> '/usr/lib/node_modules/phantomjs-prebuilt/lib/phantom'
at Error (native)
errno: -13,
code: 'EACCES',
syscall: 'link',
path: '/tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1505979849548/phantomjs-2.1.1-linux-x86_64',
dest: '/usr/lib/node_modules/phantomjs-prebuilt/lib/phantom' } Error: EACCES: permission denied, link '/tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1505979849548/phantomjs-2.1.1-linux-x86_64' -> '/usr/lib/node_modules/phantomjs-prebuilt/lib/phantom'
at Error (native)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2017-09-21T07_44_13_695Z-debug.log
ログは以下を提供します:
2467 silly install [email protected]
2468 info lifecycle [email protected]~install: [email protected]
2469 verbose lifecycle [email protected]~install: unsafe-perm in lifecycle false
2470 verbose lifecycle [email protected]~install: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/usr/lib/node_modules/phantomjs-prebuilt/node_modules/.bin:/usr/lib/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
2471 verbose lifecycle [email protected]~install: CWD: /usr/lib/node_modules/phantomjs-prebuilt
2472 silly lifecycle [email protected]~install: Args: [ '-c', 'node install.js' ]
2473 silly lifecycle [email protected]~install: Returned: code: 1 signal: null
2474 info lifecycle [email protected]~install: Failed to exec install script
2475 verbose unlock done using /root/.npm/_locks/staging-a072192f34a17023.lock for /usr/lib/node_modules/.staging
2476 verbose stack Error: [email protected] install: `node install.js`
2476 verbose stack Exit status 1
2476 verbose stack at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:280:16)
2476 verbose stack at emitTwo (events.js:106:13)
2476 verbose stack at EventEmitter.emit (events.js:191:7)
2476 verbose stack at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
2476 verbose stack at emitTwo (events.js:106:13)
2476 verbose stack at ChildProcess.emit (events.js:191:7)
2476 verbose stack at maybeClose (internal/child_process.js:891:16)
2476 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
2477 verbose pkgid [email protected]
2478 verbose cwd /tmp
2479 verbose Linux 4.10.0-33-generic
2480 verbose argv "/usr/bin/nodejs" "/usr/bin/npm" "-g" "install" "phantomjs-prebuilt"
2481 verbose node v6.11.2
2482 verbose npm v5.4.2
2483 error code ELIFECYCLE
2484 error errno 1
2485 error [email protected] install: `node install.js`
2485 error Exit status 1
2486 error Failed at the [email protected] install script.
2486 error This is probably not a problem with npm. There is likely additional logging output above.
2487 verbose exit [ 1, true ]
これに答えるのは少し遅すぎますが、それでも私はそれを続けます。
私はこれを行うことによってそれを機能させました
Sudo npm install -g [email protected] --unsafe-perm
コメントを確認してください ここ
簡単な修正:
# Install locally (in my case: ~/node_modules)
$ npm install phantomjs-prebuilt
# Add to path
$ cd ~/bin
~/bin$ ln -s ../node_modules/phantomjs-prebuilt/bin/phantomjs
# Check if it worked
$ phantomjs --version
2.1.1
私もこの間違いを犯し、2つの解決策を見つけました。
npm設定変更によりこれを修正
npm config list --json | grep "user\|unsafe-perm"
)npm config set user 0
パッケージスクリプトをルートとして実行するときに設定するUID。npm config set unsafe-perm true
パッケージスクリプトの実行時にUID/GIDの切り替えを抑制するには、trueに設定します。明示的にfalseに設定すると、非rootユーザーとしてのインストールは失敗します。npmjs.comは、このエラーについて、この article で説明されているnpmバージョンマネージャに切り替えることを推奨しています。
Laravel Homestead 内でnpm ci
を実行しようとしたときに、このエラーに遭遇しました。
私にとって、SSL検証をオフにすることで問題は解決しました:
npm set strict-ssl false
docs によると、これはSSLキーの検証をスキップするようにNPMに指示します。これは、暗号化されたトラフィックを傍受するために自己署名SSL証明書を持つプロキシが使用される可能性がある企業環境で必要になる場合があります。
私の場合、他のSSLの問題を一度も経験したことがないので、プロキシはないと確信しています。これはおそらく、仮想マシン内でnpm
を実行することによる奇妙な副作用にすぎません。