npm windows ติดตั้งผลลัพธ์ทั่วโลกใน npm ERR! ภายนอก


121

ฉันยังใหม่กับความฮึดฮัดและ npm ดังนั้นฉันจึงลองใช้ "ตำรา - ตัวอย่าง" ในเว็บไซต์ " http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers " . ตอนนี้คุณไม่ควรไปดูที่นั่น แต่ฉันคิดว่าการแบ่งปันเว็บไซต์จะเป็นการดี จนถึงตอนนี้ดีจนมาถึงการติดตั้งทั่วโลก (ตกลงมีข้อผิดพลาดบางอย่างที่ฉันต้องหา แต่ตอนนี้ฉันใช้งานได้แล้ว)

เมื่อมาถึงจุดที่พยายามติดตั้งบางสิ่งบางอย่างทั่วโลกฉันติดขัด

สิ่งที่ฉันได้ทำไปแล้วสำหรับการทดสอบการติดตั้งแพ็คเกจบางอย่างทั่วโลก:

  1. สร้างไดเรกทอรีทดสอบ grunttest

  2. ภายในไดเร็กทอรีนั้น:

    npm install -g jshint

ผลลัพธ์ที่ฉันเห็น:

 npm http GET https://registry.npmjs.org/jshint
 npm http 304 https://registry.npmjs.org/jshint
 ...
 npm http 304 https://registry.npmjs.org/string_decoder
 C:\Program Files\nodejs\node_modules\npm\jshint -> C:\Program Files\nodejs\node_modules\npm\node_modules\jshinnt
 jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint
 ├── console-browserify@0.1.6
 ├── exit@0.1.2
 ├── underscore@1.4.4
 ├── shelljs@0.1.4
 ├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0)
 ├── cli@0.4.5 (glob@3.2.9)
 └── htmlparser2@3.3.0 (domelementtype@1.1.1, domutils@1.1.6, domhandler@2.1.0, readable-stream@1.0.26-2)

ฉันเพิ่งรู้ว่า 304 ซึ่งควรจะโอเคเนื่องจากเพียงแค่บอกว่าทรัพยากรไม่ได้ถูกแก้ไขตั้งแต่การติดตั้งครั้งล่าสุด (ไม่กี่นาทีก่อนหน้านี้)

ตรวจสอบว่า jshint มีอยู่ด้วย:

`npm -global list`

เอาท์พุท:

npm@1.4.3 C:\Program Files\nodejs\node_modules\npm
├── abbrev@1.0.4
├── ansi@0.2.1
├─...
├──
├── graceful-fs@2.0.2
├── inherits@2.0.1
├── ini@1.1.0
├─┬ init-package-json@0.0.14
│ └── promzard@0.2.1
├─┬ jshint@2.4.4 extraneous
│ ├─┬ cli@0.4.5
│ │ └─┬ glob@3.2.9
│ │   └── inherits@2.0.1
│ ├── console-browserify@0.1.6
│ ├── exit@0.1.2
│ ├─┬ htmlparser2@3.3.0
│ │ ├── domelementtype@1.1.1
│ │ ├── domhandler@2.1.0
│ │ ├── domutils@1.1.6
│ │ └─┬ readable-stream@1.0.26-2
│ │   └─... ├── text-table@0.2.0
├── uid-number@0.0.3
└── which@1.0.5

**npm ERR! extraneous: jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint npm**

คำถาม:

  1. ทำไมฉันถึงได้รับ npm ERR! ภายนอก ... ?
  2. หมายความว่าอย่างไร?
  3. ฉันจะแก้ไขปัญหานี้ได้อย่างไร

ข้อมูล:

ฉันใช้เครื่อง windows 7 โดยใช้ cygwin เป็นเชลล์ แน่นอนว่าพยายามแค่ jshint ( jshint someTestfile.js) ไม่ได้ผล

ขอบคุณล่วงหน้า Meru

คำตอบ:


208

npm ERR! extraneousหมายถึงแพคเกจได้รับการติดตั้ง แต่ไม่ได้ระบุไว้ในโครงการของpackage.jsonคุณ

เนื่องจากคุณแสดงรายการแพ็คเกจที่ได้รับการติดตั้งทั่วโลกมันจะทำให้คุณมีข้อผิดพลาดภายนอกมากมายที่สามารถเพิกเฉยได้เพราะสิ่งต่างๆส่วนใหญ่ที่ติดตั้งทั่วโลกจะไม่อยู่ในโครงการของpackage.jsonคุณ


1
Hi! ขอบคุณสำหรับคำตอบ. นี่หมายความว่าฉันควรจะสามารถรัน "jshint" ได้อย่างถูกต้องหรือไม่?
เมรุ

แก้ไข. เล่นjshint myfile.jsควรใช้ jshint myfile.jsบน
Kyle Robinson Young

1
ฉันเห็น ด้วย Grunt ทุกอย่างต้องผ่านงาน คุณจะโหลดและกำหนดค่าgrunt-contrib-jshintงานในGruntfile.jsไฟล์. สิ่งเดียวที่คุณติดตั้งทั่วโลกคือnpm i grunt-cli -gให้คุณสามารถเรียกใช้gruntคำสั่งเพื่อเรียกใช้ไฟล์Gruntfile.js. ดูคู่มือนี้สำหรับข้อมูลเพิ่มเติม: gruntjs.com/getting-started
Kyle Robinson Young

8
หากคุณมีไลบรารีภายนอกที่บันทึกไว้ในเครื่อง (ไม่ใช่ทั่วโลก) คุณสามารถเรียกใช้npm pruneเพื่อกำจัดได้
krx

2
@KyleRobinsonYoung: พูดถึงสิ่งนี้ในคำตอบได้อย่างไร คุณสามารถลบแพ็คเกจที่ไม่ได้ใช้ทั้งหมดโดยใช้npm prune --your-env
geek_guy

