NPMのインストールが「wdで実行できません」で失敗しました


153

ノード0.8.14が既にインストールされている新しいUbuntu 12.04インスタンスでノード環境をセットアップしようとしていますが、実行しようとすると問題が発生しましたnpm install。したがって、をnpm install実行すると、ルートまたは管理者として実行する必要があると表示されます。

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

しかし、それをsudoとして実行しようとすると、次のようになります。

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

私のpackage.jsonには、次のスクリプトが含まれています。

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

自分のマシン(Mac)にインストールしてから、残りの依存関係は有効です。これがなぜ起こっているのか、誰か手がかりはありますか?

回答:


231

ドキュメントは(も言うここに):

npmがroot権限で呼び出された場合、それはuidをユーザーアカウントまたはuserconfigで指定されたuidに変更しますnobody。デフォルトはです。unsafe-permroot権限でスクリプトを実行するためのフラグを設定します。

オプションは次のとおりです。

  1. フラグをnpm install付けて実行します--unsafe-perm

    [sudo] npm install --unsafe-perm
  2. unsafe-permフラグを追加しますpackage.json

    "config": {
        "unsafe-perm":true
    }
    
  3. preinstallスクリプトを使用してグローバルモジュールをインストールせnpm installず、個別にインストールしてから、root権限なしで通常のモジュールを実行します。

    sudo npm install -g coffee-script node-gyp
    npm install
    

関連


2
申し訳ありませんが、今までこれを見ていませんでした。以前「unsafe-perm」を試しましたが、うまくいきませんでした。問題はまだ存在しています
EH

10
私にとってはこの作品:sudo npm install --unsafe-permしかし、sudo npm install私は追加が、ない"unsafe-perm":truepackage.jsonに...わからない理由
ドミトリーPashkevich

8
これをpackage.jsonの「config」プロパティに追加すると、実際には「npm_package_config_unsafe_perm」が設定されるため、オプション2は機能しません。参照:stackoverflow.com/questions/28763958/...
justmoon

'unsafe-perm':私にとってもtrueは失敗しました。残念なことに、エラーメッセージでエラーとコンテキスト(そのuidの変更を含む)を提供せず、原因を存在からだまし、何か謎めいた、驚くべき、そして敵対的なものを提供しました。
android.weasel 2018

一方でnpm install --unsafe-perm私のために働き、私はデフォルトの変更についての含意を追跡しようとしたuser設定を。だから私はやったnpm set user my_usernpm set group my_group、rootユーザーの中に対応するエントリが追加されている.npmrcファイル。しかし問題は、node_modulesフォルダー自体とそのサブフォルダーが依然としてrootによって所有されているため、役に立ちません。それらがrootに所有されないようにする方法を理解できませんでした。
fulv

53

私のために働いた唯一のものは、以下.npmrcを含むファイルを追加することでした:

unsafe-perm = true

同じ設定を追加しpackage.jsonても効果はありませんでした。


36
港湾労働者:RUN npm set unsafe-perm true
アレクサンダーミルズ

WSLを使用している場合は、set unsafe-perm trueと入力します。これが役立ちます
Stas Panyukov

26

rootユーザーを使用してCentOを実行しているプラ​​イベートサーバーでnodejsアプリを公開しようとすると、同じ問題が発生しました。同じエラーが "postinstall"でも発生します。package.jsonファイルの "./node_modules/bower/bin/bower install"なので、両方のオプションを使用してエラーを回避するのが唯一の解決策です。

1:bower installコマンドに--allow-rootオプションを使用する

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2:npm installコマンドに--unsafe-permオプションを使用する

npm install --unsafe-perm

12

ここでOP、私は最初にこの質問をして以来、ノードについて多くを学びました。Dmitryの回答は非常に役に立ちましたが、最終的に私にとって何ができたかは、正しい権限でノードをインストールすることです。

ノードをパッケージマネージャーを使用してインストールするのではなく、通常の権限でローカルディレクトリに常駐するように自分でコンパイルすることを強くお勧めします。

この記事では、その方法について、非常に明確な手順を追って説明します。

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04


2

私は、所有権の変更によってこれを固定/usr/localし、~/Users/user-nameそのように:

sudo chown -R my_name /usr/local

これにより、 sudo

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.