Nodejs node-gyp 让我知道前端不止有 js
被折磨了两天 win
环境, 下载了 Python
和 vs
最后还是rebuild
失败。我放弃了!
项目用 sequelize -> node-sqlite3 ,rebuild
有时成功有时失败,完全玄学。
Nodejs node-gyp 让我知道前端不止有 js
你肯定还不知道 node-sass ,这曾经是无数前端开发者的噩梦。
node 调用 C/C++写的插件就会遇到这种情况,经常需要自己用本地的 C/C++环境去编译这些插件。
所以用第三方库时还是尽量找 JS 、wasm 形式的,省心一些。
刚工作的时候被 node-sass 折磨过一次,现在记忆还很深刻。
还是 less 好
以后还会有 rust ,不过配环境很容易
我当然知道 比如 karma, webpack , node-sass, node-sqlite3
napi-rs 写起来很简单,编译起来简单,用起来也简单
缺点是写多了测多了 rust 就不想写 node 了
用 wsl2
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
文件配置构建目标、依赖和编译选项。
使用示例
- 安装node-gyp
npm install -g node-gyp
- 配置项目
在项目根目录下创建binding.gyp
文件,定义构建配置:
{
"targets": [
{
"target_name": "binding",
"sources": ["src/binding.cc"]
}
]
}
- 生成构建文件并编译
node-gyp configure
node-gyp build
通过上述步骤,你就可以利用C/C++编写高性能的Node.js扩展,并通过node-gyp
轻松集成到Node.js项目中。这无疑是前端开发中一个强大的工具,展示了前端技术的多样性和深度。