Nodejs node-gyp 让我知道前端不止有 js

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

被折磨了两天 win 环境, 下载了 Pythonvs 最后还是rebuild失败。我放弃了! 项目用 sequelize -> node-sqlite3 ,rebuild 有时成功有时失败,完全玄学。


Nodejs node-gyp 让我知道前端不止有 js
23 回复

你肯定还不知道 node-sass ,这曾经是无数前端开发者的噩梦。
node 调用 C/C++写的插件就会遇到这种情况,经常需要自己用本地的 C/C++环境去编译这些插件。
所以用第三方库时还是尽量找 JS 、wasm 形式的,省心一些。


刚工作的时候被 node-sass 折磨过一次,现在记忆还很深刻。

还是 less 好

以后还会有 rust ,不过配环境很容易

我当然知道 比如 karma, webpack , node-sass, node-sqlite3

napi-rs 写起来很简单,编译起来简单,用起来也简单
缺点是写多了测多了 rust 就不想写 node 了

node-sass 纯拉吉

上一个 opencv 的项目让我放弃了 node ,Linux 没问题但是 Windows 上死活编译不成功。 然后改 python 了。

如果是 node-sqlite 可以直接引用 sql.js 不受 node-gyp 折磨,还有个结巴分词也是折磨

绝大多数人编程遇到的最大困难就是搭环境 能把环境搭好 后面的学习 开发都很简单

node-sass 经常需要 rebuild

#1

node-sass 的噩梦不就是来自于 node-gyp 吗。。

这类跨平台的工具可以塞到 docker 里,比如 vscode 的 devcontainer 系列套件

webpack 有 native 依赖吗?

这个逼玩意就没有一次安装顺利得, 不是缺 c++库就是却 python, 明明安装了还是不行, 这个电脑好使另一个就不好使了, 换了 less 之后省心多了

我也是哈哈哈,当时没办法,去同事电脑上拷贝 node_modules

windows 折腾 node-gyp 真的蛮累的, node-sqlite3 对一些 node 版本有预编译的二进制文件, 就无需自己编译了, 你可以搜搜看

我认为所有处理人机交互的软件都属于前端,而你理解的只是狭义上的浏览器前端

出现这种情况, 一般是对应的二进制依赖项没有匹配当前 node.js 版本的预编译包

所以 node.js 用 lts 的, 特别是发布了一段时间之后的 lts 版本, 而对应依赖项用最近发布的版本, 一般不会有问题, 直接就下载完事了

node-sass 的话,现在全都用 dart-sass ( npm 名 sass )平替了,除非怕事懒狗动不了项目依赖,改个依赖就完事了,项目一点都不需要改动

说到 node-sqlite3 我就又起反应了,当时想用 better-sqlite3 死活构建不成功,只能退回去用不支持 promise 的 node-sqlite3 自己封装成 promise

node-sass 和 sqlite3 ,淘宝都有编译好的二进制文件,直接下载用,

node-gyp确实是一个能够展示Node.js生态系统中前端不止有JavaScript的绝佳例子。它作为一个基于Node.js编写的跨平台命令行工具,是连接JavaScript世界与底层C/C++代码的桥梁,使得开发者能够为Node.js构建高性能的原生附加模块。

以下是node-gyp的一些关键特性和使用示例:

关键特性

  • 跨平台支持:支持Unix、macOS、Windows,统一构建指令。
  • 版本兼容:自动适应当前或指定的Node.js版本。
  • 内置Python支持:管理Python环境需求,确保一致性。
  • 灵活配置:通过binding.gyp文件配置构建目标、依赖和编译选项。

使用示例

  1. 安装node-gyp
npm install -g node-gyp
  1. 配置项目

在项目根目录下创建binding.gyp文件,定义构建配置:

{
  "targets": [
    {
      "target_name": "binding",
      "sources": ["src/binding.cc"]
    }
  ]
}
  1. 生成构建文件并编译
node-gyp configure
node-gyp build

通过上述步骤,你就可以利用C/C++编写高性能的Node.js扩展,并通过node-gyp轻松集成到Node.js项目中。这无疑是前端开发中一个强大的工具,展示了前端技术的多样性和深度。

回到顶部