Replace script-order globals shared between board.js, game.js and drag.js

未关闭
#32 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
48/100
Issue 类型
重构
描述清晰度
基本清楚
活跃度
活跃
技术栈
eslint, javascript, node.js

调研方向

Read docs/ARCHITECTURE.md and .github/CONTRIBUTING.md, then trace the shared state and window accessors in js/board.js, js/game.js, and js/drag.js alongside the globals in eslint.config.js. Start by checking the test bootstrap work in related issue #40 and the existing tests in tests/. Run npm test and npm run lint; done means board rendering no longer reads game variables, missing drag dependencies raise errors, and the per-file globals list shrinks or disappears.

由索引模型根据 Issue 内容生成。

描述

severity: medium tech-debt

Summary

The seven scripts share one global scope and depend on load order. board.js and game.js read each other's variables, drag.js reaches both through window.* behind typeof guards, and eslint.config.js hand-lists the cross-file globals for every file.

Where

  • js/board.js:184 (reads moveHistory from game.js), js/game.js:109 (reads selectedSquare and possibleMoves from board.js)
  • js/game.js:908-921, js/board.js:252-266 (window getters)
  • js/drag.js:97-115, js/drag.js:230-232, js/drag.js:256
  • eslint.config.js:35-155
  • package.json:5 ("type": "module" while every file uses CommonJS exports)

Impact

Adding or moving a function means editing the source, the ESLint globals list and each test preamble. The typeof guards in drag.js turn a wiring mistake into a silent no-op (a drop that does nothing). The globals list is already stale: drag.js is granted handleBoardClick, which it does not use.

Suggested fix

  1. Move the shared test bootstrap into one helper (#40); no production change.
  2. Break the cycle: pass lastMove into updateBoardVisuals, and give selectedSquare and possibleMoves one owning module with accessors.
  3. Replace the window.* getters with one explicit namespace object and drop the typeof guards.
  4. Optionally convert to ES modules, which removes the per-file globals lists. ES modules do not load from file://, so decide first whether opening index.html directly must keep working.

Acceptance criteria

  • board.js renders without reading game.js variables
  • A missing dependency in drag.js raises an error instead of doing nothing
  • The per-file globals in eslint.config.js shrink or disappear

Getting started

  • Relevant files: js/board.js, js/game.js, js/drag.js, eslint.config.js, tests/
  • How to run tests: npm install, then npm test and npm run lint
  • Related docs: docs/ARCHITECTURE.md, .github/CONTRIBUTING.md

Filed by repo-audit/full-audit at 8a2c86c. Severity: medium. Effort: M. audit-key: tech-debt|js/board.js|window-globals

主要语言
JavaScript
星标
4
派生
2
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

TMHSDigital/Static_Chess 的其他 Issue

查看 TMHSDigital/Static_Chess 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。