10

npm installでプレインストール スクリプトを使用してコマンドを実行しようとしていpackage.jsonます。アンチパターンであることはわかっていますが、いくつかのスクリプトをルートとして実行する必要があります。

.npmrcを含むファイルをunsafe-perm = trueルート ディレクトリに追加することで、正常に動作しています。しかし、私のファイルに構成プロパティを追加しても機能しませんpackage.json:

   {
     "name": "foo",
     "version": "1.4.4",
     "config": {
        "unsafe-perm":true
     },
     "scripts" :  { 
        "preinstall" : "npm install -g bower"
     }
   }
   // It is not working

NPM 構成ドキュメントによると、このプロパティをパッケージ ファイルに追加しても問題ありません。うまくいかない理由を理解したい。

4

2 に答える 2

5

そのプロパティを追加すると、スクリプトの環境に次のプレフィックスを付けて追加されますnpm_config_package

$ cat package.json
{
 "config": { "unsafe-perm": true }
}
$ npm run env | grep perm
$ npm run env | grep perm
npm_package_config_unsafe_perm=true
npm_config_unsafe_perm=true
$ sudo npm run env | grep perm
npm_package_config_unsafe_perm=true
npm_config_unsafe_perm=
$

これは、セキュリティ上の理由によるものです。レジストリの任意のパッケージでの構成設定npmを変更できるようにするのは良くありません (たとえば、プレフィックスを に設定し、 という名前のファイルをインストールするとnpmどうなるでしょうか) 。/etcpasswd

ただし、スクリプト行で環境変数を設定することで回避できます (これは Windows では機能しません)。

$ cat package.json 
{
  "config": { "unsafe-perm": true },
  "scripts": { "foo": "npm_config_unsafe_perm=true env" }
 }
$ npm run foo | grep unsafe_perm
npm_config_unsafe_perm=true
npm_package_config_unsafe_perm=true
npm_lifecycle_script=npm_config_unsafe_perm=true env
npm_package_scripts_foo=npm_config_unsafe_perm=true env
$ sudo npm run foo | grep unsafe_perm
npm_config_unsafe_perm=true
npm_package_config_unsafe_perm=true
npm_lifecycle_script=npm_config_unsafe_perm=true env
npm_package_scripts_foo=npm_config_unsafe_perm=true env
$ 

ただし、これはバグである可能性があるnpmため、この動作に依存しないことをお勧めします。とは別のユーザーを使用して問題を解決できますrootか?

npm@2.6.1出典: OSXでテスト済み。私はnpm課題トラッカーhttps://github.com/npm/npm/issuesのサポート ボランティアです。

于 2015-02-28T22:57:33.747 に答える
2

アンセーフパーマ

デフォルト: root として実行する場合は false、それ以外の場合は true 型: ブール値 true に設定すると、パッケージ スクリプトの実行時に UID/GID の切り替えが抑制されます。明示的に false に設定すると、root 以外のユーザーとしてのインストールは失敗します。

https://docs.npmjs.com/misc/config#unsafe-permを参照してください

于 2015-02-27T13:50:24.587 に答える