Відповіді:
З документації npm-link :
У каталозі локального модуля:
$ cd ./package-dir
$ npm link
У каталозі проекту використовувати модуль:
$ cd ./project-dir
$ npm link package-name
Або за один раз, використовуючи відносні шляхи:
$ cd ./project-dir
$ npm link ../package-dir
Це еквівалентно використанню двох команд вище під кришкою.
npm link
це створить другий примірник зовнішніх залежностей. Отже, якщо у вас є пакет A, потрібні B і C, B потрібен C. Пов’язання B призведе до того, що додаток A має два екземпляри C.
ви просто надаєте один <folder>
аргумент npm install
, аргумент повинен вказувати на локальну папку замість імені пакета:
npm install /path
rm -rf node_modules
і npm install
після запуску сценарію відповіді.
Оскільки одна і та сама особа запитала і відповіла, я додаю посилання npm як альтернативу.
від документів:
Це зручно для встановлення власних речей, так що ви можете працювати над ним та ітеративно перевіряти його без необхідності постійно відновлювати.
cd ~/projects/node-bloggy # go into the dir of your main project
npm link ../node-redis # link the dir of your dependency
[Редагувати] Станом на NPM 2.0 ви можете оголосити локальні залежності в package.json
"dependencies": {
"bar": "file:../foo/bar"
}
npm link
один раз проти папки (щоб створити глобальне символьне посилання), а потім запустити npm link package-name
всередині папки проекту (щоб використовувати глобальне посилання у вашому проекті). Відповідь нижче - правильна відповідь.
file:
підходу) дозволив моєму додатку та локальному модулю поділитися залежністю. Мій тест npm link
призвів до повторної залежності, яка порушує ситуацію, якщо залежність потрібно використовувати як синглтон.
npm pack
+ package.json
Це для мене працювало:
module project
Виконайте npm pack
:Це створить <package-name>-<version>.tar.gz
файл.
consumer project
В ідеалі ви можете помістити всі такі файли в tmp
папку у вашому consumer-project
корені:
package.json
:"dependencies": {
"my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}
Install
пакети:npm install
або npm i
абоyarn
consumer-project's node_modules
папці.Щасти...
Жоден із цих підходів ( npm link
або package.json
залежність від файлів) не працює, якщо локальний модуль має однорангові залежності, які ви хочете встановити лише в межах проекту.
Наприклад:
/local/mymodule/package.json:
"name": "mymodule",
"peerDependencies":
{
"foo": "^2.5"
}
/dev/myproject/package.json:
"dependencies":
{
"mymodule": "file:/local/mymodule",
"foo": "^2.5"
}
В цьому випадку, НПМ встановлює myproject
«S , node_modules/
як це:
/dev/myproject/node_modules/
foo/
mymodule -> /local/mymodule
Коли вузол завантажується mymodule
і він це робить require('foo')
, вузол розв'язує mymodule
симпосилання, а потім лише шукає /local/mymodule/node_modules/
(та його предків), для foo
чого він не знаходить. Натомість ми хочемо заглянути у вузол /local/myproject/node_modules/
, оскільки саме звідки був запущений наш проект, і де foo
встановлено.
Таким чином, ми або потрібен спосіб , щоб повідомити вузлу НЕ вирішити цю символьне посилання при пошуку foo
, або нам потрібен спосіб , щоб сказати НПМ встановити копію з mymodule
коли синтаксис файлу залежностей використовується в package.json
. Я, на жаль, не знайшов способу зробити це :(
NODE_PATH
потрібно вказати на те, node_modules/
де foo
встановлено. Отже, для вищезазначеного випадку було б так: NODE_PATH=/dev/myproject/node_modules/
Це дозволяє mymodule
знайти foo
.
Як відповіли попередні люди npm --save ../location-of-your-packages-root-directory
. ../location-of-your-packages-root-directory
Однак необхідно мати дві речі для того , щоб працювати.
1) package.json
у цьому каталозі, що вказував на бік
2) main
майно в package.json
повинен бути встановлений і працює І.Г. , "main": "src/index.js",
якщо файл запису для ../location-of-your-packages-root-directory
IS../location-of-your-packages-root-directory/src/index.js