NPM ไม่ได้ติดตั้งการพึ่งพาโมดูล


151

นี่เป็นของฉันpackage.jsonสำหรับโมดูลที่ฉันรวมอยู่ในโครงการหลัก:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

สิ่งหนึ่งที่ควรทราบคือโมดูลนี้มีอยู่ใน repo ส่วนตัวและฉันรวมไว้ในผู้ปกครองpackage.jsonชอบ:"module-name": "git+ssh://git@myserver:user/module-name.git"


package.json ของคุณดูโอเคเช่นเดียวกับบรรทัดที่คุณใช้เพื่อรวมไว้ คุณได้รับข้อความแสดงข้อผิดพลาดหรือไม่? เป็นคอมไพล์บนเส้นทางของคุณ?
poida

1
ฉันไม่ได้รับข้อผิดพลาดต่อ sa โมดูลติดตั้ง แต่postinstallสคริปต์ของฉันล้มเหลวเนื่องจากgruntไม่พบแพคเกจท้องถิ่นเนื่องจากไม่ได้ติดตั้งโดย NPM
Ahmed Nuaman

1
ปัญหานี้ยังคงมีอยู่ในเดือนพฤศจิกายน 2559 ฉันได้ทำการติดตั้งโมดูลการทำงานบนคอมพิวเตอร์เครื่องใหม่เรียบร้อยแล้ว @ Mohsen แก้ไขคำตอบแล้ว
Joe Lapp

คำตอบ:


152

ดูเหมือนว่าคุณจะพบข้อผิดพลาดที่มีมาระยะหนึ่งแล้วและยังไม่มีวิธีแก้ปัญหา มีปัญหาเปิดหลายประการสำหรับกรณีนี้ในที่เก็บ npm:

ในคนแรกแสดงรายการวิธีแก้ไขปัญหาต่าง ๆ ที่คุณอาจลอง

โซลูชันทางเลือกอาจเป็น (แฮ็คเล็กน้อย) เพื่อแสดงรายการการขึ้นต่อกันอย่างชัดเจนว่าเป็นผู้ติดตามระดับแรก สิ่งนี้ต้องการให้คุณเก็บรักษารายการไว้ แต่ในทางปฏิบัติจะต้องทำไม่บ่อยนัก


1
@ Flame2057 เป็นเรื่องดีที่รู้ว่าคุณไม่มีโชค แต่ไม่ได้ให้ข้อมูลอะไรมาก คุณอาจไปข้างหน้าและตั้งคำถามหวังว่าชุมชนมีความรู้ในการแก้ไข มีความสุข!
allprog

อีกหนึ่งขั้นตอนก็เป็นสิ่งจำเป็นสำหรับฉัน ฉันต้องคลิกขวาที่ "การพึ่งพา" ในโครงการของฉันและเลือก "กู้คืนแพคเกจ" หลังจากทำขั้นตอนอื่น ๆ ที่กล่าวถึงที่นี่ (ลบ node_modules และ package.lock.json จากนั้นติดตั้ง npm)
Taersious

113

ฉันมีปัญหาที่คล้ายกันมากลบnode_modulesโฟลเดอร์ทั้งหมดและติดตั้งใหม่ทำงานให้ฉัน เรียนรู้เคล็ดลับนี้จากการแสดงของIT Crowd !

rm -rf node_modules
npm install

มันใช้งานได้จริงสำหรับฉัน ฉันคิดว่ามันแปลกจริง ๆ - อะไรเป็นสาเหตุของความผิดพลาดนั้น? ไม่ว่าถ้าฉันลบโฟลเดอร์และติดตั้ง npm ใหม่แล้วก็ใช้งานได้ ก่อนหน้านี้จะไม่มีสิ่งใดติดตั้งในไดเรกทอรีย่อยนั้น ตอนนี้ทุกอย่างได้รับการติดตั้งที่นั่น
CtheGood

ขอบคุณ @Moshen ฉันลบโหนดเก่าออกแล้วและทำการติดตั้งใหม่ทั้งหมด ฉันลบ node_modules / global ทั้งหมด แต่ลืมลบออกจากบางแอพที่มีอยู่ ผมต้องลบ node_modules npm installโฟลเดอร์ในไดเรกทอรีแต่ละแอปที่มีอยู่ให้เรียกใช้แล้ว
wilblack

