You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为非Web目标(如Node.js)将Dart编译为JavaScript?

将Dart函数编译为JS并在Node.js/TS项目中调用的实现步骤

我们采用**dart compile js --server-mode搭配node_preamble**的方案,这是官方推荐的非Web Node.js场景下的Dart转JS方案,以下是基于你现有TS项目的完整可运行步骤:

一、准备Dart代码及项目配置

  1. 在现有TS项目根目录下新建dart-greeting文件夹,作为Dart项目目录
  2. 初始化Dart项目:
dart create -t console dart-greeting
cd dart-greeting
  1. 修改pubspec.yaml,添加js依赖用于JS互操作:
dependencies:
  js: ^0.6.7
  1. 替换bin/greeting.dart内容为带JS导出注解的Dart函数:
import 'package:js/js.dart';

// 将greeting函数暴露为全局可访问的JS函数
@JS()
String greeting() => 'Hello from Dart';

void main() {
  // 空main函数,仅用于触发Dart代码编译入口
}

二、编译Dart代码为Node.js兼容的JS

  1. 安装node_preamble工具(生成Node.js运行所需的前置代码):
dart pub global activate node_preamble
  1. 编译Dart代码并合并Node.js前置代码,输出到TS项目的src目录:
dart compile js --server-mode bin/greeting.dart -o temp.dart.js
node_preamble > preamble.js
cat preamble.js temp.dart.js > ../src/dart-greeting.js
rm temp.dart.js preamble.js

三、修改TS项目代码,导入并使用Dart编译后的函数

  1. 修改src/index.ts,替换原greeting逻辑为Dart编译后的版本:
import express, { Request, Response } from 'express';
// 导入Dart编译生成的JS文件
import './dart-greeting.js';

const app = express();
const port = 3000;

// 声明全局变量类型,避免TS类型检查报错
declare global {
  var greeting: () => string;
}

app.get('/', (req: Request, res: Response) => {
  // 调用来自Dart的greeting函数
  res.send(greeting());
});

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});

四、测试运行

  1. 启动TS开发服务器:
npx ts-node-dev src/index.ts
  1. 访问http://localhost:3000,页面将显示Hello from Dart,验证功能正常。

内容的提问来源于stack exchange,提问作者user9836706

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:50:16