Я пытаюсь настроить узел на Mac OSX Lion. Кажется, все работает нормально, но я не могу импортировать какие-либо модули из моей глобальной папки модулей. Я получаю ошибку,
Error: Cannot find module <module>
Если я запускаю это:, node -e require.paths
я получаю ответ:
[ '/usr/local/lib/node_modules',
'/Users/Me/.node_modules',
'/Users/Me/.node_libraries',
'/usr/local/Cellar/node/0.4.12/lib/node' ]
Что верно, мои модули действительно установлены в / usr / local / lib / node_modules. Когда я пытаюсь запустить скрипт, я получаю следующее:
Error: Cannot find module 'socket.io'
at Function._resolveFilename (module.js:326:11)
at Function._load (module.js:271:25)
at require (module.js:355:19)
at Object.<anonymous> (/Users/Me/node/server.js:2:10)
at Module._compile (module.js:411:26)
at Object..js (module.js:417:10)
at Module.load (module.js:343:31)
at Function._load (module.js:302:12)
at Array.<anonymous> (module.js:430:10)
at EventEmitter._tickCallback (node.js:126:26)
Мой .bash_profile выглядит так:
export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"
Был бы очень признателен за помощь, я понятия не имею, почему я не могу импортировать какие-либо библиотеки.
npm link
) можно найти здесь: stackoverflow.com/a/15646750/2671392Ответы:
Если вы используете npm> = 1.0, вы можете использовать
npm link <global-package>
для создания локальной ссылки на пакет, уже установленный глобально. ( Предостережение: ОС должна поддерживать символические ссылки. )Однако это не без проблем.
В качестве альтернативы вы можете установить пакеты как локально, так и глобально.
Для получения дополнительной информации см.
источник
npm
кэш (который находится в~/.npm
) сделает целесообразным процесс переустановки, выполняемый в разных местах.Node.js использует переменную окружения,
NODE_PATH
чтобы указать дополнительные каталоги для включения в путь поиска модуля. Вы можете использоватьnpm
себя, чтобы сообщить вам, где глобальные модули хранятся с помощьюnpm root -g
команды. Соединяя эти два элемента, вы можете убедиться, что глобальные модули включены в ваш путь поиска с помощью следующей команды (в Linux-ish)export NODE_PATH=$(npm root --quiet -g)
источник
NODE_PATH
подсказку переменной окружения. Это очень помогло!NODE_PATH
эквивалентный путь posix, чтобы заставить npm работать на MSYS2. Спасибо..node_modules
папку доступной для поиска, но для того, чтобы импортировать модули с помощьюrequire()
, они все равно должны быть установлены в вашем локальном каталоге проекта (или, наоборот, связаны с использованиемnpm link
). Глобальные модули не могут быть импортированы в проекты, оттуда могут быть запущены только двоичные файлы / сценарии.Вы можете использовать ссылку npm для создания символической ссылки на ваш глобальный пакет в папке ваших проектов.
Пример:
Все, что он делает, это создает локальную папку node_modules, а затем создает символическую ссылку -> [глобальный каталог] / node_modules / express, которая затем может быть решена с помощью
require('express')
источник
Установите любой пакет глобально, как показано ниже:
Поскольку этот модуль замены установлен глобально, поэтому, если вы видите папку модулей вашего узла, вы не увидите там замену модуля, и поэтому вы не можете использовать этот пакет, используя require ('replace').
потому что с require вы можете использовать только локальные модули, которые присутствуют в папке вашего модуля узла.
Теперь, чтобы использовать глобальный модуль, вы должны связать его с путем к модулю узла, используя команду ниже.
Теперь вернитесь и посмотрите папку вашего модуля узла, теперь вы можете видеть там замену модуля и можете использовать его с требованием («заменить») в вашем приложении, так как он связан с вашим модулем локального узла.
Пожалуйста, дайте мне знать, если какие-либо дополнительные разъяснения необходимы.
источник
В качестве аргумента вы можете использовать require с путем к каталогу глобального модуля.
На моем Mac я использую это:
Как найти ваши глобальные модули? -> Где npm устанавливает пакеты?
источник
Установка переменной среды NODE_PATH, чтобы она указывала на вашу глобальную
node_modules
папку.В Windows 7 или выше путь похож на
%AppData%\npm\node_modules
то, что в UNIX может быть,/home/sg/.npm_global/lib/node_modules/
но зависит от конфигурации пользователя.Команда
npm config get prefix
может помочь определить правильный путь.В системах UNIX вы можете выполнить это с помощью следующей команды:
источник
Я использую Docker. Я пытаюсь создать образ Docker, в котором установлены все мои зависимости узлов, но я могу использовать мой локальный каталог приложений во время выполнения контейнера (без загрязнения его каталогом node_modules или ссылкой). Это вызывает проблемы в этом сценарии. Мой обходной путь должен требовать от точного пути, где модуль, например, требуют ('/ usr / local / lib / node_modules / socket.io')
источник
require.paths
устарела.Перейдите в папку вашего проекта и введите
он должен установить его в локальной папке ./node_modules, где его будет искать узел.
Я держу свои вещи так:
Создайте файл app.js
Теперь запустите мое приложение
Убедитесь, что вы используете
npm >= 1.0
иnode >= 4.0
.источник