2 回答
TA贡献1818条经验 获得超11个赞
您实际上可以使用项目引用。按照以下步骤获得与原始文件相同的结果,所有功能都在一个文件中的顶层。但是,我找不到仅在机器人中导入所需功能的解决方案。也就是说,不使用导入和导出。
在根目录下的 tsconfig.json 中
{
"files": [],
"references": [
{ "path": "./lib" }
{ "path": "./AggroMiner" }
{ "path": "./ArtilleryMicro" }
{ "path": "./MissileKite" }
{ "path": "./SmartMelee" }
{ "path": "./ZapKite" }
]
}
接下来,在你的 lib 文件夹中,像这样添加一个 tsconfig.json
{
"compilerOptions": {
"declaration": true,
"declarationMap": true,
"composite": true,
"rootDir": ".",
"outFile": "../build/lib.js",
"target": "es3",
"removeComments": true,
"sourceMap": false,
},
"files": [
"data.ts",
"movement.ts",
"utils.ts"
]
}
我们需要对 data.ts、motion.ts 和 utils.ts 做一些调整,这样 ts 就不会因为编译错误而困扰我们。
数据.ts
/// <reference path="./bot.land.d.ts"/>
(...)
运动.ts
/// <reference path="./data.ts"/>
/// <reference path="./utils.ts"/>
(...)
utils.ts
/// <reference path="./bot.land.d.ts"/>
(...)
接下来,我们在根目录添加 base.json(机器人的 tsconfig.json 将扩展它)。
基文件
{
"compilerOptions": {
"declaration": true,
"composite": true,
"rootDir": ".",
"target": "es3",
"removeComments": true,
"sourceMap": false,
}
}
和机器人的 tsconfig.json (根据机器人进行调整)
{
"extends": "../base",
"compilerOptions": {
"outFile": "../build/AggroMiner.js",
},
"files": [
"AggroMiner.ts"
],
"references": [
{ "path": "../lib", "prepend": true } //note the prepend: true
]
}
就是这样。现在只需运行
tsc -b
TA贡献1906条经验 获得超3个赞
这是我尝试回答您的要求。
值得注意的文件:
src/tsconfig-botland.json
保存任何bot.land脚本的设置(包括我移动到的自定义声明types/bot-land/index.d.ts
)。您可以更改strict
我使用的设置。src/tsconfig.json
保存对所有机器人的引用。这是要添加另一个机器人脚本时要编辑的文件
机器人脚本至少是两个文件:一个极简脚本tsconfig.json
和一个或多个.ts
脚本文件。
例如src/AggroMiner/tsconfig.json
:
{
"extends": "../tsconfig-botland",
"compilerOptions": {
"outFile": "../../build/AggroMiner.js"
},
"files": ["index.ts"],
"include": ["**/*.ts", "../lib/**/*.ts"]
}
在大多数情况下,要启动一个新的机器人脚本,您应该:
将任何 bot 文件夹(即
src/AggroMiner
)复制到下的新文件夹src
编辑
src/<newBotFolder>/tsconfig.json
以outFile
使用您的机器人的名称进行编辑编辑
src/tsconfig.json
并添加对src/<newBotFolder>
已设置以下npm
/yarn
脚本:
build
构建所有机器人build-clean
build
在运行之前清除文件夹build
format
.ts
在下的所有文件上运行 Prettiersrc
lint
对所有机器人脚本运行 tslint 检查
现在运行您的要求:
添加新机器人不需要新的样板(例如每个机器人不需要 tsconfig.json)
要实现这一点,需要创建一些脚本来枚举您的 bots 文件夹/脚本...并设置相关的每个 bottsconfig.json
并运行tsc
. 除非绝对必要,否则最小设置(如上所述)可能就足够了。
对常用函数使用 import 以避免输出未使用的代码,但是...
首先,请注意,如果您开始使用任何模块export
/import
语句,您将需要额外的 3rd 方打包 /treeshake 以实现单个文件输出。从我可以收集到的 Bot.land,您的脚本正在服务器上运行。除非死代码对你的机器人性能有影响,否则我不会真正打扰。
仍然以 Bot Land 的特定格式将所有功能输出为一个文件
完毕。
生成多个输出文件的单个构建步骤,每个机器人一个
完毕。
奖励:将构建过程与 VS Code 集成。目前有一个对应的样板 tasks.json 用于构建每个子项目。
该npm
脚本应该出现在VSC的任务列表(至少他们在我做的),从而使tasks.json
不必要的。
添加回答
举报