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

如何在.NET通过Jurassic调用node-fetch并解决import语法报错?

解决Jurassic/Jint调用含import的JS脚本报错问题

问题原因

  1. ES模块语法不兼容:Jurassic、Jint这类.NET端JavaScript引擎仅支持ES5及部分ES6基础特性,不支持ES模块的import语法,而你的脚本依赖package.json中"type": "module"的Node.js模块加载逻辑,自然触发语法错误。
  2. Node.js依赖不兼容:node-fetch是Node.js环境专属的依赖库,上述.NET JS引擎没有Node.js的内置API与模块加载机制,无法直接识别和运行这类依赖。

解决方案

方案一:用.NET原生能力替代node-fetch

直接在C#中封装.NET的HttpClient为JS引擎可调用的fetch函数,完全绕开Node.js依赖:

using Jurassic;
using System.Net.Http;
using System.Threading.Tasks;

var engine = new Jurassic.ScriptEngine();

// 将.NET HttpClient包装为JS可调用的fetch方法
engine.SetGlobalFunction("fetch", new Func<string, Task<string>>(async (url) =>
{
    using var httpClient = new HttpClient();
    return await httpClient.GetStringAsync(url);
}));

// 直接调用fetch,无需执行含import的script.js
var responseContent = await engine.Evaluate<Task<string>>("fetch('myurl')");

方案二:将JS脚本转译为ES5兼容的独立包

如果需要保留原有JS逻辑,可通过打包工具(Rollup/Webpack/Babel)将依赖与脚本打包为无import的ES5代码:

  1. 在JS项目中安装打包依赖:
    npm install rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs --save-dev
    
  2. 创建rollup.config.js配置文件:
    import resolve from '@rollup/plugin-node-resolve';
    import commonjs from '@rollup/plugin-commonjs';
    
    export default {
      input: 'script.js',
      output: {
        file: 'bundle.js',
        format: 'iife', // 生成自执行函数,无外部依赖
        name: 'FetchWrapper'
      },
      plugins: [resolve(), commonjs()] // 解析并转换CommonJS模块为ES5
    };
    
  3. 执行打包命令生成bundle.js,将该文件放入.NET项目后直接用Jurassic执行:
    var engine = new Jurassic.ScriptEngine();
    engine.ExecuteFile(@"bundle.js");
    engine.Execute("FetchWrapper.fetch('myurl')");
    

方案三:改用支持Node.js环境的.NET调用方案

若需完整兼容Node.js生态,可选择以下方式:

  • 使用Edge.js:在.NET中直接调用Node.js运行时,原生支持import与node-fetch。
  • 通过Process类启动Node.js进程:直接执行你的JS脚本,通过标准输入输出传递数据。

关于编译JS方案后调用的说明

单独编译JS项目后的产物仍依赖Node.js的模块系统与运行环境,Jurassic/Jint不具备这些环境能力,因此依旧会报错,必须转译为无依赖的独立ES5代码才能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:12:40