NPM: Після “npm link” модуля не знайдено


88

Я розробляю два модулі для 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

Але і це не спрацювало.

Будь-які думки про те, що це може відбуватися? Я десь читав, що, можливо, це було пов’язано з моєю установкою node та npm, тому що це було зроблено Homebrew, і тому іноді мені потрібно використовувати sudo, це здавалося малоймовірним, але я спробував те, що вони запропонували, і це теж не спрацювало.


У розміщеному коді написано ім'я першого модуля, aligtorі ви намагаєтеся посилатися на нього у другому модулі як aligator. Це також може призвести до збою вашої залежності.
Бруно Тоффоло

@BrunoToffolo Так, ти маєш рацію, але, у цьому випадку, це просто помилка в написанні. Я це виправив, дякую.
Roc

втратив 4 години мого нещасного життя, обманюючи конфігурацію веб-пакета: / Ти врятував мені життя! +1
Том Сардуй,

8
Ого, у мене була така сама проблема з mainмоїм package.json, дякую за оновлення відповіді з вашим виправленням!
mattyb

якщо ви знайшли відповідь, було б непогано опублікувати це як відповідь і поставити запитання як вирішене цим :)
Альберто С.

Відповіді:


39

Я зіткнувся з цією проблемою через NVM, я використовував одну версію вузла для залежності та іншу для залежного.


1
Чи можете ви чи хтось інший зробити посилання на місце, де випадково це вирішити?
Кевін Даніковський,

4
У моєму випадку мені потрібно запустити 'nvm use <VERSION>' на обох пакунках, де VERSION була однаковою для обох пакунків.
linuxdan

29

Видалення, package-lock.jsonа потім запущений npm installзнову вирішив проблему для мене.


2
Це може вирішити поточну проблему, але, можливо, створює деякі великі. файли блокування відіграють дуже важливу роль і їх не слід видаляти. Коротше кажучи: це механізми, які гарантують, що кожен член команди використовує однакові залежності. Ви можете перевірити цю відповідь на переповнення стека: stackoverflow.com/questions/54124033/ ... Але прочитати причину її існування в документах - це також хороший початок. docs.npmjs.com/files/package-lock.json
SKuijers

Я був би готовий підтримати цю відповідь, якщо б там було напівжирним шрифтом зазначено, що це має бути в крайньому випадку. Як зазначає @SKuijers, файли блокування відіграють важливу роль у підтримці версій залежностей. Імовірно, версії залежностей також були заблоковані package.json, але більшу частину часу я бачу, що ворота package-lock.jsonабо yarn.lockбули воротарями для цього.
FrostyDog

28

Проблема полягала в тому, що mainвластивість package.jsonвказувало на неіснуючий файл. Здається, проблема може статися з багатьох причин, тому не забудьте поглянути на інші відповіді.


omg, я хочу проголосувати за це 50 разів і facepalm один раз за кожне проголосування.
Бен

Цікаво знати, що проект вимагає main. В основному я обходився без цього, але, мабуть, це створює ці незначні проблеми.
cst1992

Приємна знахідка! Я побачив вашу відповідь і одразу зрозумів, що це моя проблема :).
slashp

11

При першому запуску npm linkз aligatorкаталогу ви створюєте посилання зі свого глобального каталогу node_modules на aligator. Потім, коли ви запускаєте каталог npm link aligatorз aligator-methodsкаталогу, ви здійснюєте посилання aligatorз локально встановлених node_modules на вихідне джерело (як це видно у наведеному вище прикладі). Після того, як це буде зроблено, більше не потрібно буде встановлювати, оскільки це вже "встановлено". Які помилки виникають після запуску npm link aligatorкоманди?

Якщо ви просто хочете встановити залежність з локального каталогу, ви можете просто спробувати використовувати його npm install. Наприклад:

$ cd ~ / aligator-methods
$ npm install ../aligator


5
Дякуємо за ваші зусилля, щоб вирішити цю проблему. Мої npm linkне показали жодних помилок. Проблема в моєму випадку полягала в тому, що властивість mainвказувала на неіснуючий файл. Що стосується моєї npm installви маєте рацію, мені не потрібно було нічого встановлювати, все це npm linkробить. Дякую за те, що я цього не знав.
Roc

1
У мене така сама проблема, але я не знайшов рішення ... якщо я спробую індивідуально вимагати кожен зв'язаний пакет, всі, крім одного, працюють ... той, який не працює, просто говорить: "Помилка: Не вдається знайти модуль модуля" -i-just-linked '".
Майкл

@Michael схоже на те, що у мене був модуль, вкладений у більш глибокий каталог, який намагався "динамічно" вимагати модуля, який не спрацьовував (тобто ім'я рядка, переданого в require (), було передане модулю), тому мені довелося npm посилання в більш глибокий каталог.
Майкл

4

Моє питання закінчилося тим, що використовувало репо A npmта репо Byarn , тому мені потрібно було запустити yarn linkрепо B, щоб втягнути його через npm link package-nameрепо А.


Ви, сер, зробили мені день! Дякую
Алек

2

Виправлення моєї версії цього випуску; у npm v5.3.0 я видаливnode_modules з на інший проект.

Я виявив, що після npm v3 вони намагаються помістити всі залежності node_modules в один каталог node_modules (один у вашому проекті), щоб максимально згладити структуру ( http://codetunnel.io/npm-5-changes-to-npm -посилання / ).


2

Мені вдалося:

  1. Видаліть node_modulesяк залежність, так і споживчий модуль.
  2. Біжи npm unlink --no-save [dependency-module]
  3. повторно зв’язати команди з 2-х зв’язків згідно npm-зв’язку

Тепер я можу повністю протестувати свій неопублікований модуль локально.

Крім того, існує команда npm pack, яка може допомогти вам протестувати ваші неопубліковані модулі, хоча і не настільки надійні.

нпм-пак


1

Для мене це сталося, коли я зменшив номер версії мого локального пакету з 0.1.0 до 0.0.1. І в проектах, де я посилався на цей пакет, я все ще використовував вищий номер версії. Оновлення залежностей у package.jsonфіксованому режимі.


0

При використанні peerDependency

Я розробляю два пакети,, stejsі stejs-loader. stejs-loaderмає stejsяк a peerDependency. Коли я біг npm link stejs-loaderі npm link stejsв своєму проекті я отримував помилку, stejs-loaderяку не вдалося знайти stejs. Я це виправив, запустивши npm link stejsв каталозі stejs-loader.


0

Перевірте tsconfig moduleResolution

Якщо, як і я, ви випадково змінили tsconfig moduleз es5на esnextабо щось, тоmoduleResolution по замовчуванням може бути змінений.

Без moduleResolution встановлення значення "node", typecript не вирішує пакети node_modules.

Ви можете прочитати на сторінці Параметри компілятора про те, як значення за замовчуванням залежить від значення module, за замовчуванням, в свою чергу, залежить target- але, ймовірно, встановити для нього "вузол" явно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.