ดีเก่า "คุณลองเริ่มต้นจากรอยขีดข่วนวิธี?" มันใช้งานได้ดีสำหรับฉัน
Marco Aurélio Deleu

ในขณะที่มันเป็นเรื่องดีที่รู้ว่ามีวิธีแก้ไขปัญหานี้จริง ๆ ของ 'รีบูตเครื่องและลองอีกครั้ง' smacks จริง ๆ และเพียงซ่อนปัญหาจริง ฉันมีปัญหาคล้ายกันกับการติดตั้ง NPM (กระบวนการออกจากทันทีโดยไม่มีข้อความ) และหนึ่งในวิธีแก้ปัญหาคือการลบโฟลเดอร์ node_modules และติดตั้งใหม่; ซึ่งไม่ได้เติมเต็มฉันด้วยความมั่นใจว่าเราเข้าใจว่าเกิดอะไรขึ้นที่นี่
Kelly S. French

1
สิ่งนี้ใช้ได้สำหรับฉัน ฉันจะ +1 อีกครั้งสำหรับการอ้างอิงฝูงชนไอทีที่ฉันต้องการ
texelate

32

ฉันใช้เครื่อง windows

  1. ฉันลบโฟลเดอร์ node_modules
  2. ยังไงก็ตามไฟล์ package.lock.json กำลังถูกสร้างขึ้น ฉันลบไฟล์นั้น
  3. จากนั้นติดตั้ง npm
  4. สร้างความสะอาด
  5. วิ่ง.

14
คำตอบนี้ต้องได้รับความรักมากขึ้น ไฟล์ package.lock.json กำลังทำให้ฉันสับสน
mwilcox

16

หากคุณรับรหัสนี้อาจเป็นไปได้ว่าการอ้างอิงและรุ่นถูกล็อคและคุณมีไฟล์. / npm-shrinkwrap.json

หากการพึ่งพาของคุณไม่ได้อยู่ในรายการไฟล์นั้นจะไม่ถูกติดตั้งด้วยnpm installคำสั่ง

คุณจะต้องติดตั้งแพ็กเกจด้วยตนเองจากนั้นเรียกใช้npm shrinkwrapเพื่ออัปเดตไฟล์ shrinkwrap


2
ฉันมีปัญหาเมื่อติดตั้งแพคเกจด้วยตนเองได้สร้างpackage-lock.jsonไฟล์หลังจากอัปเดตเป็นโหนด 8.0.0 และ npm 5.0.0 หลังจากนั้นการรันnpm installจะติดตั้งเพียงหนึ่งแพ็คเกจแทนการอ้างอิงทั้งหมดของฉัน การลบpackage-lock.jsonและเรียกใช้ซ้ำnpm installแก้ปัญหาสำหรับฉัน
Monkpit

1
@ Monkpit นั่นแก้ไขให้ฉันเช่นกันขอบคุณ! package-lock.jsonได้รับในทาง
VirtualWolf

10

ฉันสงสัยว่าคุณกำลังเผชิญปัญหาที่คุณไฟล์ไม่ได้อยู่ในไดเรกทอรีเดียวกันกับคุณpackage.json Gruntfile.jsเมื่อคุณรันgrunt xxxคำสั่งคุณจะได้รับข้อความแสดงข้อผิดพลาดดังนี้:

Local Npm module "xxx" not found. Is it installed?

สำหรับตอนนี้การแก้ปัญหาคือ:

  • สร้าง package.json ในไดเรกทอรีเดียวกับ Gruntfile.js
  • กำหนดโมดูลที่ต้องการโดยโครงการเสี้ยงฮึดฮัดของคุณ
  • ดำเนินการnpm installเพื่อโหลดพวกเขาในเครื่อง
  • ตอนนี้คำสั่ง grunt ที่ต้องการควรใช้งานได้

IMHO เป็นเรื่องน่าเศร้าที่เราไม่สามารถโหลดโมดูลแกรมแก้ปัญหาโหลดจากโมดูล npm หลัก (เช่น package.json ในไดเรกทอรีหลักภายในโครงการเดียวกัน) การสนทนาที่นี่ดูเหมือนจะบ่งบอกว่ามันทำเพื่อหลีกเลี่ยงการโหลดโมดูล "ทั่วโลก" แต่ฉันคิดว่าสิ่งที่เราต้องการกำลังโหลดจากโมดูล "โครงการของฉัน" แทน


