當前位置: 妍妍網 > 碼農

使用 Jint ,在 .NET 中執行 JavaScript 程式碼

2024-02-04碼農

你好,這裏是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和元件,希望對您有用!

Jint 簡介

如果您想在您的 .NET 程式中使用 Javascript,那麽我推薦您使用 Jint。

Jint 是適用於 .NET 的 開源 Javascript 直譯器,功能強大,它可以在任何現代 .NET 平台上執行,因為它支持 .NET Standard 2.0 和 .NET 4.6.2 以及更高版本),包括最新的 .NET 6。

因為 Jint 既不生成任何 .NET 字節碼也不使用 DLR,所以在執行比較少的程式碼時,它的執行效率很快。

在 Nuget 包管理器中搜尋並安裝 Jint 即可,它沒有其他的一些依賴。

小試牛刀

執行 JS 運算式,並輸出結果。

using Jint;
var engine = new Jint.Engine();

var result = engine.Execute("1 + 2 + 3 + 4 + 5")

.GetCompletionValue();


Console.WriteLine(result);
// Output: 15

這裏,變量 x 設定為 3,並且 x * x 在 JavaScript 中進行計算,結果直接返回給 .NET 物件。

using Jint; 
var square = new Engine()
.SetValue("x"3) // 定義一個新變量 x
.Evaluate( "x * x") // 聲明運算式
.ToObject(); // 轉換為 .NET object
Console.WriteLine(square);
// Output: 9


你可以直接把 .NET 中的物件例項傳遞給 JS 並使用它,它的修改在 .NET 和 JS 中保持同步。

var p = new Person
{
Name = "Mickey Mouse"
};
var engine = new Engine()
.SetValue("p", p)
.Execute("p.Name = 'Minnie'");
Console.WriteLine(p.Name);
// Output: "Minnie"


你可以直接在 .NET 中執行在 JS 定義的函式。

var engine = new Engine();
varadd = engine
.Execute("function add(a, b) { return a + b; }")
.GetValue("add");
var result = engine.Invoke("add",1,2);
Console.WriteLine(result);
// Output: 3



您還可以使用 module 從多個指令碼檔中匯入和匯出變量。

var engine = new Engine(options =>
{
options.EnableModules(@"C:\Scripts");
})
var ns = engine.ImportModule("./my-module.js");
varvalue = ns.Get("value").AsString();

更多其他的高級用法,可以在 github 的 Jint 計畫中找到。