关于 esbuild 的一个 Nodejs 问题:golang 是怎么编译为 npm 库的?
关于 esbuild 的一个 Nodejs 问题:golang 是怎么编译为 npm 库的?
今天研究 esbuild,发现这个库是用 golang 写的,但你可以用 npm install esbuild
这就很奇怪了
我搜了半天,没搜到怎么用 golang 来写一个 npm 的库
各位能指点一二吗?
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 库。
-
编写 Golang 代码: 创建一个简单的 Golang 文件,如
main.go
:package main import "C" //export Add func Add(a, b int) int { return a + b } func main() {} // 这是一个空的主函数,因为我们不会直接运行这个 Go 程序
-
编译为动态链接库: 使用
go build
命令编译为.so
或.dll
文件(根据操作系统不同)。go build -o addon.node -buildmode=c-shared main.go
-
创建 npm 包: 初始化一个新的 npm 包,并创建一个
index.js
文件来加载和使用这个动态链接库。const addon = require('./build/Release/addon'); module.exports = { add: addon.Add };
-
发布 npm 包: 编辑
package.json
文件,添加必要的元数据,然后使用npm publish
发布包。
通过上述步骤,你可以将 Golang 代码编译为 Node.js 可以调用的 npm 库。需要注意的是,这涉及到一些底层细节,如 C/C++ 的互操作性,以及操作系统特定的动态链接库管理。对于更复杂的场景,建议使用成熟的工具和框架,如 node-gyp
或 pkg-config
。