2011-02-18 27 views
19

Tôi đã tạo một ứng dụng trên máy của mình và nó hoạt động tốt. Tôi đã tải lên nó vào máy chủ, và nó được đâm với các lỗi sau:node.js không thể tìm thấy mô-đun 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) 

Đây là cách ứng dụng của tôi bắt đầu:

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

Tôi đã cài đặt cả hai nhanh và xml2js sử dụng NPM. Tôi có phiên bản chính xác giống nhau (v0.4.0) cho nút trên máy tính của tôi và máy chủ của tôi.

Tôi đã đảm bảo rằng đường dẫn trong đó xml2js và express cư trú (/ usr/local/lib/node /) được bao gồm trong các đường dẫn nơi nút tìm kiếm mô-đun. (Tôi đã chỉnh sửa tệp 'module.js' để in đường dẫn nơi tìm kiếm các mô-đun.)

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) 

Vì vậy, có gì sai? Tôi có đường dẫn đúng, mô-đun ở đó. Tại sao nút không thể tìm thấy? Và chính xác cùng một mã chạy trơn tru trên máy địa phương của tôi. Nếu nó quan trọng, máy của tôi là một máy Mac, và máy chủ chạy CentOS.

+1

Có thể có liên quan: http://groups.google.com/group/nodejs/browse_thread/thread/61d6cf86f1593e10 –

Trả lời

0

Thử cài đặt trong dự án thay vì thư mục gói chung.

Nếu bạn đang sử dụng package.json để quản lý các phụ thuộc thì bạn chỉ có thể chạy npm bundle trong thư mục dự án và sau đó thêm require.paths.unshift('./node_modules') ở đầu tệp ứng dụng của bạn. Theo tôi, đây là cách thực hành tốt nhất cho tất cả các dự án (đặc biệt là xem xét tốc độ phát triển của nút).

3

Nút 0 0 trông giống như ./node_modules cho mô-đun. Đối với tôi, nó chỉ giúp liên kết thư mục mô-đun với thư mục dự án của tôi với ln -s /usr/local/lib/node node_modules

+0

(hoặc ngược lại) –

0

Tôi đoán câu trả lời đơn giản là các gói hiện tại cho xml2js và xml2js-xpat bị vỡ.

Tôi đã sử dụng nút xml thay thế. Tôi muốn xml2js không phải là mô-đun npm đầu tiên của tôi mà tôi đã cố cài đặt.

11

Như spmason đã đề cập, Node đã thay đổi cách mô-đun được giải quyết. Tôi đã có vấn đề tương tự như bạn và giải quyết nó bằng cách cài đặt tất cả các module trên toàn cầu (--global) và thêm /usr/local/lib/node_modules với yêu cầu trước khi yêu cầu bất kỳ mô-đun:

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

rằng giải quyết nó cho tôi, cảm ơn. –

+0

Điều này làm việc cho tôi: 'require.paths.push ('/ usr/lib/node'); ' – ghbarratt

+0

Trong môi trường windows, npm đã cài đặt mô-đun vào c:/tài liệu và thư mục cài đặt của người dùng đã đăng nhập .. và cho tôi , Tôi phải tạo một thư mục 'node_modules' mới trong thư mục gốc của app.js và sao chép thư mục xml2js hoặc các mô-đun khác vào thư mục node_modules mới –

0

chỉ cần đảm ln -s /usr/local/lib/node /usr/local/lib/node_modules, nhưng trước khi di chuyển nội dung của node_modules vào thư viện nút gốc node - nó đã giúp tôi :)

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

không còn hợp lệ cho nút v0.8.1 trở lên. Thay vì sử dụng require.paths.đẩy, bạn có thể thiết lập các biến môi trường NODE_PATH

export NODE_PATH=/usr/local/lib/node_modules 

hoặc nếu bạn cài đặt module NPM trong thư mục chính của bạn, sau đó

export NODE_PATH=~/.npm 
1

Cá nhân, tôi thấy rằng các mô-đun XML2JS cần phải được cài đặt qua npm cục bộ. Trong khi tôi chỉ thử tính năng này trên Windows, tôi đã viết một bài đăng trên blog here

Các vấn đề liên quan