C# 執行 JavaScript 程式碼

筆者最近遇到了要在專案中執行 JavaScript 程式碼的需求,特此紀錄一下。

先使用 NuGet 安裝 Jering.Javascript.NodeJS 套件,或是使用 .NET CLI 執行以下指令安裝:
	
dotnet add package Jering.Javascript.NodeJS
    

此套件會使用本機中的 Node.js 執行,所以需要先安裝 Node.js

C# 中的程式碼:
    
using Jering.Javascript.NodeJS;
using Microsoft.Extensions.DependencyInjection;


try
{
    var serviceProvider = new ServiceCollection()
        .AddNodeJS()
        .BuildServiceProvider();

    var nodeJsService = serviceProvider.GetRequiredService<INodeJSService>();

    string scriptPath = "D:\\my.js";

    // 透過 Node.js 執行並取得回傳結果
    var result = await nodeJsService.InvokeFromFileAsync<string>(scriptPath);

    Console.WriteLine("回傳結果: " + result);
}
catch (Exception e)
{
    Console.WriteLine($"發生錯誤: {e.Message}");
}
    

上面的程式碼是去執行 D:\\my.js 檔案,這裡的示範檔案內容為:
    
module.exports = async function () {
    return "這是來自 my.js 的回傳結果";
};
    

如果沒有使用 module.exports 會拋出例外:
    
Jering.Javascript.NodeJS.InvocationException: The module "D:\my.js" does not export a function.
    



註: 在筆者的測試中,如果沒有 async 則 C# 程式碼會一直卡在讀取回應
參考資料:
GitHub - Owner avatar Javascript.NodeJS

留言