Локальная зависимость в package.json

Я хочу сделать что-то вроде этого, поэтому npm install также устанавливает package.json из ../somelocallib или, что более важно, его зависимости.

"dependencies": {
    "express": "*",
    "../somelocallib": "*"
}

Ответ 1

Обновление 2014-сентябрь

Эта функция была реализована в версии 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)

Ответ 2

Теперь можно указывать локальные пути установки модуля 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, когда вы не хотите подключаться к внешнему серверу, но не должны использоваться при публикации пакетов в публичном реестре.

Ответ 3

Это работает для меня.

Поместите в файл package.json следующее:

"scripts": {
    "preinstall": "npm install ../my-own-module/"
}

Ответ 4

Если вы хотите еще больше автоматизировать это, потому что вы проверяете свой модуль на контроль версий и не хотите полагаться на разработчиков, помнящих ссылку на npm, вы можете добавить это в свой раздел "scripts" package.json:

"scripts": {
    "postinstall": "npm link ../somelocallib",
    "postupdate": "npm link ../somelocallib"
  }

Это кажется не просто хакерским, но, похоже, "работает". Получил совет от этой проблемы npm:https://github.com/npm/npm/issues/1558#issuecomment-12444454

Ответ 5

Вот как вы добавите локальные зависимости:

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"
....

Ответ 6

Мастер-проект

Вот файл 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 (требуется более свежая ссылка)


Примечания для Docker

Проверьте своего мастера 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), чтобы сделать операцию идемпотентной.

Ответ 8

Я знаю, что npm install ../somelocallib работает.

Однако, я не знаю, будет ли синтаксис, который вы показываете в вопросе, будет работать от package.json...

К сожалению, doc, похоже, упоминает только URL как зависимость.

Попробуйте file:///.../...tar.gz, указав на zipped local lib... и сообщите нам, если он работает.

Ответ 9

Это сработало для меня: во-первых, убедитесь, что в каталогах 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" : "*"
}

Ответ 10

На самом деле, начиная с npm 2.0, теперь поддерживаются локальные пути (см. здесь).

Ответ 11

Любопытный..... по крайней мере на 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) сидят на том же уровне.......