ดังนั้นนี่คือโครงสร้างของโครงการหลักของฉัน (ซึ่งเป็นการนำเข้าโครงการย่อยโมดูล): cl.ly/image/020E0b3I0t1Aและโครงสร้างของโครงการย่อยโมดูลของฉัน: cl.ly/image/2q0L3l1v0s40 ; คุณจะเห็นว่าทั้งสองประกอบด้วยGruntfile.jsและทั้งสองมีpackage.jsonในระดับเดียวกัน
Ahmed Nuaman

1
นี่ไม่ใช่ปัญหาgruntแต่เป็นปัญหาที่npmไม่ติดตั้งการพึ่งพาซ้ำ ๆ ในโครงการโมดูลย่อยของฉัน
Ahmed Nuaman

9

OP อาจเป็นจริงสำหรับโหนดรุ่นเก่ากว่า อย่างไรก็ตามฉันต้องเผชิญกับโหนด 4.4.1 เช่นกัน

มันอาจจะเชื่อมโยงกับเวอร์ชั่นโหนดที่คุณใช้งานได้เป็นอย่างดี ลองอัปเกรดเป็นเวอร์ชันล่าสุด การขึ้นต่อกันบางอย่างจะไม่โหลดแบบต่อเนื่องหากเข้ากันไม่ได้กับรุ่นของโหนด

npm updateฉันพบนี้โดยการเรียกใช้

หลังจากอัปเกรดเป็นเวอร์ชั่นล่าสุด (4.4 -> 5.9); สิ่งนี้ได้รับการแก้ไขแล้ว


8

ในกรณีของฉันมันจะช่วยในการลบและnode_modulespackage-lock.json

npm installหลังจากนั้นทุกอย่างเพียงติดตั้งด้วย


8

ตรวจสอบด้วยว่าชื่อแพ็คเกจของคุณนั้นถูกต้องแล้ว:

ไม่ถูกต้อง:

{
    "name":"My Awesome Package"
}


แก้ไข

{
    "name": "my-awesome-package-name"
}

1
ใช่ฉันมีที่ว่างในชื่อและติดตั้งไม่ถูกต้อง
Ansjovis86

1
ไม่เพียง แต่สำหรับพื้นที่เท่านั้นมันเกี่ยวกับ '-' ที่เขาใช้ในชื่อฉันยังต้องเผชิญกับปัญหาเดียวกันใส่ - หรือ _ ในชื่อมันจะทำงานได้
magagbal

4

คุณอาจต้องติดตั้ง grunt-cli ลองทำสิ่งนี้ก่อนทำการติดตั้ง npm:

sudo npm install -g grunt-cli

ที่แก้ไข grunt ไม่ได้ออกสำหรับฉันคุณจะต้องมีไฟล์ grunt ที่ถูกต้อง

ที่มา: https://stackoverflow.com/a/16456467/241294


จะเกิดอะไรขึ้นเมื่อคุณลองใช้คำสั่ง 'grunt' ที่พร้อมรับคำสั่งของคุณ มันมีอยู่บนเส้นทางของคุณหรือไม่? คุณถูกต้องดูเหมือนว่าติดตั้งจาก Pastebin ของคุณ คุณติดตั้งด้วย sudo และ -g หรือไม่
poida

ไม่มีปัญหากับเสียงฮึดฮัด:~ ᐅ which grunt /opt/local/bin/grunt
อาเหม็ด Nuaman

นอกจากนี้เมื่อฉันโคลน repo เองมากกว่าผ่าน NPM และเรียกใช้npm installและgrunt installทำงานได้ดี ปัญหาคือว่า NPM ดูเหมือนจะไม่ติดตั้งการpackage.json
พึ่งพา

คุณกำลังมองหาไดเรกทอรีใดที่อ้างอิงถึงแพ็คเกจ ไม่ควรอยู่ในระดับบนสุด แต่ไม่ควรต่ำกว่า: top-level-package / node_modules / module-name / node_modules เป็นไปได้ไหมที่เสียงฮึดฮัดไม่พบไฟล์เสียงฮึดฮัดเพราะมันทำงานในไดเรกทอรีที่ไม่ถูกต้อง?
poida

