2011-08-31 59 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