как указать локальные модули в качестве зависимостей пакетов npm

у меня есть приложение, которое имеет обычный набор зависимостей от сторонних модулей (например, "express"), указанных в пакете.файл json в разделе зависимости. Е. Г.

"express"     : "3.1.1"

Я хотел бы структурировать свой собственный код модульно и иметь набор локальных (то есть в файловой системе, в которой я сейчас нахожусь) модулей, устанавливаемых пакетом.формат JSON. Я знаю, что могу установить локальный модуль, запустив:

npm install path/to/mymodule

однако, я не знаю, как это сделать через интернет пакет.структура зависимостей json. С помощью --save опция в этой команде просто ставит "mymodule": "0.0.0" в мой пакет.json (не ссылается на расположение пути к файлу). Если я затем удалю установленную версию из node_modules и попытаюсь переустановить из пакета.json, он терпит неудачу (потому что он ищет "mymodule" в центральном реестре и не ищет локально).

Я уверен, что это способ говорить "dependencies": {} структура, которую я хочу установить из пути к файловой системе, но не знаю как.

у кого - нибудь еще была эта проблема? Спасибо.

5 ответов


начиная с NPM 2.0.0 импорт локальных зависимостей поддерживается изначально. Это было задокументировано danilopopeye в ответ на аналогичный вопрос. Я скопировал его ответ здесь, чтобы помочь любому, кому нужно найти правильный ответ, так как этот вопрос занимает очень высокое место в результатах поиска Google.

эта функция была реализована в версии 2.0.0 npm. Например:

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

любой из следующих путей также действительно:

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

посмотреть: локальная зависимость в пакете.в JSON

похоже, что ответ npm link: https://docs.npmjs.com/cli/link


Я не мог найти аккуратный способ в конце, поэтому я пошел на создание каталога под названием local_modules а затем добавил этот bashscript в пакет.json в скриптах - > предустановка

#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
    packageJson="${i}/package.json"
    if [ -f "${packageJson}" ]; then
        echo "installing ${i}..."
        npm install "${i}"
    fi
done

после борьбы с npm link command (предлагаемое решение для разработки локальных модулей без их публикации в реестре или сохранения отдельной копии в папке node_modules), я построил небольшой модуль npm, чтобы помочь с этой проблемой.

исправление требует два простых шага.

первый:

npm install lib-manager --save-dev

во-вторых, добавьте это в ваш package.json:

{  
  "name": "yourModuleName",  
  // ...
  "scripts": {
    "postinstall": "./node_modules/.bin/local-link"
  }
}

подробности на https://www.npmjs.com/package/lib-manager. Надеюсь, это кому-то поможет.


Если допустимо просто публиковать ваши модули, предустановленные в node_modules вместе с другими файлами, вы можете сделать это следующим образом:

// ./node_modules/foo/package.json
{ 
  "name":"foo",
  "version":"0.0.1",
  "main":"index.js"
}

// ./package.json
...
"dependencies": {
  "foo":"0.0.1",
  "bar":"*"
}

// ./app.js
var foo = require('foo');

вы также можете сохранить свой модуль на git и сообщить свой родительский пакет.json для установки зависимости от git:https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies