你好世界


🌐 Hello world

这个“Hello world”示例是一个用 C++ 编写的简单插件,相当于以下 JavaScript 代码:

🌐 This "Hello world" example is a simple addon, written in C++, that is the equivalent of the following JavaScript code:

module.exports.hello = () => 'world'; 

首先,创建文件 hello.cc

🌐 First, create the file hello.cc:

// hello.cc
#include <node.h>

namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::NewStringType;
using v8::Object;
using v8::String;
using v8::Value;

void Method(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  args.GetReturnValue().Set(String::NewFromUtf8(
      isolate, "world", NewStringType::kNormal).ToLocalChecked());
}

void Initialize(Local<Object> exports) {
  NODE_SET_METHOD(exports, "hello", Method);
}

NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize) // N.B.: no semi-colon, this is not a function

}  // namespace demo 

在大多数平台上,以下 Makefile 可以让我们入手:

🌐 On most platforms, the following Makefile can get us started:

NODEJS_DEV_ROOT ?= $(shell dirname "$$(command -v node)")/..
CXXFLAGS = -std=c++23 -I$(NODEJS_DEV_ROOT)/include/node -fPIC -shared -Wl,-undefined,dynamic_lookup

hello.node: hello.cc
	$(CXX) $(CXXFLAGS) -o $@ __CONTENT__#x3C; 

然后运行以下命令将编译并运行代码:

🌐 Then running the following commands will compile and run the code:

$ make
$ node -p 'require("./hello.node").hello()'
world 

要与 npm 生态系统集成,请参阅 构建 部分。

🌐 To integrate with the npm ecosystem, see the Building section.