NPM: หลังจากไม่พบโมดูล "npm link"


93

ฉันกำลังพัฒนาสองโมดูลสำหรับ NodeJS แรกคนหนึ่งชื่อและหนึ่งวินาทีaligator aligator-methodsอันที่สองขึ้นอยู่กับอันแรกในการทำงาน ฉันกำลังพัฒนาโมดูลทั้งสองนี้ในเวลาเดียวกันและฉันต้องการเชื่อมโยงทั่วโลกaligatorเพื่อให้ฉันสามารถใช้งานได้เหมือนในรีจิสทรี npm และฉันเพิ่งติดตั้งทั่วโลก ในการทำเอกสาร NPM นี้บอกว่าต้องใช้npm linkแต่ใช้ไม่ได้

ไฟล์package.jsonโมดูลaligator:

{
  "name": "aligator",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "private": true,
  "directories": {
    "doc": "docs",
    "example": "examples",
    "test": "spec"
  },
  "scripts": {
    "test": "gulp jasmine"
  },
  "license": "MIT",
  "devDependencies": {
    "gulp": "^3.6.2",
    "gulp-jasmine": "^0.2.0",
    "gulp-jshint": "^1.6.1",
    "gulp-rename": "^1.2.0",
    "jasmine-node": "^1.14.3"
  },
  "dependencies": {
    "bluebird": "^1.2.4",
    "lodash": "^2.4.1",
    "mathjs": "^0.22.0"
  }
}

ไฟล์package.jsonโมดูลaligator-methods:

{
 "name": "aligator-methods",
 "version": "0.0.1",
 "description": "",
 "main": "index.js",
 "private": true,
 "directories": {
   "doc": "docs",
   "example": "examples",
   "test": "jasmine"
 },
 "scripts": {
   "test": "gulp jasmine"
 },
 "author": "",
 "license": "MIT",
 "devDependencies": {
   "gulp": "^3.6.2",
   "gulp-jasmine": "^0.2.0",
   "gulp-jshint": "^1.6.1",
   "gulp-rename": "^1.2.0",
   "jasmine-node": "^1.14.3"
 },
 "dependencies": {
   "lodash": "^2.4.1",
   "mathjs": "^0.22.0",
   "aligator": "^0.0.1"
 }
}

ก่อนอื่นฉันเชื่อมโยงโมดูลทั่วโลก:

$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator

ถ้าฉันจำไม่ผิดได้สร้างการอ้างอิงส่วนกลางของโมดูลของฉันaligatorและตอนนี้ฉันสามารถใช้โมดูลนี้ได้จากทุกที่ที่ฉันต้องการในคอมพิวเตอร์

จากนั้นฉันไปที่โมดูลอื่นและพยายามติดตั้งการอ้างอิง แต่มันให้ผลลัพธ์นี้แก่ฉัน:

$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.

npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0

ฉันพยายามเชื่อมโยงโดยตรงกับ:

$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator

แต่ก็ไม่ได้ผลเช่นกัน

มีความคิดเกี่ยวกับสิ่งที่อาจเกิดขึ้นหรือไม่? ฉันอ่านที่ไหนสักแห่งที่อาจมีบางอย่างเกี่ยวข้องกับการติดตั้งโหนดและnpm ของฉันเพราะสร้างโดย Homebrew และบางครั้งฉันก็จำเป็นต้องใช้sudoดูเหมือนว่าไม่น่าจะเป็นไปได้ แต่ฉันลองสิ่งที่พวกเขาเสนอแล้ว แต่ก็ไม่ได้ผลเช่นกัน


ในโค้ดที่โพสต์ชื่อของโมดูลแรกที่มีการสะกดและคุณพยายามที่จะเรียกมันในโมดูลที่สองเป็นaligtor aligatorนั่นอาจทำให้การพึ่งพาของคุณผิดพลาด
Bruno Toffolo

@BrunoToffolo ใช่คุณพูดถูก แต่ในกรณีนี้นี่เป็นเพียงการสะกดผิดในโพสต์ ฉันได้แก้ไขแล้วขอบคุณ
Roc

หายไป 4 ชั่วโมงในชีวิตที่น่าสังเวชของฉันหลอกลวง webpack config: / คุณช่วยชีวิตฉันไว้! +1
Tom Sarduy

8
ว้าวฉันมีปัญหาเดียวกันกับmainของฉันpackage.jsonขอบคุณสำหรับการอัปเดตคำตอบพร้อมการแก้ไขของคุณ!
mattyb

หากคุณพบคำตอบก็ควรโพสต์เป็นคำตอบและตั้งคำถามตามที่ได้รับการแก้ไขแล้ว :)
Alberto S.

