"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > FiveM x TypeScript

FiveM x TypeScript

2024-11-08에 게시됨
검색:966

FiveM x TypeScript

FiveM은 Grand Theft Auto V의 수정 버전으로, Cfx.re가 제공하는 맞춤형 전용 서버에서 멀티플레이어를 플레이할 수 있습니다.

FiveM 서버를 개발할 때 리소스를 생성할 수 있습니다. 이러한 리소스는 여러 언어의 Lua, C# 및 JavaScript로 작성될 수 있습니다. 이 기사에서는 TypeScript

를 사용하여 리소스를 구축하는 방법을 살펴보겠습니다.

유형 :

코드를 입력하기 위해 FiveM을 지원하는 회사인 CFX.re에서 제공하는 두 개의 패키지를 사용합니다.

  • @citizenfx/클라이언트
  • @citizenfx/서버

이러한 패키지는 클라이언트 측 또는 서버 측 코드 내에서 사용할 수 있는 각 기본 메서드에 대한 유형을 제공했습니다.

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은 path, fs, …

와 같은 기본 node.js 패키지의 요구만 허용합니다.

이를 위해 우리는 플러그인 시스템을 기반으로 하는 JavaScript 모듈 번들러인 롤업이라는 도구를 사용합니다. vite, rspack과 같은 다른 도구도 살펴봤지만 너무 복잡합니다. 좋은 성능을 제공하는 또 다른 도구는 다음 번들링 뒤에 있는 도구인 터보팩이 될 것이지만 현재는 여전히 다음 번들에 포함되어 있습니다.

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()],
};

패키지.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();
  }
});

rollup -c를 실행하면 파일이 하나만 생성됩니다.

'use strict';

var path = require('path');

const init = () => {
    console.log("inited", path.join(".", "init.js"));
};

on("onResourceStart", async (resName) => {
    if (resName === GetCurrentResourceName()) {
        init();
    }
});

릴리스 선언문 이 글은 https://dev.to/justinmartindev/fivem-x-typescript-3pgd?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3