Как импортировать глобальные модули в 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. Но это рассматривается как среда разработки по нескольким причинам:

  1. yarn build или npm run build для комплектации приложения React для производства. Для этого не требуется отдельно устанавливать пакеты npm в производственной среде. Вы можете добиться этого с помощью веб-пакета

  2. Нам легче поддерживать среду разработки в одном месте для разных проектов приложений 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.