Есть ли способ переместить каталог node_modules в приложение, чтобы сказать say/vendor/node_modules как bower делает с файлом bowerrc? Я думал, что это может быть указано в package.json, но я не могу найти решение. Ваша помощь очень ценится.
Укажите путь к node_modules в package.json
Ответ 1
да, вы можете, просто установите переменную env NODE_PATH:
export NODE_PATH='yourdir'/node_modules
Согласно документу:
Если переменная среды NODE_PATH установлена в список с разделителями двоеточия абсолютных путей, то node будет искать эти пути для модулей, если они не найдены нигде. (Примечание. В Windows NODE_PATH разделенных точкой с запятой, а не двоеточиями.)
Кроме того, node будет искать в следующих местах:
1: $HOME/.node_modules
2: $HOME/.node_libraries
3: $PREFIX/lib/ node
Где $HOME является домашним каталогом пользователя, а $PREFIX - node. сконфигурированный node_prefix.
Это в основном по историческим причинам. Вам настоятельно рекомендуется разместите свои зависимости локально в папках node_modules.. Они будут загружаются быстрее и надежнее.
Ответ 2
Вкратце: это невозможно, и, как кажется, никогда не будет поддерживаться (см. здесь https://github.com/npm/npm/issues/775).
Есть некоторые хакеры с использованием CLI или ENV-Variables (см. текущий выбранный ответ),.npmrc-Config-Files или npm link
- все, что у всех их есть: они никогда не просто проектно- но всегда есть своего рода global
Решения.
Для меня ни одно из этих решений не является чистым, потому что вкладчикам вашего проекта всегда нужно создать специальную конфигурацию или получить некоторые специальные знания - они не могут просто npm install
и это работает.
Итак: либо вам придется поместить ваш пакет .json в тот же каталог, где вы хотите установить ваш node_modules, либо жить с тем фактом, что они всегда будут в корневом каталоге вашего проекта.
Ответ 3
Я не уверен, что это то, что вы имели в виду, но я закончил этот вопрос, потому что мне не удалось установить node_modules
внутри моего проекта dir, поскольку он был установлен в файловой системе, которая не поддерживала символические ссылки ( папка с общим доступом VM.
Я нашел следующее обходное решение:
- Скопируйте файл
project.json
в временную папку в другой файловой системе. - Запустите
npm install
там - Скопируйте полученный каталог
node_modules
обратно в каталог проекта, используяcp -r --dereference
, чтобы развернуть символические ссылки в копии.
Я надеюсь, что это поможет кому-то еще, кто закончит этот вопрос, когда вы ищете способ переместить node_modules
в другую файловую систему.
Другие опции
Существует другое обходное решение, которое Я обнаружил в проблеме github, что @Charminbear связан с, но это не работает с grunt
потому что он не поддерживает NODE_PATH
по https://github.com/browserify/resolve/issues/136:
позволяет сказать, что у вас есть
/media/sf_shared
, и вы не можете установить символические ссылки в там, что означает, что вы не можете установить npm из/media/sf_shared/myproject
, потому что некоторые модули используют символические ссылки.
$ mkdir /home/dan/myproject && cd /home/dan/myproject
$ ln -s /media/sf_shared/myproject/package.json
(вы можете символически ссылаться в этом направление, просто не может создать один внутри /media/sf _shared)$ npm install
$ cd /media/sf_shared/myproject
$ NODE_PATH=/home/dan/myproject/node_modules node index.js