как указать локальные модули в качестве зависимостей пакетов npm
у меня есть приложение, которое имеет обычный набор зависимостей от сторонних модулей (например, "экспресс"), указанному в пакете.файл 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
после борьбы много с (предлагаемое решение для разработки локальных модулей без публикации их в реестре или поддержания отдельной копии в папке 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
Comments