Как импортировать глобальные модули в узел? Я получаю "ошибка: не удается найти модуль "?



Я пытаюсь настроить узел на 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/"


был бы очень признателен за помощь, я понятия не имею, почему я не могу импортировать библиотеки.

674   8  

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

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