我正试图为Twilio可编程聊天工具编写一个C#包装器。提供的库是为JS客户端提供的。我认为使用像ClearScript(V8(这样的工具可以根据需要包装js。
网站上的示例代码是
const Chat = require('twilio-chat');
// Make a secure request to your backend to retrieve an access token.
// Use an authentication mechanism to prevent token exposure to 3rd parties.
const accessToken = '<your accessToken>';
Chat.Client.create(accessToken)
.then(client => {
// Use Programmable Chat client
});
所以在我初始化之后
using (var engine = new V8ScriptEngine())
{
engine.Execute(@"
const Chat = require('twilio-chat.js');
const token = 'my token';
Chat.Client.create(token).then(client=>{
});
");
}
未定义"require"行上带有错误require的程序错误。我读到require只是返回模块导出,所以我替换了require('。。。带有
engine.Execute(@"
const Chat = ('twilio-chat.js').module.exports;
...
但错误为无法读取未定义的的属性exports
我从获得js文件https://media.twiliocdn.com/sdk/js/chat/releases/4.0.0/twilio-chat.js
我该如何绕过这个问题,或者有更好的方法。我欣赏所有的见解。
感谢
我对Twilio一无所知,但以下是如何启用ClearScript的CommonJS模块支持。此示例从web加载脚本,但您可以将其限制在本地文件系统或提供自定义加载程序:
engine.AddHostType(typeof(Console));
engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading;
engine.DocumentSettings.SearchPath = "https://media.twiliocdn.com/sdk/js/chat/releases/4.0.0/";
engine.Execute(new DocumentInfo() { Category = ModuleCategory.CommonJS }, @"
const Chat = require('twilio-chat');
const token = 'my token';
Chat.Client.create(token).then(
client => Console.WriteLine(client.toString()),
error => Console.WriteLine(error.toString())
);
");
这成功地加载了Twilio脚本,它似乎依赖于其他脚本和资源,而这些脚本和资源不是ClearScript/V8提供的纯标准JavaScript环境的一部分。为了让它发挥作用,您必须增加搜索路径,并可能手动公开额外的资源。如图所示,此代码打印出ReferenceError: setTimeout is not defined
。