gpt4 book ai didi

javascript - 配置具有公共(public)依赖项的 TypeScript 项目以构建多个纯 JavaScript 输出文件

转载 作者:行者123 更新时间:2023-12-03 08:06:50 30 4
gpt4 key购买 nike

我正在写 some scripts对于 Bot Land . Bot Land 是一款实时战略游戏,您无需使用鼠标和键盘控制您的单位,而是编写代码通过 API 控制您的机器人,然后您的机器人与其他机器人战斗。如果您熟悉 SC2 中的单位,您可以创建类似于眨眼追踪者、攻城坦克、医务人员和 super 巨蜥的机器人。 (对于软件工程师来说,这是一款非常有趣的游戏,但这超出了这个问题的范围。)

bot land

机器人控制具有三个日益复杂的级别:默认 AI、Scratch -like 编程语言,以及一组简化的 JavaScript,称为 BotLandScript。虽然 BotLandScript 的内置编辑器是合理的,但您必须将所有代码上传为 一个文件全局顶级功能无处不在。当然,如果您的代码开始变得很长并且不同的机器人共享相同的功能,那么这会在一段时间后开始变得痛苦。

programming environment

为了方便为多个机器人编写代码,减少在裸 JS 中编码时出现意外错误的机会,并增加我击败其他玩家的机会,我设置了 above TypeScript project为我的每个机器人提供一个通用库和代码。当前目录结构大致如下所示:

lib/ 
bot.land.d.ts
common.ts
BlinkStalker/
BlinkStalker.ts
tsconfig.json
Artillery/
Artillery.ts
tsconfig.json
SmartMelee/
SmartMelee.ts
tsconfig.json
lib是在 bot 之间共享的公共(public)代码,并为(非 TS)Bot Land API 提供 TypeScript 定义。然后每个机器人都有自己的文件夹,其中一个文件包含机器人代码,另一个文件是样板 tsconfig.json :

{
"compilerOptions": {
"target": "es3",
"module": "none",
"sourceMap": false,
"outFile": "bot.js"
},
"files": [
"MissileKite.ts"
],
"include": [
"../lib/**/*"
]
}

当每个 tsconfig.json构建完成后,它会创建一个对应的 bot.js包含来自 bot 本身的转译代码以及 common.js 中的所有代码.由于以下几个原因,这种设置不是最理想的,其中包括:它需要大量重复的样板,难以添加新的机器人,为每个机器人包含大量不必要的代码,并且需要单独构建每个机器人。

但是,基于 my research so far ,似乎没有一种简单的方法可以做我想做的事。特别是,使用新的 tsc -b选项和引用不起作用,因为这需要对代码进行模块化,而 Bot Land 需要一个文件,其中所有函数都在顶层定义。

尽可能多地实现以下目标的最佳方法是什么?
  • 添加新机器人不需要新样板(例如,每个机器人不需要 tsconfig.json)
  • 使用import对于常用功能,以避免输出未使用的代码,但是...
  • 仍然以 Bot Land 的特定格式将所有函数输出为一个文件
  • 生成多个输出文件的单个构建步骤,每个 bot 一个
  • 奖励:将构建过程与 VS Code 集成。当前有一个相应的样板 tasks.json 用于构建每个子项目。

  • 我隐约猜测答案可能除了 tsc 之外还涉及诸如 Grunt 之类的东西。 ,但我对此知之甚少,无法确定。

    最佳答案

    这是我的attempt回答您的要求。

    值得注意的文件:

  • src/tsconfig-botland.json保存任何 bot.land 脚本的设置(包括我移至 types/bot-land/index.d.ts 的自定义声明)。您可以更改strict我使用的设置。
  • src/tsconfig.json保存对所有机器人的引用。这是您想要添加另一个机器人脚本时要编辑的文件

  • 一个bot脚本至少有两个文件:一个极简的 tsconfig.json和一个或多个 .ts脚本文件。

    例如 src/AggroMiner/tsconfig.json :
    {
    "extends": "../tsconfig-botland",
    "compilerOptions": {
    "outFile": "../../build/AggroMiner.js"
    },
    "files": ["index.ts"],
    "include": ["**/*.ts", "../lib/**/*.ts"]
    }

    在大多数情况下,要启动新的机器人脚本,您应该:
  • 将任何机器人文件夹(即 src/AggroMiner )复制到 src 下的新文件夹中
  • 编辑src/<newBotFolder>/tsconfig.json编辑 outFile使用您的机器人名称
  • 编辑 src/tsconfig.json并添加对 src/<newBotFolder> 的引用

  • 以下 npm/ yarn脚本已设置:
  • build构建所有机器人
  • build-clean清除build运行 build 之前的文件夹
  • format在所有 .ts 上运行 Prettier src 下的文件
  • lint对所有机器人脚本运行 tslint 检查

  • 现在满足您的要求:
  • 添加新机器人不需要新样板(例如,每个机器人不需要 tsconfig.json)

  • 要实现这一点,需要创建一些脚本来枚举您的机器人文件夹/脚本......并为每个机器人设置相关的 tsconfig.json并运行 tsc .除非绝对必要,否则最小设置(如上所述)可能就足够了。
  • 对常用函数使用 import 以避免输出未使用的代码,但是...

  • 首先,请注意,如果您开始使用任何模块 export/ import声明,您将需要额外的第 3 方来打包/treeshake 以实现单个文件输出。从我可以收集到的 Bot.land 中,您的脚本正在服务器上运行。除非死代码对您的机器人性能有影响,否则我不会真正打扰。
  • 仍然以 Bot Land 的特定格式将所有函数输出为一个文件

  • 完毕。
  • 生成多个输出文件的单个构建步骤,每个 bot 一个

  • 完毕。
  • 奖励:将构建过程与 VS Code 集成。当前有一个相应的样板 tasks.json 用于构建每个子项目。
  • npm脚本应该出现在 vsc 的任务列表中(至少在我的任务列表中),从而使 tasks.json不必要。

    关于javascript - 配置具有公共(public)依赖项的 TypeScript 项目以构建多个纯 JavaScript 输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58278709/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com