2015-02-27 11 views
6

पर काम नहीं कर रहे NodeJS unsafe-perm मेरे package.json पर एक प्रीइंस्टॉल स्क्रिप्ट के साथ npm install कमांड चलाने की कोशिश कर रहा हूं। मुझे पता है कि यह antipattern है, लेकिन मुझे रूट के रूप में कुछ स्क्रिप्ट चलाने की जरूरत है।पैकेज.जेसन

यह मेरी रूट निर्देशिका में unsafe-perm = true युक्त .npmrc फ़ाइल जोड़कर ठीक काम कर रहा है। लेकिन यह द्वारा काम नहीं कर रहा मेरी package.json फ़ाइल में एक config संपत्ति जोड़ें:

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

NPM config docs साथ अनुसार यह मेरे पैकेज फ़ाइल में इस संपत्ति जोड़ने ठीक है। मैं समझना चाहता हूं कि यह क्यों काम नहीं कर रहा है।

उत्तर

4

देखते हैं, आप उपसर्ग 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 के config सेटिंग्स (जैसे, क्या हुआ अगर यह /etc को उपसर्ग सेट और passwd नाम की एक फ़ाइल स्थापित)

हालांकि आप अभी भी चारों ओर प्राप्त कर सकते हैं यह अपनी स्क्रिप्ट लाइन पर में वातावरण चर सेट करके (यह विंडोज पर काम नहीं करेगा):

$ 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 से भिन्न उपयोगकर्ता का उपयोग कर दूर हो सकते हैं?

स्रोत: ओएसएक्स पर [email protected] के साथ परीक्षण किया गया। मैं npm अंक ट्रैकर, https://github.com/npm/npm/issues पर एक सहायक स्वयंसेवक हूं।

2

असुरक्षित-पर्म

डिफ़ॉल्ट: जब पैकेज स्क्रिप्ट चला यूआईडी/GID स्विचिंग को दबाने के लिए बूलियन सही पर सेट किया: अगर रूट के रूप में चल रहा है झूठे, सच अन्यथा प्रकार। यदि स्पष्ट रूप से गलत पर सेट किया गया है, फिर गैर-रूट उपयोगकर्ता के रूप में स्थापित करने से विफल हो जाएगा। जब आप यह है कि संपत्ति जोड़ने

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

+1

मैंने इसे पढ़ लिया है। मेरी समस्या यह है कि मुझे इस संपत्ति के साथ रूट उपयोगकर्ता के रूप में सत्य पर चलाने की आवश्यकता है। यह मेरे प्रश्न का बिंदु – nanndoj

+0

यह गुण [कमांडलाइन] (https://docs.npmjs.com/misc/config) पर सेट किया जा सकता है जब npm को कॉल करते हैं, यहां तक ​​कि root: sudo npm install --unsafe-perm true PACKAGE_NAME –

संबंधित मुद्दे