Как импортировать глобальные модули в Node? Я получаю "Ошибка: не могу найти модуль <module>"?
Я пытаюсь настроить Node на 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. Однако, когда я пытаюсь запустить script, я получаю следующее:
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/"
Было бы очень полезно помочь, я понятия не имею, почему я не могу импортировать какие-либо библиотеки.
Ответы
Ответ 1
Если вы используете npm >= 1.0, вы можете использовать npm link <global-package>
для создания локальной ссылки на пакет, уже установленный глобально. (Предостережение: ОС должна поддерживать символические ссылки.)
Однако это не происходит без его проблем.
npm link - это инструмент разработки. Это потрясающе для управления пакетами в локальном окне разработки. Но развертывание с помощью ссылки на npm в основном задает проблемы, так как это упрощает обновление, не осознавая этого.
В качестве альтернативы вы можете устанавливать пакеты как локально, так и глобально.
Дополнительную информацию см. в
Ответ 2
Вы можете использовать ссылку npm для создания символической ссылки на ваш глобальный пакет в папке проектов.
Пример:
$ npm install -g express
$ cd [local path]/project
$ npm link express
Все, что он делает, это создать локальную папку node_modules, а затем создать символическую ссылку express → [global directory]/node_modules/express, которая затем может быть разрешена с помощью require('express')
Ответ 3
Node.js использует переменную окружения NODE_PATH
, чтобы указать дополнительные каталоги для включения в путь поиска модуля. Вы можете использовать npm
, чтобы сообщить вам, где хранятся глобальные модули с помощью команды npm root -g
. Поэтому, поставив эти два вместе, вы можете убедиться, что глобальные модули включены в ваш путь поиска со следующей командой (на Linux-ish)
export NODE_PATH=$(npm root --quiet -g)
Ответ 4
Установите любой пакет по всему миру, как показано ниже:
$ npm install -g replace // replace is one of the node module.
Поскольку этот модуль замены устанавливается глобально, поэтому, если вы видите свою папку с модулем node, вы не увидите там модуля замены, и поэтому вы не сможете использовать этот пакет, используя require ('replace').
так как при необходимости вы можете использовать только локальные модули, которые присутствуют в папке модуля node.
Теперь, чтобы использовать глобальный модуль, вы должны связать его с путём node с помощью команды ниже.
$ npm link replace
Теперь вернитесь назад и посмотрите свою папку с модулем node, теперь вы можете увидеть модуль замены там и можете использовать его с требованием ( "заменить" ) в своем приложении, поскольку оно связано с вашим локальным модулем node.
Pls сообщит мне, требуется ли дальнейшее уточнение.
Ответ 5
В качестве аргумента вы можете использовать require с пути к глобальной директории модуля.
require('/path/to/global/node_modules/the_module');
На моем mac я использую это:
require('/usr/local/lib/node_modules/the_module');
Как найти, где находятся ваши глобальные модули? → Где npm устанавливает пакеты?
Ответ 6
Установка переменной среды NODE_PATH, чтобы она указывала на вашу глобальную папку node_modules
.
В Windows 7 или более %AppData%\npm\node_modules
версии это что-то вроде %AppData%\npm\node_modules
то время как в UNIX это может быть что-то вроде /home/sg/.npm_global/lib/node_modules/
но это зависит от конфигурации пользователя.
npm config get prefix
команды npm config get prefix
может помочь определить правильный путь.
В системах UNIX вы можете выполнить это с помощью следующей команды:
export NODE_PATH='npm config get prefix'/lib/node_modules/
Ответ 7
Я использую Docker. Я пытаюсь создать образ докера, который установил все мои зависимости node, но может использовать локальный каталог приложения во время выполнения контейнера (без загрязнения его с помощью каталога или ссылки node_modules). Это вызывает проблемы в этом сценарии. Мое обходное решение требует от точного пути, где модуль, например. требуется ( '/USR/локальные/Library/node_modules/socket.io')
Ответ 8
Я работаю в среде разработчиков с открытым исходным кодом, которая нацелена на React, размещенный в образе Docker. Он использует глобально установленные пакеты NPM. Но это рассматривается как среда разработки по нескольким причинам:
-
yarn build или npm run build для комплектации приложения React для производства. Для этого не требуется отдельно устанавливать пакеты npm в производственной среде. Вы можете добиться этого с помощью веб-пакета
-
Нам легче поддерживать среду разработки в одном месте для разных проектов приложений React. Только один раз вам нужно связать deps с приложением React, используя ссылку "npm".
Если вы хотите внести свой вклад или получить выгоду от нашего имиджа реагирующего Docker, присоединяйтесь к нам по адресу:
https://github.com/andreasreuter/docker-reactjs https://hub.docker.com/r/andreasreuter/reactjs
Ответ 9
require.paths
устарела.
Перейдите в папку вашего проекта и введите
npm install socket.io
он должен установить его в локальной папке. /node_modules, где его будет искать узел.
Я держу свои вещи так:
cd ~/Sites/
mkdir sweetnodeproject
cd sweetnodeproject
npm install socket.io
Создайте файл app.js
// app.js
var socket = require('socket.io')
Теперь запустите мое приложение
node app.js
Убедитесь, что вы используете npm >= 1.0
и node >= 4.0
.