Укажите путь к узловым модулям в пакете.формат JSON



есть ли способ переместить каталог node_modules в приложении, скажем, /vendor / node_modules, как bower делает с файлом bowerrc? Я думал, что это может быть указано в пакете.JSON, но я не могу показаться, чтобы найти решение. Ваша помощь очень ценится.

639   3  

3 ответов:

да, вы можете, просто установите переменную node_path env:

export NODE_PATH='yourdir'/node_modules

согласно документу :

если переменная среды NODE_PATH установлена в список с разделителями-двоеточиями абсолютных путей, то узел будет искать эти пути для модулей, если они нигде не встречаются. (Примечание: В Windows, NODE_PATH-это разделенные точкой с запятой вместо двоеточия.)

кроме того, узел будет искать в следующих местах:

1: $ДОМАШНИЙ./папки node_modules

2: $HOME/.node_libraries

3: $ PREFIX/lib / node

где $HOME-домашний каталог пользователя, а $PREFIX-узел настроил node_prefix.

это в основном по историческим причинам. вам настоятельно рекомендуется поместите свои зависимости локально в папки node_modules. они будут загружается быстрее, и надежнее.

источник

короче говоря: это невозможно, и, как кажется, никогда не будет поддерживаться (см. здесь https://github.com/npm/npm/issues/775).

есть некоторые hacky work-arrounds с использованием CLI или ENV-переменных (см. текущий выбранный ответ), .npmrc-Config-Files или npm link - что у них всех есть общего: они никогда не являются просто конкретными проектами, но всегда своего рода global решений.

для меня ни одно из этих решений не является действительно чистым, потому что участники вашего проекта всегда должны создавать какую - то специальную конфигурацию или иметь какие-то специальные знания-они не могут просто npm install и это работает.

Итак: либо вам придется положить свой пакет.json в том же каталоге, где вы хотите установить свои node_modules, или жить с тем, что они всегда будут в корневом каталоге вашего проекта.

я не уверен, что это то, что вы имели в виду, но я в конечном итоге на этот вопрос, потому что я не смог установить node_modules внутри моего проекта dir, поскольку он был смонтирован на файловой системе, которая не поддерживала символические ссылки (папка VM "shared").

я нашел следующее решение:

  1. скопировать project.json файл во временную папку в другой файловой системе
  2. выполнить npm install здесь
  3. скопировать полученный 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

Comments

    Ничего не найдено.