21

1 & 2: หมายความว่าคุณไม่มี jshint อยู่ในไฟล์ package.json ของโปรเจ็กต์ของคุณ แต่ติดตั้งไว้ทั่วโลก ดังนั้นจึงไม่ใช่ปัญหาใหญ่

3: เพื่อหลีกเลี่ยงนี้ภายนอกผิดพลาดคุณสามารถเรียกใช้หรือ re-run --saveติดตั้งกับตัวเลือก สิ่งนี้จะอัปเดตไฟล์ package.json ของคุณโดยอัตโนมัติ:

npm install -g jshint --save

หรือต้องการอัปเดตไฟล์ package.json ด้วยตนเองด้วยไฟล์ "dependencies": {...}


ในกรณี ma ใช้งานได้เฉพาะกับ local โดยไม่มี global ซ้ำ
BG BRUNO

2
--saveไม่ทำงานร่วมกับ-g. รายการแพ็กเกจส่วนกลางไม่มี package.json
Guido Bouman

5

ฉันแก้ไขสิ่งนี้โดยทำnpm updateในโฟลเดอร์ของแพ็คเกจหลักซึ่งลบแพ็คเกจที่ไม่เกี่ยวข้องบางส่วนออกจากรายการแล้วทำnpm uninstall <package>กับส่วนที่เหลือ

ดูเหมือนว่าจะได้ผลเนื่องจากฉันไม่ได้รับข้อผิดพลาดใด ๆ หลังจากทำสิ่งนี้


3

ฉันแก้ไขโดยการรวมคำตอบทั้งหมด ตอนแรกฉันติดตั้งแพ็คเกจทั่วโลก

npm install -g packagename --save

เนื่องจาก npm ติดตั้งแพ็กเกจนี้เช่นกันทั่วโลก แต่ไม่ได้เพิ่มลงในไฟล์ package.json ในเครื่องของฉันฉันจึงต้องทำบางอย่างกับมัน

ฉันเลือกวิธีแก้ไขเพื่อลบโลคัลแล้วติดตั้งทั่วโลก

npm uninstall packagename
npm install -g packagename

ด้วยวิธีนี้ฉันไม่มีคำเตือนอีกต่อไปและไม่ทำให้ไฟล์ package.json เสียหาย


บวก 100 ฉันต้องถอนการติดตั้งในเครื่องและติดตั้งทั่วโลก
Collin Peters

1

กรณีของฉันฉันเห็นสิ่งนี้ 'npm ERR! ข้อความ 'ที่ไม่เกี่ยวข้องในเทอร์มินัล cygwin ของฉันเมื่อฉันทำ' npm ls ' ฉันคิดว่านี่เป็นการตั้งค่าที่เสียหายทั่วโลกหลังจากมีการซ่อมแซมมากมาย ฉันเรียนรู้ข้อสังเกตต่อไปนี้ที่นี่:

  • 'npm ls' ให้ผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับตำแหน่งโฟลเดอร์ปัจจุบันของคุณ
  • 'npm ls' พยายามตรวจจับการมีอยู่ของโฟลเดอร์ 'node_modules' ในตำแหน่งโฟลเดอร์ปัจจุบันและแสดงรายการเนื้อหาเหล่านั้น ไม่ใช่คนระดับโลก!
  • นอกจากนี้หากโฟลเดอร์ปัจจุบันที่มี 'node_modules' ยังมีไฟล์ package.json ที่มีโมดูลน้อยกว่าแสดงอยู่ที่นี่ข้อผิดพลาดจะแสดง

ฉัน 'rm package.json' และ 'npm ls' ไม่แสดงข้อความแสดงข้อผิดพลาดอีกต่อไป ดังนั้นฉันจึงบอกว่าให้ตรวจสอบตำแหน่งปัจจุบันเสมอว่ามีโฟลเดอร์ 'node_modules' และไฟล์ package.json เพราะสิ่งเหล่านี้ถูกจัดลำดับความสำคัญก่อนในการตรวจสอบและหากสิ่งเหล่านี้หายไปการตรวจสอบจะยังคงไปยังโฟลเดอร์หลักและอื่น ๆ และหากคุณปรับแต่งข้อมูลโค้ดจำนวนมากเป็นจำนวนมากคุณอาจจะกระจัดกระจายไปทั่วโฟลเดอร์ node_modules และไฟล์ package.json จำนวนมาก ไม่มีอะไรเสียหายที่นี่ซึ่งแตกต่างจากประสบการณ์ที่เรามีเมื่อทำการพัฒนา J2EE Java / eclipse IDE หรือในช่วงวันที่เราต้องใช้ regedit เพื่อเปลี่ยนการตั้งค่าใน Windows


1

ในกรณีของฉันเป็นเพราะชื่อแพ็กเกจในpackage.jsonไฟล์ไม่เหมือนกับชื่อ Depency ที่แสดงในpackage.jsonโมดูลที่ขึ้นต่อกัน ข้อผิดพลาดของฉันเนื่องจากเป็นโมดูลใหม่ที่ฉันสร้างขึ้น แต่ยากที่จะสังเกตเห็นเนื่องจาก npm จะไม่ให้เบาะแสใด ๆ

เหตุการณ์นี้เกิดขึ้นเมื่อใช้dependencies: { "my-module": "file:local-modules/mymodule" }ไวยากรณ์โดยพิมพ์ชื่อ "my-module" ผิด


0

เนื่องจากแพ็คเกจของคุณไม่ได้อยู่ใน package.json ของคุณ หากคุณเพิ่มเข้าไปปัญหาจะได้รับการแก้ไขโปรดดูภาพด้านล่าง:

ใส่คำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.