ไม่ใช่ปัญหาgruntเมื่อคุณติดตั้งโมดูลด้วย NPM มักจะให้ฤดูร้อนในตอนท้ายของการพึ่งพาใด ๆ ของโมดูลที่ได้รับการติดตั้งแล้ว เมื่อฉันติดตั้งโมดูลในคำถามฉันไม่ได้รับฤดูร้อนของโมดูลพึ่งพาใด ๆ ที่ติดตั้ง
Ahmed Nuaman

4

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


3

อีกวิธีในการแก้ไขปัญหานี้คือการเพิ่มลงในpackage.jsonส่วนสคริปต์โมดูลของคุณ

"preinstall": "npm install {Packages You depend on}"

สิ่งนี้จะทำอะไรมันจะติดตั้งแพ็กเกจทั้งหมดที่โมดูลต้องการและคุณจะไม่ได้รับข้อผิดพลาดนั้น


3

เกิดขึ้นกับรุ่นโหนดเก่า ใช้โหนดรุ่นล่าสุดเช่นนี้:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

แก้ไข: saveยังทำให้คุณแน่ใจว่า
เช่น:npm install yourmoduleName --save


2

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันติดตั้งสภาพแวดล้อมแบบ Node dev บน Windows

ในการแก้ไขปัญหานี้ฉันเข้าสู่ไดเรกทอรีโครงการใหม่ของฉัน (ซึ่งฉันเพิ่งนั่งร้านด้วยyo angular) และพิมพ์ด้วยสองคำสั่ง:

npm install -g grunt --save-dev

ที่จะติดตั้งการพึ่งพาเสียงฮึดฮัดท้องถิ่นกับโครงการของคุณ ต่อไป:

npm install

ที่จะทำให้มั่นใจได้ว่าการติดตั้งโครงการของคุณ (ใหม่) ทั้งหมด

Tada!


2

ควรพูดถึงเพื่อให้แน่ใจว่าการอ้างอิงของคุณควรอยู่ในdependenciesส่วนของคุณpackage.json(ตรงข้ามกับdevDependencies )

ปัญหาของฉันโดยทั่วไปเหมือนกับ OP:

  • การติดตั้ง repo ส่วนตัว (เรียกมันว่าrepo1) ผ่านทาง"module-name": "git+ssh://git@myserver:user/my-repo-name.git"repo อื่น ๆ (ลองเรียกมันว่าrepo2)
  • ในrepo2's node_modulesหนึ่งแพคเกจการพึ่งพาจากrepo1ไม่ได้มี
  • ความผิดพลาดโง่ของฉัน! .. repo1ถูกรายการพึ่งพาว่าในdevDependenciesแทนdependencies
  • ย้ายการพึ่งพาในของฉันrepo1's package.jsonจากdevDependencies ไปdependencies
  • ในตัวฉันrepo2ฉันลบของฉันnode_modulesและpackage-lock.jsonก็ทำnpm installvoilà! ... การพึ่งพาอาศัยอยู่ที่นั่น!

ฉันได้ประกาศ NODE_ENV = ตัวแปรสภาพแวดล้อมการผลิตใน Dockerfile ของฉันเหนือคำสั่งการติดตั้ง npm ซึ่งทำให้ devDependencies ไม่สามารถติดตั้งได้
Pieter De Clercq

0

ผมมีปัญหาเหมือนกัน. แต่ในเครื่องเดียวกันโปรเจ็กต์หนึ่งมี package.json ที่ดีซึ่งการพึ่งพาทั้งหมดของฉันได้รับการติดตั้งเรียบร้อยแล้ว และในโครงการอื่นการพึ่งพา package.json ของฉันไม่ได้ถูกติดตั้งไม่ว่าฉันจะทำอะไร ฉันเพิ่งคัดลอก package.json และวางลงในโครงการอื่น และมันก็ใช้งานได้! ความแตกต่างที่ฉันพบคือบรรทัดว่างเปล่าที่จุดเริ่มต้นของไฟล์ ไม่ทราบหรือมีอิทธิพลอะไรอาจมีปัญหาอื่น ๆ แต่ปัญหาคือไฟล์ package.json เท่านั้น


0

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

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