2011-02-18 185 views
19

我在我的機器上創建了一個應用程序,它運行良好。我上傳到服務器,並且它與下面的錯誤而崩潰: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'); 

我已經安裝有明示或使用NPM xml2js。我的機器和我的服務器上的節點具有完全相同的版本(v0.4.0)。

我已經確定xml2js和express表達式駐留的路徑(/ 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。

+1

可能相關:http://groups.google.com/group/nodejs/browse_thread/thread/61d6cf86f1593e10 – 2011-02-22 08:10:16

回答

0

嘗試將其安裝在項目中而不是全局程序包目錄中。

如果您使用的是package.json管理的依賴關係,那麼你可以只運行在項目目錄npm bundle,然後在您的應用程序文件的頂部添加require.paths.unshift('./node_modules')。在我看來,這是所有項目的最佳實踐(特別是考慮節點發展的速度)。

3

節點0.4在./node_modules中查找模塊。 對我來說,它只是鏈接模塊目錄到我的項目目錄與ln -s /usr/local/lib/node node_modules

+0

(或相反) – 2011-08-29 20:20:58

0

我想簡單的答案是當前包xml2js和xml2js-xpat被搗毀。

我最終使用了node-xml。我希望xml2js不是我嘗試安裝的第一個npm模塊。

11

正如spmason提到的那樣,Node改變了模塊的解決方式。我有同樣的問題,因爲你並通過安裝所有模塊全局(--global),並要求任何模塊之前加入/usr/local/lib/node_modules到需要解決它:

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

那爲我解決它,謝謝。 – 2011-07-25 15:54:09

0

只是讓ln -s /usr/local/lib/node /usr/local/lib/node_modules,但node_modules行動前的內容轉換成原始節點庫node - 它幫助我:)

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

不再有效的節點v0.8.1及以上。 require.paths代替。推,你可以設置環境變量NODE_PATH

export NODE_PATH=/usr/local/lib/node_modules 

,或者如果你在你的home目錄中安裝NPM模塊,然後

export NODE_PATH=~/.npm 
1

就個人而言,我發現XML2JS模塊需要安裝通過本地npm。雖然我只嘗試了在Windows操作系統上,我寫了一個博客帖子here