Ответ 1
Я столкнулся с этой проблемой из-за NVM, я использовал одну версию node для зависимости, а другую для зависимой.
Я разрабатываю два модуля для 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"
},
"author": "Roc Alayo Arnabat",
"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
, это казалось маловероятным, но я пробовал то, что они предлагали, и он тоже не работал.
В моем случае проблема заключалась в том, что свойство main
package.json
указывало на несуществующий файл.
Я столкнулся с этой проблемой из-за NVM, я использовал одну версию node для зависимости, а другую для зависимой.
При первом запуске 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
Удаление package-lock.json
запуск npm install
снова решили эту проблему для меня.
Для меня это произошло, когда я уменьшил номер версии моего локального пакета с 0.1.0 до 0.0.1. И в проектах, в которых я связан с этим пакетом, я все еще использовал номер более высокой версии. Обновление зависимостей в package.json
исправлено.
Исправить мою версию этой проблемы; в npm v5.3.0, я удалил node_modules
из repo, я связался с другим проектом.
Я выяснил, что после npm v3 они пытаются поместить все зависимости node_modules в один каталог node_modules (один в вашем проекте), чтобы максимально сгладить структуру (http://codetunnel.io/npm-5-changes-to-npm-link/).
Для меня решение заключалось в том, что в моей инструкции require была опечатка.
require('my_liberry')
Как только я набрал правильную вещь, она сработала.
То, что работало для меня, было:
node_modules
как в модуле зависимости, так и в модуле-потребителе.npm unlink --no-save [dependency-module]
Теперь я могу полностью проверить мой неопубликованный модуль локально.
Кроме того, есть команда npm pack, которая может помочь вам протестировать неопубликованные модули, хотя и не такие надежные.
Спасибо за вопрос. Была та же проблема - мое основное свойство не указывало на существующий файл.