การติดตั้ง Npm ล้มเหลวด้วย“ ไม่สามารถเรียกใช้ใน wd”


153

ฉันพยายามที่จะได้รับสภาพแวดล้อมโหนดของฉันตั้งขึ้นมาใน Ubuntu 12.04 ตัวอย่างใหม่กับโหนด 0.8.14 ติดตั้งอยู่แล้ว npm installแต่ผมวิ่งเข้าไปในปัญหาเมื่อฉันพยายามที่จะวิ่ง ดังนั้นเมื่อฉันลองnpm installมันก็บอกว่าฉันต้องเรียกใช้มันเป็น root หรือ adminisrator:

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 ไปยังบัญชีผู้ใช้หรือโพสต์ที่ระบุโดยการตั้งค่าซึ่งเริ่มต้นที่user nobodyตั้งค่าunsafe-permสถานะเพื่อเรียกใช้สคริปต์ด้วยสิทธิ์พิเศษของรูท

ตัวเลือกของคุณคือ:

  1. วิ่งnpm installด้วย--unsafe-permธง:

    [sudo] npm install --unsafe-perm
  2. เพิ่มการunsafe-permตั้งค่าสถานะของคุณpackage.json:

    "config": {
        "unsafe-perm":true
    }
  3. อย่าใช้preinstallสคริปต์เพื่อติดตั้งโมดูลส่วนกลางติดตั้งแยกต่างหากจากนั้นเรียกใช้งานปกติnpm installโดยไม่มีสิทธิ์รูท:

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

ที่เกี่ยวข้อง :


2
ขอโทษฉันไม่เห็นมันจนกระทั่งตอนนี้ ฉันลองใช้ "unsafe-ดัด" มาก่อน แต่ก็ไม่ได้ผลเหมือนกัน ปัญหายังคงมีอยู่
EH

10
สิ่งนี้ใช้ได้กับฉัน: sudo npm install --unsafe-permแต่sudo npm installไม่ถึงแม้ว่าฉันเพิ่มลง"unsafe-perm":trueใน package.json ... ไม่แน่ใจว่าทำไม
Dmitry Pashkevich

8
การเพิ่มลงในคุณสมบัติ "config" ใน package.json ตั้งค่าจริง ๆ แล้ว "npm_package_config_unsafe_perm" ดังนั้นตัวเลือกที่ 2 ไม่ทำงาน ดู: stackoverflow.com/questions/28763958/…
justmoon

'unsafe-ดัด': จริงก็ล้มเหลวสำหรับฉันเช่นกัน น่าเสียดายที่มันไม่ได้ทำให้เกิดข้อผิดพลาดและบริบท (รวมถึงการเปลี่ยนแปลง uid ของมัน) ในข้อความแสดงข้อผิดพลาดแทนที่จะทำให้เกิดความผิดพลาดที่เกิดขึ้นจากการมีอยู่และให้สิ่งที่คลุมเครือน่าประหลาดใจและเป็นศัตรู
android.weasel

ในขณะที่npm install --unsafe-permการทำงานสำหรับฉันฉันพยายามที่จะทำตามความหมายเกี่ยวกับการเปลี่ยนค่าเริ่มต้นuserการตั้งค่า ดังนั้นฉันจึงnpm set user my_userและnpm set group my_groupซึ่งเพิ่มรายการที่เกี่ยวข้องใน.npmrcไฟล์ของผู้ใช้รูท แต่ปัญหาคือnode_modulesตัวโฟลเดอร์และโฟลเดอร์ย่อยยังคงเป็นของรูทดังนั้นมันจึงไม่ช่วยอะไร ฉันไม่สามารถหาวิธีที่จะให้พวกเขาไม่ได้เป็นเจ้าของโดย root
fulv

53

สิ่งเดียวที่ทำงานได้สำหรับฉันคือการเพิ่ม.npmrcไฟล์ที่มี:

unsafe-perm = true

การเพิ่มการตั้งค่าเดียวกันไปที่package.jsonไม่มีผลใด ๆ


36
ในนักเทียบท่า:RUN npm set unsafe-perm true
Alexander Mills

ถ้าคุณใช้ WSL เพียงแค่พิมพ์ set unsafe-perm true สิ่งนี้จะช่วยคุณได้
Stas Panyukov

26

ฉันประสบปัญหาเดียวกันเมื่อพยายามเผยแพร่แอป nodejs ของฉันในเซิร์ฟเวอร์ส่วนตัวที่ใช้งาน CentO โดยใช้ผู้ใช้รูท ข้อผิดพลาดเดียวกันนี้เกิดจาก "postinstall": "./node_modules/bower/bin/bower install" ในไฟล์ package.json ของฉันดังนั้นทางออกเดียวที่ทำงานกับฉันคือการใช้ตัวเลือกทั้งสองเพื่อหลีกเลี่ยงข้อผิดพลาด:

1: ใช้ตัวเลือก --allow-root สำหรับคำสั่งติดตั้ง bower

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

2: ใช้ตัวเลือก --unsafe-perm สำหรับคำสั่งการติดตั้ง npm

npm install --unsafe-perm

12

โอพีที่นี่ฉันได้เรียนรู้มากขึ้นเกี่ยวกับโหนดตั้งแต่ฉันถามคำถามนี้ครั้งแรก แม้ว่าคำตอบของ 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.