У меня есть загруженный репозиторий модуля, я хочу установить его локально, а не глобально в другой каталог?
Какой простой способ сделать это?
У меня есть загруженный репозиторий модуля, я хочу установить его локально, а не глобально в другой каталог?
Какой простой способ сделать это?
Ответы:
Из документации по npm-ссылке :
В каталоге локального модуля:
$ 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
[Edit] Начиная с 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