Skip to content

代码编写规范指南

Arena 环境

在 Arena 环境中,服务端与客户端采用不同的架构体系和编写规范:

  • 服务端:采用 CommonJS 规范
  • 客户端:采用 ES6 规范

ArenaPro 环境

ArenaPro 环境实现了统一架构,为开发带来更简洁高效的体验:

  • 推荐规范:统一使用 ESNext 规范
  • 主要优势
    • 代码更简洁易读
    • 支持最新 JavaScript 特性
    • 开发体验更统一

服务端开发规范

模块导出(CommonJS)

服务端使用 CommonJS 规范进行模块导出。主要通过 module.exports 实现:

javascript
// 示例1:导出多个函数和变量
const playerUtils = {
  getPlayerHealth(player) {
    return player.health;
  },
  healPlayer(player, amount) {
    player.health += amount;
  },
  MAX_HEALTH: 100,
};

module.exports = playerUtils;

// 示例2:分别导出多个内容
module.exports.createEnemy = function (type, level) {
  return {
    type,
    level,
    power: level * 10,
  };
};

module.exports.ENEMY_TYPES = ["goblin", "dragon", "boss"];

模块导入(require)

使用 require() 函数导入模块:

javascript
// 示例1:导入整个模块
const playerUtils = require("./playerUtils.js");

// 使用导入的功能
const player = { health: 50 };
playerUtils.healPlayer(player, 20);
console.log(playerUtils.getPlayerHealth(player)); // 输出: 70

// 示例2:使用解构赋值导入特定功能
const { createEnemy, ENEMY_TYPES } = require("./enemyUtils.js");

const newEnemy = createEnemy(ENEMY_TYPES[0], 5);
console.log(newEnemy); // 输出: { type: 'goblin', level: 5, power: 50 }

最佳实践

  • 模块文件名使用小写,采用驼峰或下划线命名
  • 相关功能打包在同一个模块中导出
  • 为导出的函数和变量添加清晰的注释
  • 避免循环依赖

客户端开发规范

模块导出(ES6)

客户端使用 ES6 模块化规范,支持命名导出和默认导出:

javascript
// 示例1:UI组件导出
export class GameUI {
  constructor() {
    this.elements = new Map();
  }

  addElement(id, element) {
    this.elements.set(id, element);
  }

  render() {
    // 渲染逻辑
  }
}

// 示例2:工具函数导出
export const formatScore = (score) => `Score: ${score.toLocaleString()}`;
export const formatTime = (seconds) =>
  `${Math.floor(seconds / 60)}:${(seconds % 60).toString().padStart(2, "0")}`;

// 默认导出主游戏类
export default class Game {
  constructor() {
    this.ui = new GameUI();
    this.score = 0;
    this.time = 0;
  }

  start() {
    // 游戏启动逻辑
  }
}

模块导入(import)

javascript
// 示例1:导入游戏核心功能
import Game, { GameUI, formatScore, formatTime } from "./game.js";

// 初始化游戏
const game = new Game();
const ui = new GameUI();

// 使用工具函数
console.log(formatScore(1000000)); // 输出: Score: 1,000,000
console.log(formatTime(125)); // 输出: 2:05

// 示例2:按需导入
import { GameUI as UserInterface } from "./game.js";
const ui = new UserInterface();

最佳实践

  • 使用有意义的模块名和导出名
  • 优先使用命名导出,便于代码追踪和重构
  • 一个文件只包含一个默认导出
  • 保持模块功能单一,避免过度耦合

注意事项

  • 在 Arena 环境中严格遵循服务端和客户端的不同规范
  • 在 ArenaPro 中统一使用 ES6+ 规范
  • 确保导入路径正确,包含文件扩展名
  • 避免在模块中直接修改全局状态