Как импортировать глобальные модули в узел? Я получаю "ошибка: не удается найти модуль "?
Я пытаюсь настроить узел на 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)
мой .файл выглядит как это:
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/"
был бы очень признателен за помощь, я понятия не имею, почему я не могу импортировать библиотеки.
8 ответов:
Если вы используете npm >=1.0, вы можете использовать
npm link <global-package>создать локальную ссылку на пакет уже установлен во всем мире. (предостережение: ОС должна поддерживать символические ссылки.)однако, это не без его проблем.
npm link-это инструмент разработки. Это высокий для управления пакетами на вашем локальном поле разработки. Но развертывание с помощью npm link в основном требует проблем, так как это делает его очень легким для обновления вещей не осознавая этого.
в качестве альтернативы, вы можете установить пакеты локально, так и глобально.
дополнительная информация
вы можете использовать npm link для создания символической ссылки на глобальный пакет в папке проектов.
пример:
$ npm install -g express $ cd [local path]/project $ npm link expressвсе, что он делает, это создать локальную папку node_modules, а затем создать symlink express - > [глобальный каталог] / node_modules / express, который затем может быть разрешен с помощью
require('express')
узел.js использует переменную окружения
NODE_PATHразрешить указание дополнительных каталогов для включения в путь поиска модуля. Вы можете использоватьnpmсам, чтобы сказать вам, где хранятся глобальные модули с . Таким образом, собрав эти два вместе, вы можете убедиться, что глобальные модули включены в ваш путь поиска с помощью следующей команды (на Linux-ish)
export NODE_PATH=$(npm root --quiet -g)
установите любой пакет глобально, как показано ниже:
$ npm install -g replace // replace is one of the node module.поскольку этот модуль замены установлен глобально, поэтому, если вы видите папку модулей узла, вы не увидите там модуль замены, и поэтому вы не можете использовать этот пакет, используя require('replace').
потому что с require вы можете использовать только локальные модули, которые присутствуют в папке модуля узла.
теперь, чтобы использовать глобальный модуль, вы должны связать его с путем модуля узла, используя ниже команда.
$ npm link replaceтеперь вернитесь и посмотрите папку модуля узла теперь вы можете увидеть заменить модуль там и можете использовать его с require('replace') в вашем приложении, поскольку он связан с вашим локальным модулем узла.
Pls дайте мне знать, если какие-либо дополнительные разъяснения необходимы.
вы можете использовать require с путем к глобальному каталогу модуля в качестве аргумента.
require('/path/to/global/node_modules/the_module');на моем mac, я использую это:
require('/usr/local/lib/node_modules/the_module');Как найти, где находятся ваши глобальные модули? -- > где npm устанавливает пакеты?
установка переменной окружения NODE_PATH для указания на ваш глобальный
node_modulesпапка.в Windows 7 или выше путь-это что-то вроде
%AppData%\npm\node_modulesв то время как в UNIX может быть что-то вроде/home/sg/.npm_global/lib/node_modules/но это зависит от конфигурации пользователя.команда
npm config get prefixможет помочь выяснить, какой правильный путь.в системах UNIX вы можете выполнить это с помощью следующей команды:
export NODE_PATH=`npm config get prefix`/lib/node_modules/
Я использую Докер. Я пытаюсь создать образ docker, в котором установлены все мои зависимости узлов, но можно использовать мой локальный каталог приложений во время выполнения контейнера (не загрязняя его каталогом или ссылкой node_modules). Это вызывает проблемы в этом случае. Мой обходной путь должен требовать от точного пути, где модуль, например, требует ('/usr / local / lib/node_modules / socket.io')
require.pathsустарела.перейдите в папку проекта и введите
npm install socket.ioэто должно установить его в локальном ./ node_modules папка, где узел будет искать его.
Я держу свои вещи вот так:
cd ~/Sites/ mkdir sweetnodeproject cd sweetnodeproject npm install socket.ioсоздать приложение.js file
// app.js var socket = require('socket.io')теперь запустите мое приложение
node app.jsубедитесь, что вы используете
npm >= 1.0иnode >= 4.0.
Comments