Я хочу сделать что-то вроде этого, поэтому npm install
также устанавливает package.json
из ../somelocallib
или, что более важно, его зависимости.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Я хочу сделать что-то вроде этого, поэтому npm install
также устанавливает package.json
из ../somelocallib
или, что более важно, его зависимости.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Эта функция была реализована в версии 2.0.0 npm. Пример:
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
Также допустим любой из следующих путей:
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
Локальный пакет будет скопирован в префикс prefix (./node-modules
).
Поместите somelocallib
в качестве зависимости в package.json
как обычно:
"dependencies": {
"somelocallib": "0.0.x"
}
Затем запустите npm link ../somelocallib
, и npm установит версию, над которой вы работаете, как символическую ссылку.
[email protected] /private/tmp/app
└── [email protected] -> /private/tmp/somelocallib
Ссылка: ссылка (1)
Теперь можно указывать локальные пути установки модуля Node непосредственно в ваш package.json
. Из документов:
Местные Пути
Начиная с версии 2.0.0 вы можете указать путь к локальному каталогу, в котором находится пакет. Локальные пути можно сохранить с помощью
npm install -S
илиnpm install --Save
, используя любую из следующих форм:../foo/bar ~/foo/bar ./foo/bar /foo/bar
в этом случае они будут нормализованы по относительному пути и добавлены в ваш
package.json
. Например:{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
Эта функция полезна для локальной автономной разработки и создания тестов, которые требуют установки npm, когда вы не хотите подключаться к внешнему серверу, но не должны использоваться при публикации пакетов в публичном реестре.
Это работает для меня.
Поместите в файл package.json следующее:
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
Если вы хотите еще больше автоматизировать это, потому что вы проверяете свой модуль на контроль версий и не хотите полагаться на разработчиков, помнящих ссылку на npm, вы можете добавить это в свой раздел "scripts" package.json:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
Это кажется не просто хакерским, но, похоже, "работает". Получил совет от этой проблемы npm:https://github.com/npm/npm/issues/1558#issuecomment-12444454
Вот как вы добавите локальные зависимости:
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"
....
Вот файл package.json, который вы будете использовать для мастер-проекта:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Там ./somelocallib
- ссылка на папку библиотеки по отношению к основному проекту package.json.
Ссылка: https://docs.npmjs.com/files/package.json#local-paths
Обработайте ваши библиотечные зависимости.
В дополнение к запуску npm install
вам потребуется запустить (cd node_modules/somelocallib && npm install)
.
Это известная ошибка в NPM.
Ссылка: https://github.com/npm/npm/issues/1341 (требуется более свежая ссылка)
Проверьте своего мастера package.lock
и своего somelocallib/package.lock
в менеджере исходного кода.
Затем в вашем 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)
, чтобы сделать операцию идемпотентной.
Два шага для полной локальной разработки:
Я знаю, что npm install ../somelocallib
работает.
Однако, я не знаю, будет ли синтаксис, который вы показываете в вопросе, будет работать от package.json
...
К сожалению, doc, похоже, упоминает только URL как зависимость.
Попробуйте file:///.../...tar.gz
, указав на zipped local lib... и сообщите нам, если он работает.
Это сработало для меня: во-первых, убедитесь, что в каталогах npm есть правильный пользователь
sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules
Затем ваш в вашем package.json связывается с каталогом
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
На самом деле, начиная с npm 2.0, теперь поддерживаются локальные пути (см. здесь).
Любопытный..... по крайней мере на Windows (мой npm - 3.something) Мне нужно было сделать:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
Когда я сделал npm install ../module1 --save
, это привело к абсолютным путям, а не относительным в документации.
Я немного перепутал и решил, что ../xxx
было достаточно.
В частности, я проверил локальные модули node, чтобы сказать d:\build\module1, d:\build\module2 и мой node проект (приложение) в d:\build\nodeApp.
Чтобы установить ', I:
d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
module1 package.json имеет зависимость от "module2": "../module2"; module2 не имеет локальной зависимости; nodeApp имеет зависимости "module1": "../module1" и "module2": "../module2".
Не уверен, что это работает только для меня, так как все 3 папки (module1, module2 и nodeApp) сидят на том же уровне.......