怎么理解nodejs模块为json或者C/C++扩展?

在node.js里面,一个node.js文件就是一个模块。

node.js文件可能是:
1.JavaScript代码
2.JSON
3.编译后的C/C++扩展

node.js 可能是js代码我能理解,但是后面2者如何理解呢?能否举例说明?

阅读 1.9k
1 个回答

简单点说就是在 Node.js 中,可以 require 这三种文件

对于 JSON ,可以创建一个JSON文件测试

c++ 扩展 指得是用 c++ 编写的本机模块,nodejs 文档中称为 "C++ addons",require 可以像普通的 Node.js 模块一样加载它,以最简单的 N-API 举例(我这里用的是 linux,不同的操作系统配置可能不一样,可查看官方文档

  • 首先要安装 node-gyp 工具

    npm i -g node-gyp
  • 创建 add.cc 文件实现了一个简单的加法

    #include <node.h>
    
    void Add(const v8::FunctionCallbackInfo<v8::Value> &args) {
    auto isolate = args.GetIsolate();
    auto arg0 = args[0].As<v8::Number>()->Value();
    auto arg1 = args[1].As<v8::Number>()->Value();
    v8::Local<v8::Number> num = v8::Number::New(isolate, arg0 + arg1);
    args.GetReturnValue().Set(num);
    }
    
    void Init(v8::Local<v8::Object> exports) {
    NODE_SET_METHOD(exports, "add", Add);
    }
    
    NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
  • 然后添加一个名为 binding.gyp 的文件,内容如下

    {
    'targets': [
      {
        'target_name': 'add',
        'sources': [ 'add.cc' ]
      }
    ]
    }
  • 然后运行以下命令

    node-gyp configure && node-gyp build
  • 如果一切顺利的话会生成 build 文件夹,内容如下

    ❯ tree
    .
    ├── add.cc
    ├── binding.gyp
    ├── build
    │   ├── add.target.mk
    │   ├── binding.Makefile
    │   ├── config.gypi
    │   ├── Makefile
    │   ├── node_gyp_bins
    │   │   └── python3 -> /usr/sbin/python3
    │   └── Release
    │       ├── add.node
    │       └── obj.target
    │           ├── add
    │           │   └── add.o
    │           └── add.node
    ├── compile_commands.json
    └── test.json
  • directories, 12 files

  • 现在 build/Release/add.node 文件就可以作为 Node.js 模块加载了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题