Локальная зависимость в package.json
У меня есть следующая проблема: я хочу, чтобы команда npm install
также устанавливала package.json
из ../somelocallib
и, что более важно, его зависимости. Я пробовал добавить ../somelocallib
в секцию dependencies
в моем package.json
, как показано ниже:
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Но это не работает так, как ожидалось. Как мне правильно организовать установку локальной библиотеки и её зависимостей с помощью npm install
?
5 ответ(ов)
Это решает проблему для меня. Добавьте следующее в ваш файл package.json
:
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
Чтобы добавить локальные зависимости, используйте следующую команду:
npm install file:src/assets/js/FILE_NAME
Добавить зависимость в package.json через NPM:
npm install --save file:src/assets/js/FILE_NAME
Либо можно напрямую добавить в package.json следующим образом:
....
"angular2-autosize": "1.0.1",
"angular2-text-mask": "8.0.2",
"animate.css": "3.5.2",
"LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....
Если вы хотите еще больше автоматизировать этот процесс, особенно если вы загружаете свой модуль в систему контроля версий и не хотите полагаться на память разработчиков, чтобы они не забывали выполнять команду npm link
, вы можете добавить следующее в секцию "scripts" вашего package.json
:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
Хотя это может показаться немного хакерским решением, оно, похоже, "работает". Я получил этот совет из обсуждения по следующему вопросу в npm:
https://github.com/npm/npm/issues/1558#issuecomment-12444454
Обратите внимание, что использование таких подходов может привести к некоторым неожиданным последствиям, поэтому тестируйте это решение в своем проекте перед его распространением.
Ответ на вопрос о настройке проекта с зависимостями в Node.js
Вот пример конфигурации package.json
, который вы можете использовать для основного проекта:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Обратите внимание, что ./somelocallib
ссылается на папку с библиотекой относительно основного проекта package.json
.
Ссылка: Документация npm
Подпроект
Обработайте зависимости вашей библиотеки.
Кроме команды npm install
, вам также нужно будет выполнить следующую команду:
(cd node_modules/somelocallib && npm install)
Это известная проблема с NPM.
Ссылка: Проблема на GitHub (ждем более актуальной информации)
Заметки для Docker
Обязательно проверьте, чтобы в вашем репозитории были зафиксированы package-lock.json
из основного проекта и somelocallib/package-lock.json
.
Затем в вашем Dockerfile
используйте следующий код:
FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...
Я использую скобки в своих конструкциях (cd A && B)
, чтобы сделать операции идемпотентными.
В 2020 году, работая на Windows 10, я пытался подключить локальную библиотеку с помощью следующей конфигурации в package.json
:
"dependencies": {
"some-local-lib": "file:../../folderY/some-local-lib"
}
Но после выполнения команды npm install
в node_modules
создавался лишь ярлык на папку, а это, как оказалось, не работает. Для Windows требуется создать жёсткую ссылку, и хотя система это поддерживает, нужно сделать несколько дополнительных шагов.
Так как я не хотел использовать жёсткую ссылку, я решил попробовать указать путь в формате URL:
"dependencies": {
"some-local-lib": "file:///D:/folderX/folderY/some-local-lib.tar"
}
И это сработало отлично.
Тар-архив (нужно упаковать файлы из папки сборки или dist
вашей библиотеки) извлекается в настоящую папку внутри node_modules
, и импорировать библиотеку можно так же, как и любую другую.
Конечно, часть с архивацией немного неудобна, но так как 'some-local-lib' — это библиотека, которую всё равно нужно собирать, я предпочитаю это решение вместо создания жёсткой ссылки или установки локальной версии npm.
Как узнать версию установленного npm пакета?
В чем разница между --save и --save-dev?
Как задать переменные окружения из файла package.json?
Как использовать исполняемые файлы из пакета, установленного локально в node_modules?
Как найти неиспользуемые пакеты в package.json?