说一下自己运行helloworld扩展的Nodejs血泪史

说一下自己运行helloworld扩展的Nodejs血泪史

看到鲁主没有开发过dll 的经验,真是捉鸡啊。 dll 工程 你要新建一个控制台程序,然后下一步,然后选择 dll。无法给你上图,请见谅。

2 回复

当然可以!以下是一个关于如何在Node.js中运行一个简单的Hello World扩展(使用C++编写的)的教程。这个过程可能会有一些复杂,但我会尽量简化它。

说一下自己运行Hello World扩展的Node.js血泪史

准备工作

首先,你需要安装一些必要的工具和库:

  1. Node.js:确保你已经安装了Node.js。
  2. Node-gyp:这是一个用于构建Node.js C/C++扩展的命令行工具。
  3. Python:Node-gyp需要Python来运行。
  4. Visual Studio Build Tools(Windows)或Xcode Command Line Tools(macOS)或GCC(Linux):用于编译C/C++代码。

你可以通过以下命令安装Node-gyp:

npm install -g node-gyp

创建项目

  1. 创建一个新的目录并进入该目录:

    mkdir helloworld
    cd helloworld
    
  2. 初始化一个新的Node.js项目:

    npm init -y
    
  3. 安装必要的依赖:

    npm install --save-dev node-gyp
    

编写C++扩展

  1. 在项目根目录下创建一个名为src的文件夹,并在其中创建一个名为hello.cc的文件:

    mkdir src
    touch src/hello.cc
    
  2. 编辑hello.cc文件,添加以下内容:

    #include <node.h>
    #include <v8.h>
    
    void Method(const v8::FunctionCallbackInfo<v8::Value>& args) {
      v8::Isolate* isolate = args.GetIsolate();
      v8::String::NewFromUtf8(isolate, "Hello world").ToLocal(&result);
      args.GetReturnValue().Set(result);
    }
    
    void Initialize(v8::Local<v8::Object> exports) {
      NODE_SET_METHOD(exports, "hello", Method);
    }
    
    NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
    

配置构建脚本

  1. 在项目根目录下创建一个名为binding.gyp的文件,并添加以下内容:
    {
      "targets": [
        {
          "target_name": "addon",
          "sources": [ "src/hello.cc" ]
        }
      ]
    }
    

构建扩展

  1. 运行以下命令来构建你的C++扩展:
    node-gyp configure build
    

使用扩展

  1. 在项目根目录下创建一个名为index.js的文件,并添加以下内容:

    const addon = require('./build/Release/addon');
    
    console.log(addon.hello());
    
  2. 运行你的Node.js应用程序:

    node index.js
    

你应该会看到输出:

Hello world

结论

虽然这个过程可能看起来有些复杂,但一旦你熟悉了这些步骤,就可以轻松地为Node.js编写高性能的C++扩展。希望这个教程能帮助你避免一些常见的错误和挫折。


运行HelloWorld扩展的Node.js血泪史

在尝试使用Node.js与C++进行交互的过程中,我经历了许多挫折和挑战。虽然编写一个简单的“Hello World”扩展听起来不难,但实际上却需要很多细节上的注意。

准备工作

首先,确保你的环境已经安装了Node.js、Node-gyp(用于编译C/C++模块)和Python(用于构建工具链)。

创建项目结构

假设我们有一个简单的项目目录结构:

hello-node/
├── binding.gyp
└── src/
    └── hello.cc

编写C++代码

src/hello.cc 文件中是我们的C++代码,主要负责导出一个函数 Hello():

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

using namespace v8;

void Hello(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  HandleScope scope(isolate);
  
  // 输出 "Hello, World!" 到控制台
  Local<String> message = String::NewFromUtf8(isolate, "Hello, World!");
  args.GetReturnValue().Set(message);
}

void Initialize(Handle<Object> exports) {
  NODE_SET_METHOD(exports, "hello", Hello);
}

NODE_MODULE(hello, Initialize)

编写配置文件

binding.gyp 文件用于描述项目如何被构建:

{
  "targets": [
    {
      "target_name": "hello",
      "sources": [ "src/hello.cc" ]
    }
  ]
}

构建扩展

在项目根目录下运行命令来构建扩展:

npm install node-gyp -g
node-gyp configure
node-gyp build

构建成功后,你会在 build/Release/ 目录下找到生成的 .node 文件。

使用扩展

最后,在Node.js中引入并使用该扩展:

const hello = require('./build/Release/hello');

console.log(hello.hello());  // 输出 "Hello, World!"

总结

尽管整个过程看似简单,但实际操作中可能会遇到各种问题,比如路径问题、环境配置问题等。希望这篇文章能帮助那些刚开始接触Node.js C++扩展的朋友少走一些弯路。

回到顶部