0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#のアプリから、JavaScriptを実行して、結果を受け取る

Last updated at Posted at 2023-10-26

C#のローカルのアプリで使いたいTypeScriptのモジュールがあるのですが、TypeScript/JavaScriptの文法はほぼ知らないし、一から学んでいる時間も無いしで、C#に移植するのが難しい状況。
では、TypeScript/JavaScriptのコードをそのまま利用できるなら、解決できるんじゃないか? と考えたので調査しました。

Jering.Javascript.NodeJS

Jering.Javascript.NodeJS
を利用します。
ここの解説にある、Static API exampleを、C#のコンソールアプリで実行するのが分かりやすいです。

この例では、

string javascriptModule = @"
module.exports = (callback, x, y) => {  // Module must export a function that takes a callback as its first parameter
    var result = x + y; // Your javascript logic
    callback(null /* If an error occurred, provide an error object or message */, result); // Call the callback when you're done.
}";

と、文字列としてJavaScriptを配置しています。

JavaScriptのファイルを読み込んで実行するのなら、Invoking Javascript From a Fileの解説にある、

Result? result = await nodeJSService.InvokeFromFileAsync<Result>("exampleModule.js", args: new[] { "success" });

のように、ファイルを指定します。

JavaScriptのファイルに、importexportがあるなら、ファイルの拡張子を、mjsにします。→ 解決策がヘルプには見当たらず、Issuesを検索して読み込まないと分からないので、解決するまで時間がかかりました。

TypeScriptからJavaScriptへ変換

Jering.Javascript.NodeJSは、TypeScriptを扱えないようです(できないか調べましたが、解決方法を見つけられず・・・)。ですので、JavaScriptに変換しないといけません。ネット上で変換サービスがいくつかあるのですが、変換結果に違いがあります。
あるサイトで変換したコードでは、実行するとエラーになりました。TypeScriptはJavaScriptの上位互換と聞いていたので、変換されたコードに問題はないだろうと思っていましたが違いました。

エラーになったファイルを、
Typescript to Javascript compiler
で、変換したところ、問題は解消しました。
(このサイトの、TargetModuleについてまでは、調べていないので、何が適切なのか分かりませんが)

VisualStudioで変換する

(2023-12-5追記)
TypeScriptのコードを、VisualStudioのプロジェクトに配置して、ビルドできるようにすれば、JavaScriptのファイルが作成されます。
image.png

メモ

私の当初の目的(C#のアプリで、あるTypeScriptのモジュールを利用する)は達成できませんでした。
JavaScriptのコードを変更しないといけない部分が多く、結局JavaScriptが分からないと対応しきれなかったのです。

確認環境

  • Jering.Javascript.NodeJS 7.0.0
  • .NET 7
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?