it-swarm.com.ru

Установка локального модуля с помощью npm?

У меня есть загруженный репозиторий модуля, я хочу установить его локально, а не глобально в другой каталог?

Какой простой способ сделать это?

332
fancy

вы просто предоставляете один аргумент <folder> для npm install , аргумент должен указывать на локальную папку вместо имени пакета:

npm install /path
333
fancy

Из документация по npm-ссылке :

В каталоге локального модуля:

$ cd ./package-dir
$ npm link

В каталоге проекта используется модуль:

$ cd ./project-dir
$ npm link package-name

Или за один раз, используя относительные пути:

$ cd ./project-dir
$ npm link ../package-dir

Это эквивалентно использованию двух команд выше под капотом.

420
Rich Apodaca

Поскольку один и тот же человек спросил и ответил, я добавлю ссылка на 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"
  }
129
Luke W

Ни один из этих подходов (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"
  }

В этом сценарии npm устанавливает 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, либо нам нужен способ указать npm установить copymymodule, когда Синтаксис файловой зависимости используется в package.json. К сожалению, я не нашел способа сделать это :(

4
Paul Medynski