คำตอบ:


40

ฉันพบปัญหานี้เนื่องจาก NVM ฉันกำลังเรียกใช้โหนดเวอร์ชันหนึ่งสำหรับการอ้างอิงและอีกเวอร์ชันสำหรับการอ้างอิง


1
คุณหรือใครก็ตามสามารถเชื่อมโยงไปยังตำแหน่งที่จะแก้ปัญหานี้โดยบังเอิญได้หรือไม่?
Kevin Danikowski

4
ในกรณีของฉันฉันต้องเรียกใช้ 'nvm use <VERSION>' บนทั้งสองแพ็คเกจโดยที่ VERSION เหมือนกันสำหรับทั้งสองแพ็คเกจ
linuxdan

34

การลบpackage-lock.jsonแล้วเรียกใช้npm installอีกครั้งช่วยแก้ปัญหาให้ฉันได้


3
ซึ่งสามารถแก้ไขปัญหาปัจจุบันได้ แต่อาจทำให้เกิดปัญหาใหญ่ขึ้น ไฟล์ล็อคมีบทบาทสำคัญมากและไม่ควรลบทิ้ง กล่าวโดยย่อคือกลไกที่ทำให้แน่ใจว่าสมาชิกแต่ละทีมใช้การอ้างอิงเดียวกัน คุณสามารถชำระเงินคำตอบนี้ได้ที่ stack overflow: stackoverflow.com/questions/54124033/… แต่การอ่านเหตุผลที่มีอยู่ในเอกสารก็เป็นการเริ่มต้นที่ดีเช่นกัน docs.npmjs.com/files/package-lock.json
SKuijers

1
ฉันยินดีที่จะเลือกคำตอบนี้หากมีข้อความเป็นตัวหนาแสดงว่านี่ควรเป็นทางเลือกสุดท้ายโดยสิ้นเชิง ดังที่ @SKuijers ชี้ให้เห็นว่าการล็อกไฟล์มีบทบาทสำคัญในการรักษาเวอร์ชันการอ้างอิง เป็นไปได้ว่าเวอร์ชันที่พึ่งพาได้ถูกล็อคไว้package.jsonเช่นกัน แต่ส่วนใหญ่แล้วฉันเห็นว่าpackage-lock.jsonหรือyarn.lockเป็นคนเฝ้าประตูสำหรับสิ่งนี้
FrostyDog

33

ปัญหาคือmainคุณสมบัติของpackage.jsonชี้ไปที่ไฟล์ที่ไม่มีอยู่ ดูเหมือนว่าปัญหาอาจเกิดขึ้นได้จากหลายสาเหตุดังนั้นอย่าลืมดูคำตอบอื่น ๆ


1
omg ฉันต้องการเพิ่มคะแนน 50 ครั้งนี้และหันหน้าเข้าหาตัวเองหนึ่งครั้งสำหรับการโหวตเพิ่มแต่ละครั้ง
เบ็น

mainที่น่าสนใจที่จะรู้ว่าโครงการที่ต้องใช้ ส่วนใหญ่ฉันไม่ได้ทำ แต่เดาว่ามันสร้างปัญหาเล็กน้อยเหล่านี้
cst1992

พบดี! ฉันเห็นคำตอบของคุณและรู้ทันทีว่านี่คือปัญหาของฉัน :)
slashp

12

เมื่อคุณเรียกใช้เป็นครั้งแรกnpm linkจากaligatorไดเรกทอรีคุณสร้างการเชื่อมโยงจากไดเรกทอรี node_modules aligatorโลกของคุณไปยัง จากนั้นเมื่อคุณเรียกใช้npm link aligatorจากaligator-methodsไดเร็กทอรีคุณจะเชื่อมโยงaligatorจาก node_modules ที่ติดตั้งในเครื่องของคุณไปยังแหล่งที่มาดั้งเดิม (ตามที่แสดงในตัวอย่างด้านบน) เมื่อเสร็จแล้วไม่จำเป็นต้องติดตั้งอีกต่อไปเนื่องจาก "ติดตั้ง" เรียบร้อยแล้ว คุณเห็นข้อผิดพลาดอะไรหลังจากเรียกใช้npm link aligatorคำสั่ง

หากคุณต้องการติดตั้งการอ้างอิงจากไดเร็กทอรีภายในคุณอาจลองใช้npm installแทน ตัวอย่างเช่น:

$ cd ~ / aligator-method
$ npm ติดตั้ง .. /aligator


