FiveM — это модификация Grand Theft Auto V, позволяющая играть в многопользовательскую игру на настроенных выделенных серверах на базе Cfx.re.
Когда вы разрабатываете сервер FiveM, вы можете создать ресурс. Эти ресурсы можно написать на нескольких языках Lua, C# и JavaScript. В этой статье мы увидим, как создать ресурс с помощью TypeScript
Для набора нашего кода мы будем использовать два пакета, предоставленные CFX.re, компанией, стоящей за FiveM
Эти пакеты предоставили типы для каждого собственного метода, который можно использовать внутри клиентского или серверного кода.
tsconfig.json
{ "compilerOptions": { "target": "ES2020", "module": "ESNext", "moduleResolution": "Bundler", // Location "outDir": "./dist", // Other "types": ["@citizenfx/client", "@types/node"], "lib": ["ES2020"], "strict": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "skipLibCheck": true }, "include": ["src/**/*.ts"], "exclude": ["**/node_modules", "**/.test.ts"] }
После компиляции файлов .ts вам нужно будет создать пакет, который будет загружаться и запускаться сервером FiveM. Действительно, FiveM позволяет требовать только собственный пакет node.js, такой как path, fs,…
Для этого мы используем инструмент под названиемrollup, это сборщик модулей JavaScript, основанный на системе плагинов. Я также изучал другие инструменты, такие как Vite, rspack, но это слишком сложно. Еще одним инструментом, который предлагает хорошую производительность, будет Turbopack, инструмент, стоящий за следующей сборкой, но на данный момент он все еще находится в следующей группе.
rollup.config.mjs
import typescript from "@rollup/plugin-typescript"; import commonjs from "@rollup/plugin-commonjs"; import resolve from "@rollup/plugin-node-resolve"; export default { input: "src/index.ts", output: { dir: "dist", format: "cjs", sourcemap: false, }, plugins: [resolve(), typescript(), commonjs()], };
package.json :
{ ... "devDependencies": { "@citizenfx/client": "2.0.9282-1", "@rollup/plugin-commonjs": "^26.0.1", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^11.1.6", "@types/node": "^20.14.12", "rollup": "^4.20.0", "tslib": "^2.6.3", "typescript": "^5.5.4" }, ... }
init.ts
import { join } from "path" export const init = () => { console.log("inited", join(".", "init.js")); }
index.ts
import { init } from "./init" on("onResourceStart", async (resName: string) => { if (resName === GetCurrentResourceName()) { init(); } });
После запуска накопительного пакета -c у вас останется только один файл:
'use strict'; var path = require('path'); const init = () => { console.log("inited", path.join(".", "init.js")); }; on("onResourceStart", async (resName) => { if (resName === GetCurrentResourceName()) { init(); } });
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3