2011-08-31 63 views
2

我正在打包要部署在服務器上的節點應用程序,而不使用npm。我相信我已經想通了 - 我使用npm根據package.json文件將所有依賴項安裝在本地node_modules文件夾中。npm不會構建Contextify發佈 - 找不到節點路徑?

這一切似乎工作正常,但當我試圖從服務器運行節點文件,它抱怨它Cannot find module '../build/Release/contextify'

這是有道理的,因爲在node_modules/.npm/contextify/0.0.4/package/lib/contextify.js,它要求有問題的文件,並且node_modules/.npm/contextify/0.0.4/package/build沒有名爲Release的目錄。我認爲故宮只是沒有內置的發佈,所以我切換回dev的機器,跑npm install - 它並沒有抱怨,也出現了建contextify:

$ sudo npm install 

> [email protected] preinstall /path/to/node/stuff/node_modules/contextify 
> node-waf clean || true; node-waf configure build 

'clean' finished successfully (0.014s) 
Setting srcdir to      : /path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package 
Setting blddir to      : /path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package/build 
Checking for program g++ or c++   : /usr/bin/g++ 
Checking for program cpp     : /usr/bin/cpp 
Checking for program ar     : /usr/bin/ar 
Checking for program ranlib    : /usr/bin/ranlib 
Checking for g++       : ok 
Checking for node path     : not found 
Checking for node prefix     : ok /usr/local/Cellar/node/0.4.5 
'configure' finished successfully (0.043s) 
Waf: Entering directory `/path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package/build' 
[1/2] cxx: src/contextify.cc -> build/default/src/contextify_1.o 
[2/2] cxx_link: build/default/src/contextify_1.o -> build/default/contextify.node 
Waf: Leaving directory `/path/to/node/stuff/node_modules/.npm/contextify/0.0.4/package/build' 
'build' finished successfully (0.370s) 

不幸的是,package/build目錄仍然沒有Release文件夾。

所以,我想問題是,如果因爲我的節點路徑沒有設置而導致構建失敗(我試過export NODE_PATH,但它似乎沒有幫助...),或者如果還有其他原因這種說法似乎並沒有建立。

也許我錯過了更大的東西?我也是有同樣的問題

回答

1

我想的的NodeJS本地版本是v.0.4。*和中的NodeJS您的服務器版本是V0.5。*

確保你使用的的NodeJS相同版本的開發和生產。如果你切換到v0.4。*我敢打賭,你的問題將得到解決。我注意到node-waf'build'配置在5. *版本的某處從'default'切換到'Release'。然而

一個警告:

有些NPM包使用(編譯)二進制文件。 I.M.O,你不應該將'編譯'的node_modules綁定到一個包中,而是在沒有npm的'不同'平臺上部署它。你會遇到問題是時間問題。 (像上面那樣)

+0

這[Node commit](https://github.com/joyent/node/commit/879eb16280688436d791ebb79b05198ac4e4b038#diff-3)正在導致問題 – jorrit

3

修復這個錯誤只是爲了刪除waf的「build」目錄,然後重新配置。由於缺少NODE_PATH,不知何故waf緩存了錯誤的配置結果,所以即使你記住並設置了它,儘管配置報告沒有錯誤,它也不會實際編譯任何東西。愚蠢!

export NODE_PATH="/usr/local/lib/node_modules/" 
rm -fr build 
node-waf configure 
node-waf build