Подтвердить что ты не робот

Node.js не может найти модуль xml2js

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

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) для node на моей машине и на моем сервере.

Я убедился, что путь wher xml2js и express reside (/usr/local/lib/ node/) включен в пути, где 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)

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

4b9b3361

Ответ 1

require.paths.push('/usr/local/lib/node_modules');

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

export NODE_PATH=/usr/local/lib/node_modules

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

export NODE_PATH=~/.npm

Ответ 2

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

require.paths.push('/usr/local/lib/node_modules');
require('blah'); // it works!

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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