2015-02-27 16 views
6

Sto tentando di eseguire un comando npm install con uno script di preinstallazione sul mio package.json. So che è antipattern ma ho bisogno di eseguire alcuni script come root.NodeJS unsafe-perm non funziona su package.json

Sta funzionando bene aggiungendo un file .npmrc contenente unsafe-perm = true alla mia directory principale. Ma non funziona per aggiungere una proprietà di configurazione nel mio file package.json:

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

Secondo con NPM config docs è ok l'aggiunta di questa struttura nel mio file del pacchetto. Voglio capire perché non funziona.

risposta

4

Quando si aggiunge che la proprietà, si sta aggiungendo che per l'ambiente del vostro script con il prefisso 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= 
$ 

Questo è per ragioni di sicurezza, una sorta di. Non sarebbe un bene per un pacchetto arbitraria dal registro npm per consentire di cambiare npm 's impostazioni di configurazione (ad esempio, che cosa se impostato prefisso /etc e installato un file chiamato passwd)

Tuttavia è ancora possibile andare in giro impostando la variabile d'ambiente in sulla linea di edizione (con questo non funzionerà su 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 
$ 

questo può essere un bug nel npm però, quindi vi consiglio di non fare affidamento su questo comportamento. Puoi scappare usando un utente diverso da root?

Origine: Testato con [email protected] su OSX. Sono un volontario di supporto sul tracker di emissione npm, https://github.com/npm/npm/issues.

2

insicuro-perm

predefinito: false se in esecuzione come root, vero altrimenti Tipo: booleano Impostare su true per sopprimere la commutazione UID/GID durante l'esecuzione di script dei pacchetti. Se impostato su false, , l'installazione come utente non root non riuscirà a.

vedere il https://docs.npmjs.com/misc/config#unsafe-perm

+1

Ho letto quello. Il mio problema è che ho bisogno di correre con questa proprietà impostata su true come utente root. Questo è il punto della mia domanda – nanndoj

+0

Questa proprietà può essere impostata sulla [commandline] (https://docs.npmjs.com/misc/config) quando si chiama npm, anche come root: sudo npm installa --unsafe-perm true PACKAGE_NAME –

Problemi correlati