尝试运行我的Node本机扩展时出现以下错误(它构建没有错误)。我想知道为什么我会收到此错误,因为据我所知,我正在做所有事情。
./NodeTest/nodeTest.js:7
tester.Startup();
^
TypeError: tester.Startup is not a function
at Object.<anonymous> (./NodeTest/nodeTest.js:7:8)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:383:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:496:3
这是&#39; nodeTest.cpp&#39;文件:
#include <nan.h>
NAN_METHOD(Startup)
{
auto message = Nan::New("Native Startup() method called.").ToLocalChecked();
info.GetReturnValue().Set(message);
}
NAN_MODULE_INIT(Initialize)
{
NAN_EXPORT(target, Startup);
}
NODE_MODULE(nodeTest, Initialize);
这是&#39; nodeTest.js&#39;文件:
var tester = require('./nodeTest');
tester.Startup();
这是&#39; package.json&#39;文件:
{
"name": "nodeTest",
"version": "0.0.1",
"scripts": {
"install": "node-gyp rebuild",
"compile": "node-gyp rebuild",
"test": "node nodeTest.js"
},
"dependencies": {
"nan": "^2.8.0"
},
"gypfile": true,
"author": "BT",
"license": "ISC",
"main": "nodeTest.js",
"keywords": [],
"description": "NodeTest"
}
这是&#39; bindings.gyp&#39;文件:
{
'targets': [{
'target_name': "nodeTest",
'include_dirs': [
"<!(node -e \"require('nan')\")",
"./src"
],
'cflags': [
"-Wall", "-std=c++11", "-fPIC"
],
'sources': [
"./src/nodeTest.cpp"
]
}, # nodeTest target
{
"target_name": "copy_binary",
"type": "none",
"dependencies" : [ "nodeTest" ],
"copies": [{
'destination': '<(module_root_dir)',
'files': ['<(module_root_dir)/build/Release/nodeTest.node']
}]
} # copy target
] # 'targets'
}
答案 0 :(得分:2)
问题在于文件的命名。您的计划的入口点是nodeTest.js
,其中包含:
var tester = require('./nodeTest');
tester.Startup();
然后您将nodeTest.cpp
编译为nodeTest.node
。
但是,使用require('./nodeTest')
而不是要求nodeTest.node
这是您尝试做的事情,您需要nodeTest.js
,因为.js
是默认扩展名require会尝试。
如果找不到.js
文件,它将尝试.json
个文件。之后,它将尝试查找二进制.node
文件。
所以nodeTest.js
要求自己。要解决您的问题,请在使用nodeTest.js
时将index.js
更改为require
或使用正确的扩展名。
var tester = require('./nodeTest.node');
tester.Startup();