Как импортировать глобальные модули в Node?Я получаю сообщение "Ошибка: не удается найти модуль <module>"? - PullRequest
126 голосов
/ 01 ноября 2011

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

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

Ответы [ 8 ]

103 голосов
/ 01 ноября 2011

Если вы используете npm> = 1.0, вы можете использовать npm link <global-package> для создания локальной ссылки на пакет, уже установленный глобально. ( Предупреждение: ОС должна поддерживать символические ссылки. )

Однако, это не без проблем.

npm link - это инструмент разработки. Это потрясающе для управления пакетами в вашей локальной системе разработки. Но развертывание по ссылке npm в основном вызывает проблемы, так как позволяет очень просто обновлять вещи, не осознавая этого.

В качестве альтернативы вы можете установить пакеты как локально, так и глобально.

Для получения дополнительной информации см.

60 голосов
/ 27 апреля 2014

Вы можете использовать ссылку npm для создания символической ссылки на ваш глобальный пакет в папке проектов.

Пример:

$ npm install -g express
$ cd [local path]/project
$ npm link express

Все, что он делает, это создает локальную папку node_modules, а затемсоздать символическую ссылку -> [глобальный каталог] / node_modules / express, которая затем может быть решена с помощью require('express')

55 голосов
/ 19 апреля 2017

Node.js использует переменную среды NODE_PATH, чтобы указать дополнительные каталоги для включения в путь поиска модуля.Вы можете использовать npm, чтобы сообщить, где хранятся глобальные модули, с помощью команды npm root -g.Соединяя эти два элемента, вы можете убедиться, что глобальные модули включены в ваш путь поиска с помощью следующей команды (в Linux-ish)

export NODE_PATH=$(npm root --quiet -g)

20 голосов
/ 27 ноября 2015

Установите любой пакет глобально, как показано ниже:

$ npm install -g replace  // replace is one of the node module.

Поскольку этот модуль замены установлен глобально, поэтому, если вы видите папку модулей вашего узла, вы не увидите там замену модуля, и поэтому вы не можете использовать этот пакет, используя require ('replace').

потому что с require вы можете использовать только локальные модули, которые присутствуют в папке вашего модуля узла.

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

$ npm link replace

Теперь вернитесь и посмотрите папку вашего модуля узла, теперь вы можете видеть там замену модуля и можете использовать его с require ('replace') в вашем приложении, так как он связан с вашим модулем локального узла.

Пожалуйста, дайте мне знать, если понадобятся какие-либо дополнительные разъяснения.

11 голосов
/ 15 сентября 2016

Вы можете использовать require с путем к каталогу глобального модуля в качестве аргумента.

require('/path/to/global/node_modules/the_module');

На моем Mac я использую это:

require('/usr/local/lib/node_modules/the_module');

Как найти ваши глобальные модули? -> Где npm устанавливает пакеты?

1 голос
/ 28 мая 2018

Установка переменной среды 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/
0 голосов
/ 28 января 2016

Я использую Docker. Я пытаюсь создать образ Docker, в котором установлены все мои зависимости узлов, но я могу использовать мой локальный каталог приложений во время выполнения контейнера (без загрязнения его каталогом node_modules или ссылкой). Это вызывает проблемы в этом сценарии. Мой обходной путь должен требовать от точного пути, где модуль, например. требуется ( '/ USR / местные / Библиотека / node_modules / socket.io')

0 голосов
/ 01 ноября 2011

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...