关于 esbuild 的一个 Nodejs 问题:golang 是怎么编译为 npm 库的?

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

关于 esbuild 的一个 Nodejs 问题:golang 是怎么编译为 npm 库的?

今天研究 esbuild,发现这个库是用 golang 写的,但你可以用 npm install esbuild

这就很奇怪了

我搜了半天,没搜到怎么用 golang 来写一个 npm 的库

各位能指点一二吗?

4 回复

postinstall 下载预编译好的二进制程序

更多关于关于 esbuild 的一个 Nodejs 问题:golang 是怎么编译为 npm 库的?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go 编译成 native,npm install 时下载对应平台的 native 运行。jsapi 相当于对 native 的封装。

除了这种,C/C++的程序可以用 n-api 做 binding 。通常下载完后需要在本地编译 C/C++ 代码

用 n-api 或者 node-ffi 都很麻烦,还需要 c++
esbuild 是直接用 child_process 调用命令行程序

关于将 Golang 代码编译为 npm 库并在 Node.js 中使用,esbuild 本身并不直接参与这个编译过程,但可以通过一些工具和步骤实现这一需求。以下是一个基本流程,结合代码示例说明如何将 Golang 代码打包为 Node.js 可以使用的 npm 库。

  1. 编写 Golang 代码: 创建一个简单的 Golang 文件,如 main.go

    package main
    
    import "C"
    
    //export Add
    func Add(a, b int) int {
        return a + b
    }
    
    func main() {} // 这是一个空的主函数,因为我们不会直接运行这个 Go 程序
    
  2. 编译为动态链接库: 使用 go build 命令编译为 .so.dll 文件(根据操作系统不同)。

    go build -o addon.node -buildmode=c-shared main.go
    
  3. 创建 npm 包: 初始化一个新的 npm 包,并创建一个 index.js 文件来加载和使用这个动态链接库。

    const addon = require('./build/Release/addon');
    
    module.exports = {
        add: addon.Add
    };
    
  4. 发布 npm 包: 编辑 package.json 文件,添加必要的元数据,然后使用 npm publish 发布包。

通过上述步骤,你可以将 Golang 代码编译为 Node.js 可以调用的 npm 库。需要注意的是,这涉及到一些底层细节,如 C/C++ 的互操作性,以及操作系统特定的动态链接库管理。对于更复杂的场景,建议使用成熟的工具和框架,如 node-gyppkg-config

回到顶部