6
ขอขอบคุณที่พยายามแก้ไขปัญหานี้ ของฉันnpm linkไม่แสดงข้อผิดพลาดใด ๆ ปัญหาในกรณีของฉันคือเนื่องจากคุณสมบัติmainชี้ไปที่ไฟล์ที่ไม่มีอยู่ ในฐานะที่เป็นของฉันnpm installคุณสิทธิกำลังฉันไม่จำเป็นต้องติดตั้งอะไรnpm linkไม่ได้ทั้งหมด ขอบคุณที่ฉันไม่รู้
Roc

1
ฉันมีปัญหาเดียวกัน แต่ไม่พบวิธีแก้ปัญหา ... ถ้าฉันพยายามทีละรายการต้องใช้แต่ละแพ็คเกจที่เชื่อมโยงกัน แต่ทั้งหมดใช้งานได้ ... อันที่ใช้ไม่ได้เพียงแค่บอกว่า: "ข้อผิดพลาด: ไม่พบโมดูล" -i-just-linked ""
Michael

@ ไมเคิลดูเหมือนว่าฉันมีโมดูลที่ซ้อนอยู่ในไดเร็กทอรีที่ลึกกว่าซึ่งพยายาม "แบบไดนามิก" ต้องการโมดูลที่ล้มเหลว (เช่นชื่อของสตริงที่ส่งไปยังต้องการ () ถูกส่งไปยังโมดูล) ดังนั้นฉันจึงต้อง npm ลิงก์ไปยังไดเร็กทอรีที่ลึกกว่า
Michael

4

ปัญหาของฉันลงเอยด้วยการที่ repo A กำลังใช้npmและ repo B กำลังใช้อยู่yarnดังนั้นฉันจึงต้องเรียกใช้yarn linkrepo B เพื่อดึงมันnpm link package-nameเข้ามาใน repo A


คุณครับทำให้วันของฉัน! ขอบคุณ
Alec

3

สิ่งที่ได้ผลสำหรับฉันคือ:

  1. ลบnode_modulesทั้งในการพึ่งพาและโมดูลผู้บริโภค
  2. วิ่ง npm unlink --no-save [dependency-module]
  3. เชื่อมโยงอีกครั้งด้วยคำสั่ง 2 ลิงค์ตามnpm-link

ตอนนี้ฉันสามารถทดสอบโมดูลที่ไม่ได้เผยแพร่ในเครื่องได้อย่างสมบูรณ์

นอกจากนี้ยังมีคำสั่งแพ็ค npm ซึ่งสามารถช่วยคุณทดสอบโมดูลที่ไม่ได้เผยแพร่ของคุณแม้ว่าจะไม่แข็งแกร่งเท่า

npm-pack


2

แก้ไขปัญหานี้ในเวอร์ชันของฉัน ใน npm v5.3.0 ฉันลบออกnode_modulesจาก repo ฉันกำลังเชื่อมโยงไปยังโครงการอื่น

ฉันพบว่าหลังจาก npm v3 พวกเขาพยายามใส่การอ้างอิง node_modules ทั้งหมดลงในไดเร็กทอรี node_modules เดียว (หนึ่งในโปรเจ็กต์ของคุณ) เพื่อทำให้โครงสร้างแบนให้มากที่สุด ( http://codetunnel.io/npm-5-changes-to-npm - ลิงค์ / )


1

สำหรับฉันสิ่งนี้เกิดขึ้นเมื่อฉันลดหมายเลขเวอร์ชันของแพ็คเกจภายในเครื่องจาก 0.1.0 เป็น 0.0.1 และในโครงการที่ฉันเชื่อมโยงกับแพ็คเกจนี้ฉันยังคงใช้หมายเลขเวอร์ชันที่สูงกว่า การอัปเดตการอ้างอิงในการpackage.jsonแก้ไข


0

เมื่อใช้ peerDependency

ฉันกำลังพัฒนาสองแพ็คเกจstejsและstejs-loader. stejs-loaderมีstejsเป็นpeerDependency. เมื่อฉันวิ่งnpm link stejs-loaderและnpm link stejsในโครงการของฉันฉันได้รับข้อผิดพลาดที่ไม่สามารถหาstejs-loader stejsฉันได้รับการแก้ไขโดยเรียกใช้npm link stejsในไดเรกทอรีของstejs-loader.


0

ตรวจสอบโมดูล tsconfig

ถ้าชอบฉันคุณบังเอิญเปลี่ยน tsconfig moduleจากes5เป็นesnextหรืออะไรบางอย่างmoduleResolutionค่าเริ่มต้นอาจเปลี่ยนไป

หากไม่มีmoduleResolutionการตั้งค่าเป็น "โหนด" typescript จะไม่แก้ไขแพ็กเกจ node_modules

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

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