Как указать локальные модули как зависимости пакетов npm
У меня есть приложение, которое имеет обычный набор зависимостей от сторонних модулей (например, "экспресс" ), указанных в файле package.json в зависимостях. Например.
"express" : "3.1.1"
Я хотел бы структурировать свой собственный код модульно и иметь набор локальных (то есть в файловой системе, в которых я нахожусь), модули будут установлены пакетом .json. Я знаю, что я могу установить локальный модуль, запустив:
npm install path/to/mymodule
Однако я не знаю, как это сделать через структуру зависимостей package.json. Использование опции --save
в этой команде просто помещает "mymodule": "0.0.0"
в мой пакет package.json(не ссылается на местоположение файла). Если я удаляю установленную версию из node_modules и пытаюсь переустановить из package.json, она терпит неудачу (потому что она ищет "mymodule" в центральном реестре и не выглядит локально).
Я уверен, что это способ сообщить структуре "dependencies": {}
, что я хочу, чтобы она была установлена из пути к файловой системе, но не знаю, как это сделать.
У кого-нибудь была эта проблема?
Спасибо.
Ответы
Ответ 1
Начиная с 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
Ответ 2
Смотрите: Локальная зависимость в package.json
Похоже, что ответ npm link
: https://npmjs.org/doc/cli/npm-link.html
Ответ 3
В конце концов, я не мог найти опрятный способ, поэтому я пошел на создание каталога под названием local_modules
, а затем добавил этот bashscript к package.json в scripts- > preinstall
#!/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
Ответ 4
Если вы можете просто публиковать свои модули, предварительно установленные в 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
Ответ 5
После многого с командой npm link (предлагаемое решение для разработки локальных модулей, не публикуя их в реестре или поддерживая отдельную копию в папке node_modules), я построил небольшой модуль npm, чтобы помочь с этой проблемой: https://www.npmjs.com/package/lib-manager
Надеюсь, что это поможет кому-то.