Nodejs 新手咨询

Nodejs 新手咨询

刚刚使用 node ,项目有 c++的 addon ,这种一般是怎么发布到生产环境?是不是起一个本地的虚拟机,对应生产环境的操作系统,然后 npm install 之后,拷贝上去?

10 回复

docker 多阶段构建
一阶段构建环境,装 node gcc 等 devel ,编译出 addon 来。如果有 webpack / vite 任务也应当在这个阶段执行。
二阶段运行环境,把一阶段生成的文件拷贝进来,作为最终镜像

最后去生产环境 pull 下来 docker run


如果生产环境 arch / os 和你本地不一样,甚至 node / v8 版本不一样,最后生成的 addon 都是不兼容的,搞交叉编译不如 docker 发布。

当然如果你 C++ 代码没有涉及系统调用,就是纯计算的话,还可以迁移到 WASM 实现上去,就不用操心 arch / os 兼容问题了。

题主的方案是可以的,我们以前用过这种方案,前提是编译环境和生产环境的硬件架构、系统、依赖包、Node 版本等都一致,或者很明确是兼容的。

当然现在来说,容器可以解决除硬件环境以外的其他所有问题,更方便一些。

#3 纯计算的话,WASM 可比 native 慢多了,就为了图那么一点部署方便,完全是本末倒置

docker 多阶段构建,配合 https://github.com/vercel/pkg 打包成单文件二进制,减少 node_modules 庞大的碎片文件对 IO 影响

主要是里面的那个开源库我看是需要下载一些类似 openssl 的库,不知道会不会依赖包

看起来 docker 可能是比较简单的处理方案,毕竟需要涉及本地依赖库

#7 编译 addon 的时候可能会依赖一些 C/C++的库,这些库可以用操作系统的包管理器安装,也可以手动安装到正确的位置,甚至自己编译。

正常情况下,module 的编译问题,其开发者应该都会妥善解决,你执行 npm install 的时候至多会出现库不存在需要自己在系统环境中安装,这个去 Google 一下应该也不难。

但毕竟这块耦合了 C/C++技术栈,说不准会出现一些开发者没有妥善解决的问题,而这些问题通常 Node 应用开发者又解决不了。

如果不得不用 Addon 的话,建议尽量使用知名的、成熟的,有问题也可以去翻翻 Issue 或自己提一个 Issue 。

#5 WASM 、C/C++ Addons 、N-API 在不同场景下表现的性能也不大一样,不同的编译器、不同的 Node 版本也都会有差异,生产上也需要参考特定场景下的压测数据才能做决策。

当然,很高兴为Node.js新手提供帮助!

Node.js是一个基于Chrome V8引擎的JavaScript运行时,用于构建快速、可扩展的网络应用。作为新手,你可能想从以下几个方面入手:

1. 环境搭建

首先,确保你已经安装了Node.js。可以通过以下命令检查版本:

node -v
npm -v

如果未安装,可以从Node.js官网下载安装包进行安装。

2. 创建你的第一个应用

在你的工作目录下创建一个新文件夹,并在其中初始化一个新的Node.js项目:

mkdir my-node-app
cd my-node-app
npm init -y

这将创建一个package.json文件。接下来,创建一个名为app.js的文件,并添加以下代码:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

3. 运行应用

使用以下命令运行你的应用:

node app.js

打开浏览器,访问http://127.0.0.1:3000,你应该会看到“Hello World”。

这只是Node.js的入门示例,后续可以深入学习模块、异步编程、Express框架等内容。祝你学习愉快!

回到顶部