Я разрабатываю два модуля для 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
. Это также может привести к сбою вашей зависимости.main
моимpackage.json
, спасибо, что обновили ответ своим исправлением!Ответы:
Я столкнулся с этой проблемой из-за NVM, я использовал одну версию узла для зависимости, а другую для зависимого.
источник
Удаление и повторный
package-lock.json
запускnpm install
решили проблему для меня.источник
package.json
, но большую часть времени я вижу, чтоpackage-lock.json
илиyarn.lock
были привратниками для этого.Проблема заключалась в том, что
main
свойствоpackage.json
указывало на несуществующий файл. Кажется, что проблема может возникнуть по нескольким причинам, поэтому обязательно ознакомьтесь с другими ответами.источник
main
. В основном я обходился без него, но думаю, это создает эти незначительные проблемы.При первом запуске
npm link
изaligator
каталога вы создаете ссылку из глобального каталога node_modules наaligator
. Затем, когда вы запускаетеnpm link aligator
изaligator-methods
каталога, вы связываетеaligator
свои локально установленные node_modules с исходным источником (как показано в приведенном выше примере). Как только это будет сделано, больше не будет необходимости в установке, поскольку она уже «установлена». Какие ошибки вы видите после запускаnpm link aligator
команды?Если вы просто хотите установить зависимость из локального каталога, вы можете просто попробовать использовать
npm install
вместо этого. Например:источник
npm link
не показывала ошибок. Проблема в моем случае заключалась в том, что свойствоmain
указывало на несуществующий файл. Что до моего,npm install
вы правы, мне не нужно было ничего устанавливатьnpm link
, он все делает. Спасибо за то, что я этого не знал.Моя проблема заключалась в том, что репо A использовалось,
npm
а репо B использовалосьyarn
, поэтому мне нужно было запуститьyarn link
репо B, чтобы вытащить его черезnpm link package-name
репо A.источник
Исправить мою версию этой проблемы; в npm v5.3.0 я удалил
node_modules
репо, которое связывал с другим проектом.Я обнаружил, что после npm v3 они пытаются поместить все зависимости node_modules в один каталог node_modules (один в вашем проекте), чтобы максимально сгладить структуру ( http://codetunnel.io/npm-5-changes-to-npm -ссылка / ).
источник
Что сработало для меня, так это:
node_modules
как в зависимости, так и в модуле потребителя.npm unlink --no-save [dependency-module]
Теперь я могу полностью протестировать свой неопубликованный модуль локально.
Кроме того, существует команда npm pack, которая может помочь вам протестировать неопубликованные модули, хотя и не столь надежна.
npm-pack
источник
Для меня это произошло, когда я уменьшил номер версии моего локального пакета с 0.1.0 до 0.0.1. И в проектах, где я связался с этим пакетом, я все еще использовал более высокий номер версии.
package.json
Исправлено обновление зависимостей .источник
При использовании peerDependency
Я разрабатываю два пакета
stejs
, иstejs-loader
.stejs-loader
имеетstejs
в качествеpeerDependency
. Когда я побежал ,npm link stejs-loader
иnpm link stejs
в моем проекте я получаю сообщение об ошибке , чтоstejs-loader
не смог найтиstejs
. Я исправил это, запустивnpm link stejs
в каталогеstejs-loader
.источник
Проверить tsconfig moduleResolution
Если вы, как и я, изменили tsconfig
module
сes5
наesnext
или что-то в этом роде, тоmoduleResolution
значение по умолчанию могло быть изменено.Без
moduleResolution
значения «node» машинописный текст не будет разрешать пакеты node_modules.Вы можете прочитать на странице параметров компилятора о том, как значение по умолчанию зависит от значения, от
module
которого, в свою очередь, зависит значение по умолчанию,target
но, вероятно, явно установите его на «узел».источник