Node.js 是一个 JavaScript 运行环境。FlexCore 的 TypeScript 脚本需要通过 Node.js 附带的 npm 工具来安装 TypeScript 编译器。
下载安装
前往 Node.js 官网 https://nodejs.org/ ,下载 LTS(长期支持) 版本。安装过程中保持默认选项即可,确保勾选了"Add to PATH"。
验证安装
安装完成后,打开命令行(按 Win + R,输入 cmd,回车),依次输入:
node -v
npm -v
如果看到版本号输出(例如 v20.11.0 和 10.2.3),说明安装成功。
Visual Studio Code(简称 VSCode)是微软出品的免费代码编辑器,对 TypeScript 有原生支持,是编写 FlexCore 脚本的最佳选择。
下载安装
前往 https://code.visualstudio.com/ 下载安装。
必装插件
打开 VSCode 后,点击左侧活动栏的"扩展"图标(或按 Ctrl + Shift + X),搜索并安装以下插件:
| 插件名称 | 作用 |
|---|---|
| Chinese Language Pack | 中文语言包 |
| TypeScript | TypeScript 语法高亮和智能提示 |
安装完中文语言包后,按 Ctrl + Shift + P,输入"Configure Display Language",选择 zh-cn,重启 VSCode 即可。
TypeScript(简称 TS)是 JavaScript 的超集,增加了类型系统。你在 .ts 文件中编写脚本,然后通过 TypeScript 编译器(tsc)将其编译为 .js 文件,FlexCore 引擎实际执行的是编译后的 .js 文件。
全局安装
打开命令行,执行:
npm install -g typescript
验证安装
tsc -v
看到类似 Version 5.9.3 的输出即可。
在 VSCode 中,点击菜单 文件 → 打开文件夹,选择你的 FlexCore-TS-SDK 文件夹。
认识项目结构
打开后,左侧资源管理器中会看到如下目录结构:
FlexCore-TS-SDK/
├── api/ ← 引擎API类型定义(不需要修改)
│ ├── actor.ts 角色基类接口
│ ├── common.ts 通用类型(Vector2、Direction、BaseObject等)
│ ├── environment.ts 地图环境接口
│ ├── event.ts 事件系统接口
│ ├── game.ts GameLib 全局对象接口
│ ├── guild.ts 行会接口
│ ├── hero.ts 英雄接口
│ ├── imagelib.ts 素材库接口
│ ├── magic.ts 魔法接口
│ ├── monster.ts 怪物接口
│ ├── npc.ts NPC接口
│ ├── os.ts 操作系统模块接口
│ ├── playobject.ts 玩家对象接口
│ ├── std.ts 标准工具库接口
│ ├── stditem.ts 标准物品模板接口
│ └── useritem.ts 用户物品实例接口
├── npc/ ← NPC脚本(这是例子,开发时除了API目录外,其他可以自定义目录结构)
│ ├── 书店-0.ts 书店NPC
│ ├── 商人-1.ts 商人NPC
│ ├── 铁匠-1.ts 铁匠NPC
│ ├── 药店-3.ts 药店NPC
│ └── ... 更多NPC脚本
├── index.ts ← 入口文件(引擎从这里开始加载)
├── tsconfig.json ← TypeScript编译配置
└── package.json ← 项目配置
安装项目依赖
在 VSCode 中打开终端(菜单 终端 → 新建终端,或按 Ctrl + `),执行:
npm install
这会根据 package.json 中的配置,安装项目所需的依赖。当前项目唯一的开发依赖就是 TypeScript:
{
"devDependencies": {
"typescript": "^5.9.3"
}
}
执行完后,项目目录下会多出一个 node_modules 文件夹,里面是安装好的 TypeScript 编译器。
提示:如果
npm install执行很慢,可以切换到国内镜像源:npm config set registry https://registry.npmmirror.com然后重新执行
npm install。
tsconfig.json 是 TypeScript 编译器的配置文件,告诉 tsc 如何编译你的脚本。用 VSCode 打开它,逐行理解每个配置项:
{
"compilerOptions": {
"target": "es2015",
"module": "es2020",
"lib": ["es2015", "DOM"],
"outDir": "D:\\MirServer\\Mir200\\Scripts",
"rootDir": "./",
"strict": false,
"strictNullChecks": false,
"noImplicitAny": false,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"declaration": false,
"declarationMap": false,
"sourceMap": false,
"resolveJsonModule": false,
"baseUrl": ".",
"paths": {
"std": ["api/std"],
"os": ["api/os"]
}
},
"include": [
"**/*.ts"
],
"exclude": [
"node_modules",
"dist"
]
}
逐项解释:
| 配置项 | 值 | 含义 |
|---|---|---|
target |
"es2015" |
编译输出的 JS 代码兼容 ES2015 标准。FlexCore 内置的JS脚本引擎已经支持 ES2015+ |
module |
"es2020" |
使用 ES2020 模块系统(import/export)。FlexCore 脚本引擎支持 ES 模块 |
lib |
["es2015","DOM"] |
告诉 TS 编译器可用的 API 类型。包含 DOM 是为了让某些 DOM 类型定义不报错 |
outDir |
"D:\\MirServer\\Mir200\\Scripts" |
最重要的配置——编译后的 .js 文件输出到哪个目录。你需要把它改成你自己服务端的脚本目录路径 |
rootDir |
"./" |
源码根目录,就是当前 FlexCore-TS-SDK 目录 |
strict |
false |
关闭严格类型检查。FlexCore 脚本开发不需要严格的 TS 类型检查,降低学习门槛 |
strictNullChecks |
false |
关闭空值检查。避免频繁处理 null/undefined |
noImplicitAny |
false |
允许隐式 any 类型。不要求每个参数都写明类型 |
esModuleInterop |
true |
允许 CommonJS 和 ES 模块互操作 |
skipLibCheck |
true |
跳过声明文件类型检查,加快编译速度 |
declaration |
false |
不生成 .d.ts 类型声明文件(引擎不需要) |
sourceMap |
false |
不生成 sourceMap 文件(引擎不支持断点调试) |
baseUrl |
"." |
模块解析的基准路径 |
paths |
{"std":["api/std"], "os":["api/os"]} |
模块路径别名。让 import * as std from 'std' 能正确映射到 api/std.ts |
include |
["**/*.ts"] |
编译所有 .ts 文件 |
exclude |
["node_modules","dist"] |
排除 node_modules 和 dist 目录 |
你需要修改的配置:
把 outDir 改成你自己的服务端脚本目录,例如:
"outDir": "D:\\MyGame\\Server\\Scripts"
注意:Windows 路径中的反斜杠需要写成双反斜杠
\\,或者使用正斜杠/。
现在来体验一下完整的编译流程。
编译命令
在 VSCode 终端中执行:
npm run build
这等价于执行 tsc 命令。TypeScript 编译器会读取 tsconfig.json 的配置,将所有 .ts 文件编译为 .js 文件,输出到 outDir 指定的目录。
观察输出
编译完成后,打开 outDir 指定的输出目录,你会看到生成了对应的 .js 文件,把所有文件放在服务端主程序所在目录的Scripts下即可,引擎会自动识别并加载:
输出目录/
├── api/ ← api/ 下的 .ts 编译后通常是空文件(只有类型定义)
├── common/
│ ├── custom-hint-test.js
│ ├── timertest.js
│ └── ...
├── cs/
│ ├── 商店共用逻辑.js
│ └── ...
├── login/
│ ├── playerlogin.js
│ ├── itemuse.js
│ └── ...
├── npc/
│ ├── 书店-0.js
│ ├── 商人-1.js
│ └── ...(每个 .ts 都有对应的 .js)
└── index.js ← 入口文件
核心概念:.ts 和 .js 的关系
.ts 源文件 .js 编译产物 引擎运行
(你编写的代码) → (tsc 编译生成) → (JS脚本引擎 执行)
可以有类型注解 去掉了类型注解 只认识 JS 语法
有 import/export 保留 import/export ES模块加载
你永远只需要编辑 .ts 文件,.js 文件是编译自动生成的,不要手动修改。
实时编译(推荐开发方式)
每次改完代码都要手动执行 npm run build 太麻烦。VSCode 终端中执行:
npm run watch
这等价于 tsc -w(watch 模式)。编译器会持续监听文件变化,你每次保存 .ts 文件时自动编译,无需手动操作。
建议:开发时始终保持一个终端窗口运行
npm run watch,另开一个终端窗口执行其他命令。