前言
- 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
偶然一次听同事说起一个开源项目,确实让我很好奇,即使用 .NET 来执行 Javascript 脚本, 这个开源项目叫 Jint,感兴趣的同学可以下载Nuget包自己本地玩玩,或者拉源码下来分析是如何实现的。
安装
使用 Vs 安装Nuget包即可,名称为
Jint,类似这种类型的开源项目也不少,今天就先来讲讲Jint吧
使用
- 简单使用计算3+4,Execute方法执行一串JS代码
static void Main(string[] args)
{
// 实例化引擎
var engine = new Engine();
// 即可操作Jint引擎提供的一些相关方法
Console.WriteLine(engine.Execute("4+3").GetCompletionValue());
}
- 使用Jint执行一段函数
static void Main(string[] args)
{
var engine = new Engine();
while (true)
{
Console.WriteLine(">");
// 获取输入的JS代码
string JsCode = Console.ReadLine();
// 执行获取值
JsValue val = engine.Execute(JsCode).GetCompletionValue();
// 控制台打印值
Console.WriteLine(val);
}
}
先定义一个计算函数Calc并且包含两个参数a、b,定义好之后,再执行calc方法。
- 使用Jint引擎编写一段JS代码,并且在代码中调用 C# 定义的方法
static void Main(string[] args)
{
// 定义一个get对象指向GetString方法
var engine = new Engine()
.SetValue("get", new Action<string>(GetString));
// 执行JS方法hello,并且代码中调用了get方法即我们定义的GetString
engine.Execute(@"
function hello() {
get('Hello World');
};
hello();
");
}
// 自定义方法
public static void GetString(string str)
{
// 打印值
Console.WriteLine(str);
}
- 使用Jint引入Js模块
创建一个test.js 里面包含一个add方法,并有两个参数
static void Main(string[] args)
{
var engine = new Engine();
engine.Execute(File.ReadAllText(@"......\test.js"));
// 调用js里面的add方法
var result = engine.Execute("add(1,2)").GetCompletionValue();
Console.WriteLine(result);
}
结语
其实能在后端代码执行JavaScript还是非常不错的,如前后端的一些加解密库不一样的时候,我们可以调用JS的一些库用来统一这些加解密算法。Js还是有很多不错好用的库噢,如果大家觉得Jint还有哪些用途可以一起分享哈。