我正在尝试在游戏引擎中使用 JS 作为脚本语言,TypeScript 位于顶部。作为运行时,我使用Duktape。我是一个关于 JavaScript 的完全菜鸟,目前我正试图围绕我如何启用一个工作流来让人们可以#include(需要等)其他文件。
出于测试目的,我从两个简单的 TypeScript 文件开始:
脚
declare function Print(text : string) : void;
export module Foo
{
export function GetFoo(): string
{
return "Foo"
}
Print("Foo: " + GetFoo())
}
巴茨
import { Foo } from "./Foo"
declare function Print(text: string): void;
Print("Bar: " + Foo.GetFoo())
现在我通过 TypeScript 的 Transpile 函数(来自 typescriptServices.js)得到:
Foo.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Foo;
(function (Foo) {
function GetFoo() {
return "Foo";
}
Foo.GetFoo = GetFoo;
Print("Foo: " + GetFoo());
})(Foo = exports.Foo || (exports.Foo = {}));
酒吧.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Foo_1 = require("./Foo");
Print("Bar: " + Foo_1.Foo.GetFoo());
然后我想通过 Duktape 执行 Bar.js。我读了这篇文章,所以我的理解是有多种方法可以使包含其他文件工作,但这个似乎专门使“require”函数工作,所以这听起来很适合 TypeScript 为我生成的 JS 代码。因此,我创建了一个 Duktape 上下文,在其上调用 duk_module_duktape_init 并注册了一个“modSearch”函数等。但在它实际到达 Bar.js 的“require”部分之前,Duktape 已经失败并显示消息“ReferenceError:标识符”出口未定义”。
如前所述,我对 JS 和 TS 真的很陌生,可能对整个工作有错误的想法,所以请随意提出完全不同的方法。我所关心的是用户可以将代码拆分为多个文件,并以某种方式引用这些文件,以便 VS Code 等工具可以找出这些引用并提供它们的功能来开发代码。我不在乎我最终是使用“require”还是“import”,以及我是否可以使用所有 TS 功能或只是一些子集。
长话短说,我做错了什么,我怎样才能做到这一点?