У меня есть загруженный репозиторий модуля, я хочу установить его локально, а не глобально в другой каталог?
Какой простой способ сделать это?
У меня есть загруженный репозиторий модуля, я хочу установить его локально, а не глобально в другой каталог?
Какой простой способ сделать это?
Ответы:
Из документации по 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-directoryIS../location-of-your-packages-root-directory/src/index.js