Meteor / node-gd& ReferenceError:未定义require

时间:2014-08-26 14:19:16

标签: javascript node.js meteor

我有一些关于node-gd和Meteor的相关问题。

前几个问题。我试图在我认为正确的地方安装node-gd

这看起来是否已将其安装到与Meteor一起使用的正确位置?

我应该担心输出中的警告吗?

me@ubuntu:/usr/local/lib$ sudo npm install node-gd
npm http GET https://registry.npmjs.org/node-gd
npm http 304 https://registry.npmjs.org/node-gd

> node-gd@0.2.3 install /usr/local/lib/node_modules/node-gd
> node-gyp rebuild

make: Entering directory `/usr/local/lib/node_modules/node-gd/build'
CXX(target) Release/obj.target/node_gd/cpp/node-gd.o

../cpp/node-gd.cpp: In static member function ‘static v8::Handle<v8::Value> Gd::Image::StringFTBBox(const v8::Arguments&)’:
../cpp/node-gd.cpp:1045:22: warning: variable ‘color’ set but not used [-Wunused-but-set-variable]
   REQ_INT_ARG(0, color);
                  ^
../cpp/node-gd.cpp:41:7: note: in definition of macro ‘REQ_INT_ARG’
int VAR;                                                              \
   ^
SOLINK_MODULE(target) Release/obj.target/node_gd.node
SOLINK_MODULE(target) Release/obj.target/node_gd.node: Finished
COPY Release/node_gd.node
make: Leaving directory `/usr/local/lib/node_modules/node-gd/build'
node-gd@0.2.3 node_modules/node-gd
me@ubuntu:/usr/local/lib$ ls
node_modules  python2.7  python3.4
me@ubuntu:/usr/local/lib$ cd node_modules/
me@ubuntu:/usr/local/lib/node_modules$ ls
meteorite  node-gd

我将坐标传回服务器,我想使用node-gd来操作服务器上的图像。

这是我的Meteor方法:

Meteor.methods({
  createImage: function(coords) {
  console.log('createImage')
  console.log(coords.x);

  var gd   = require('gd');
  }
});

当我尝试运行此功能时,我在终端上得到了这个:

I20140826-06:44:18.166(-7)? Exception while invoking method 'createImage' ReferenceError: require is not defined
I20140826-06:44:18.166(-7)?     at Meteor.methods.createImage (app/server/server.js:7:15)
I20140826-06:44:18.167(-7)?     at maybeAuditArgumentChecks (packages/livedata/livedata_server.js:1487)
I20140826-06:44:18.167(-7)?     at packages/livedata/livedata_server.js:643
I20140826-06:44:18.168(-7)?     at _.extend.withValue (packages/meteor/dynamics_nodejs.js:56)
I20140826-06:44:18.168(-7)?     at packages/livedata/livedata_server.js:642
I20140826-06:44:18.168(-7)?     at _.extend.withValue (packages/meteor/dynamics_nodejs.js:56)
I20140826-06:44:18.168(-7)?     at _.extend.protocol_handlers.method (packages/livedata/livedata_server.js:641)
I20140826-06:44:18.168(-7)?     at packages/livedata/livedata_server.js:541

this question的答案提出了各种JS解决方案。这是我需要的,任何人都可以为服务器和客户推荐最好的Meteor用途吗?

2 个答案:

答案 0 :(得分:2)

你不能以这种方式将NPM模块添加到流星,你应该使用meteorhacks的npm氛围包:http://atmospherejs.com/package/npm

您需要做的是通过陨石安装包:

mrt add npm

然后在项目根目录中添加packages.json并指定node-gd依赖项:

{
  "node-gd":"0.2.3"
}

最后,在您的服务器代码中使用Meteor.require访问node-gd API。

请注意,Meteor服务器端编程使用Fibers,因此您必须使用node-gdMeteor._wrapAsync的集合将异步API调用包装到Async utilities与npm氛围包一起出现。

以下是关于理解这一点的好文章:https://www.discovermeteor.com/blog/understanding-sync-async-javascript-node/

您无法在客户端上使用NPM包。

答案 1 :(得分:0)

尝试使用Meteor.npmRequire(&#39;您的模块名称&#39;)