как указать локальные модули в качестве зависимостей пакетов npm
у меня есть приложение, которое имеет обычный набор зависимостей от сторонних модулей (например, "express"), указанных в пакете.файл json в разделе зависимости. Е. Г.
"express" : "3.1.1"
Я хотел бы структурировать свой собственный код модульно и иметь набор локальных (то есть в файловой системе, в которой я сейчас нахожусь) модулей, устанавливаемых пакетом.формат JSON. Я знаю, что могу установить локальный модуль, запустив:
npm install path/to/mymodule
однако, я не знаю, как это сделать через интернет пакет.структура зависимостей json. С помощью --save
опция в этой команде просто ставит "mymodule": "0.0.0"
в мой пакет.json (не ссылается на расположение пути к файлу). Если я затем удалю установленную версию из node_modules и попытаюсь переустановить из пакета.json, он терпит неудачу (потому что он ищет "mymodule" в центральном реестре и не ищет локально).
Я уверен, что это способ говорить "dependencies": {}
структура, которую я хочу установить из пути к файловой системе, но не знаю как.
у кого - нибудь еще была эта проблема? Спасибо.
5 ответов
начиная с NPM 2.0.0 импорт локальных зависимостей поддерживается изначально. Это было задокументировано danilopopeye в ответ на аналогичный вопрос. Я скопировал его ответ здесь, чтобы помочь любому, кому нужно найти правильный ответ, так как этот вопрос занимает очень высокое место в результатах поиска Google.
эта функция была реализована в версии 2.0.0 npm. Например:
{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
любой из следующих путей также действительно:
../foo/bar ~/foo/bar ./foo/bar /foo/bar
посмотреть: локальная зависимость в пакете.в JSON
похоже, что ответ npm link
: https://docs.npmjs.com/cli/link
Я не мог найти аккуратный способ в конце, поэтому я пошел на создание каталога под названием local_modules
а затем добавил этот bashscript в пакет.json в скриптах - > предустановка
#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
packageJson="${i}/package.json"
if [ -f "${packageJson}" ]; then
echo "installing ${i}..."
npm install "${i}"
fi
done
после борьбы с npm link
command (предлагаемое решение для разработки локальных модулей без их публикации в реестре или сохранения отдельной копии в папке node_modules), я построил небольшой модуль npm, чтобы помочь с этой проблемой.
исправление требует два простых шага.
первый:
npm install lib-manager --save-dev
во-вторых, добавьте это в ваш package.json
:
{
"name": "yourModuleName",
// ...
"scripts": {
"postinstall": "./node_modules/.bin/local-link"
}
}
подробности на https://www.npmjs.com/package/lib-manager. Надеюсь, это кому-то поможет.
Если допустимо просто публиковать ваши модули, предустановленные в node_modules вместе с другими файлами, вы можете сделать это следующим образом:
// ./node_modules/foo/package.json
{
"name":"foo",
"version":"0.0.1",
"main":"index.js"
}
// ./package.json
...
"dependencies": {
"foo":"0.0.1",
"bar":"*"
}
// ./app.js
var foo = require('foo');
вы также можете сохранить свой модуль на git и сообщить свой родительский пакет.json для установки зависимости от git:https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies