node.js не может найти модуль xml2js - PullRequest
19 голосов
/ 19 февраля 2011

Я подал заявку на мою машину, и она работает хорошо.Я загрузил его на сервер, и он вылетает со следующей ошибкой:

node.js:116
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Cannot find module 'xml2js'
    at Function._resolveFilename (module.js:289:11)
    at Function._load (module.js:241:25)
    at require (module.js:317:19)
    at Object.<anonymous> (/var/www/node/price/index.js:3:14)
    at Module._compile (module.js:373:26)
    at Object..js (module.js:379:10)
    at Module.load (module.js:305:31)
    at Function._load (module.js:271:10)
    at Array.<anonymous> (module.js:392:10)
    at EventEmitter._tickCallback (node.js:108:26)

Вот так запускается мое приложение:

var express=require('express');
var http=require('http');
var xml2js = require('xml2js');
var sys = require('sys');
var util = require('util');

Я установил Express и xml2js, используя npm,У меня точно такая же версия (v0.4.0) для узла на моей машине и на моем сервере.

Я убедился, что путь wher xml2js и express reside (/ usr / local / lib / node /)включены в пути, где узел ищет модули.(Я отредактировал файл 'module.js', чтобы распечатать пути, где он ищет модули.)

node.js:116
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Cannot find module 'xml2js', in paths: /root/.node_modules,/root/.node_libraries,/usr/local/lib/node,/var/www/node/price/node_modules,/var/www/node/node_modules,/var/www/node_modules,/var/node_modules,/node_modules
    at Function._resolveFilename (module.js:289:11)
    at Function._load (module.js:241:25)
    at require (module.js:317:19)
    at Object.<anonymous> (/var/www/node/price/index.js:3:14)
    at Module._compile (module.js:373:26)
    at Object..js (module.js:379:10)
    at Module.load (module.js:305:31)
    at Function._load (module.js:271:10)
    at Array.<anonymous> (module.js:392:10)
    at EventEmitter._tickCallback (node.js:108:26)

Так что же не так?У меня правильный путь, модуль есть.Почему узел не может найти его?И точно такой же код работает на моей локальной машине.Если это имеет значение, мой компьютер - Mac, а на сервере работает CentOS.

Ответы [ 8 ]

17 голосов
/ 08 июля 2012
require.paths.push('/usr/local/lib/node_modules');

больше не действует для узла v0.8.1 и выше.Вместо использования require.paths.push вы можете установить переменную среды NODE_PATH

export NODE_PATH=/usr/local/lib/node_modules

или, если вы устанавливаете модули npm в свой домашний каталог, тогда

export NODE_PATH=~/.npm
11 голосов
/ 11 мая 2011

Как упомянул spmason, Node изменил способ разрешения модулей.У меня была та же проблема, что и у вас, и я решил ее, установив все модули глобально (--global) и добавив /usr/local/lib/node_modules к требованию, прежде чем требовать какой-либо модуль:

require.paths.push('/usr/local/lib/node_modules');
require('blah'); // it works!
6 голосов
/ 23 февраля 2011

Узел 0.4 изменил способ разрешения модулей и кажется, что это нарушает xml2js .

3 голосов
/ 13 марта 2011

Узел 0.4 ищет в ./node_modules модули. Для меня это помогло просто связать каталог модулей с каталогом моего проекта с ln -s /usr/local/lib/node node_modules

1 голос
/ 03 сентября 2013

Лично я обнаружил, что модуль XML2JS должен быть установлен через npm локально.Хотя я пробовал это только на Windows, я написал пост в блоге здесь

0 голосов
/ 14 августа 2011

просто сделайте ln -s /usr/local/lib/node /usr/local/lib/node_modules, но перед тем как переместить содержимое node_modules в исходную библиотеку узлов node - это помогло мне:)

0 голосов
/ 07 апреля 2011

Полагаю, что простой ответ - это текущие пакеты для xml2js и xml2js-xpat.

В итоге я вместо этого использовал node-xml.Я бы хотел, чтобы xml2js не был моим первым модулем npm, который я пытался установить.

0 голосов
/ 20 февраля 2011

Попробуйте установить его в проекте вместо глобального каталога пакетов.

Если вы используете package.json для управления зависимостями, вы можете просто запустить npm bundle в каталоге проекта и затем добавить require.paths.unshift('./node_modules') вверху файла приложения.На мой взгляд, это лучшая практика для всех проектов (особенно учитывая скорость, с которой происходит разработка узла).

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