From 60271175d6448b1f31bbaa1d43b21c04c9d42b86 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Sat, 4 Jul 2026 23:51:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9A=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=96=87=E4=BB=B6=E8=A1=A5=E5=8F=8C=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=97=B6=E5=AE=88=E5=8D=AB=EF=BC=8C=E8=A7=A3=E9=94=81=20Node?= =?UTF-8?q?=20=E5=8D=95=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 dev-guide 01 §1「一套代码,两个运行时」补齐 erqiwang 缺失的守卫(此前只支持友乐全局加载模型): - 顶部:跨模块依赖走 `if (typeof require!=='undefined') var X=require('./class.X.js')` (config/pai/arith 无跨模块依赖;paiju 依赖 arith/config/pai;desk 依赖 paiju;export 依赖 arith/config/desk) - 底部:`if (typeof module!=='undefined') module.exports = cls_X` - export/import 的平台接线 `youle_erqiwang.X=...` 加 `typeof youle_erqiwang` 守卫,Node 无此全局时跳过 纯增量:友乐无 require(浏览器模型),守卫全部跳过、全局名仍无条件暴露,线上行为不变; 仅在 Node 下额外启用 require/module.exports,从而可用 node 直接单测。min_*/youle_erqiwang 等平台全局仍按全局名引用(Node 侧由测试 shim 提供)。 Co-Authored-By: Claude Opus 4.8 (1M context) --- server/games/erqiwang/class.arith.js | 5 +++++ server/games/erqiwang/class.config.js | 5 +++++ server/games/erqiwang/class.desk.js | 10 ++++++++++ server/games/erqiwang/class.export.js | 18 ++++++++++++++++-- server/games/erqiwang/class.import.js | 11 +++++++++-- server/games/erqiwang/class.pai.js | 5 +++++ server/games/erqiwang/class.paiju.js | 12 ++++++++++++ 7 files changed, 62 insertions(+), 4 deletions(-) diff --git a/server/games/erqiwang/class.arith.js b/server/games/erqiwang/class.arith.js index 7407fe6..92e78c3 100644 --- a/server/games/erqiwang/class.arith.js +++ b/server/games/erqiwang/class.arith.js @@ -1281,3 +1281,8 @@ var cls_youle_erqiwang_arith = cls_youle_erqiwang_arith || { } } +//Node 导出;友乐/浏览器无 module 时跳过(dev-guide 01 §1)。min_ary_include/min_ary_deduct 为平台全局,两运行时按全局名引用 +if (typeof module !== "undefined"){ + module.exports = cls_youle_erqiwang_arith; +} + diff --git a/server/games/erqiwang/class.config.js b/server/games/erqiwang/class.config.js index 8b81570..e842726 100644 --- a/server/games/erqiwang/class.config.js +++ b/server/games/erqiwang/class.config.js @@ -45,3 +45,8 @@ var cls_youle_erqiwang_config = cls_youle_erqiwang_config || { return cfg; } } + +//Node(本地/单元测试)导出;友乐/浏览器无 module 时跳过,按全局名引用(dev-guide 01 §1) +if (typeof module !== "undefined"){ + module.exports = cls_youle_erqiwang_config; +} diff --git a/server/games/erqiwang/class.desk.js b/server/games/erqiwang/class.desk.js index e504a74..1ad753b 100644 --- a/server/games/erqiwang/class.desk.js +++ b/server/games/erqiwang/class.desk.js @@ -1,6 +1,11 @@ /////////////////////////////////////////////////// ////////// cls_youle_erqiwang_desk: 牌桌 ////////// /////////////////////////////////////////////////// +//跨模块依赖:Node 走 require 守卫;友乐/浏览器由 min_loadJsFile 加载为同名全局(dev-guide 01 §1) +if (typeof require !== "undefined"){ + var cls_youle_erqiwang_paiju = require("./class.paiju.js"); +} + var cls_youle_erqiwang_desk = cls_youle_erqiwang_desk || { countdown_jiaofen: 15, //叫分倒计时 @@ -183,3 +188,8 @@ var cls_youle_erqiwang_desk = cls_youle_erqiwang_desk || { return msg; } } + +//Node 导出;友乐/浏览器无 module 时跳过(dev-guide 01 §1)。SendPack/youle_erqiwang.* 为平台全局 +if (typeof module !== "undefined"){ + module.exports = cls_youle_erqiwang_desk; +} diff --git a/server/games/erqiwang/class.export.js b/server/games/erqiwang/class.export.js index 178cf23..eb1ed91 100644 --- a/server/games/erqiwang/class.export.js +++ b/server/games/erqiwang/class.export.js @@ -1,6 +1,13 @@ /////////////////////////////////////////////////// /////// cls_youle_erqiwang_export: 输出接口 /////// /////////////////////////////////////////////////// +//跨模块依赖:Node 走 require 守卫;友乐/浏览器由 min_loadJsFile 加载为同名全局(dev-guide 01 §1) +if (typeof require !== "undefined"){ + var cls_youle_erqiwang_config = require("./class.config.js"); + var cls_youle_erqiwang_arith = require("./class.arith.js"); + var cls_youle_erqiwang_desk = require("./class.desk.js"); +} + var cls_youle_erqiwang_export = cls_youle_erqiwang_export || { new: function() { @@ -206,5 +213,12 @@ var cls_youle_erqiwang_export = cls_youle_erqiwang_export || { } } -//对内输出接口 -youle_erqiwang.export = cls_youle_erqiwang_export.new(); \ No newline at end of file +//对内输出接口(友乐/浏览器:youle_erqiwang 由 mod.js 先建;Node 单测无此全局时跳过) +if (typeof youle_erqiwang !== "undefined"){ + youle_erqiwang.export = cls_youle_erqiwang_export.new(); +} + +//Node 导出;友乐/浏览器无 module 时跳过(dev-guide 01 §1) +if (typeof module !== "undefined"){ + module.exports = cls_youle_erqiwang_export; +} \ No newline at end of file diff --git a/server/games/erqiwang/class.import.js b/server/games/erqiwang/class.import.js index 4c09150..6cd8a82 100644 --- a/server/games/erqiwang/class.import.js +++ b/server/games/erqiwang/class.import.js @@ -26,5 +26,12 @@ var cls_youle_erqiwang_import = cls_youle_erqiwang_import || { } } -// 输入接口 -youle_erqiwang.import = cls_youle_erqiwang_import.new(); \ No newline at end of file +// 输入接口(友乐/浏览器:youle_erqiwang 由 mod.js 先建;Node 单测无此全局时跳过) +if (typeof youle_erqiwang !== "undefined"){ + youle_erqiwang.import = cls_youle_erqiwang_import.new(); +} + +//Node 导出;友乐/浏览器无 module 时跳过(dev-guide 01 §1)。youle_erqiwang.app 为平台全局 +if (typeof module !== "undefined"){ + module.exports = cls_youle_erqiwang_import; +} \ No newline at end of file diff --git a/server/games/erqiwang/class.pai.js b/server/games/erqiwang/class.pai.js index a9e674e..d8e6beb 100644 --- a/server/games/erqiwang/class.pai.js +++ b/server/games/erqiwang/class.pai.js @@ -59,3 +59,8 @@ var cls_youle_erqiwang_pai = cls_youle_erqiwang_pai || { return pai; } } + +//Node 导出;友乐/浏览器无 module 时跳过(dev-guide 01 §1) +if (typeof module !== "undefined"){ + module.exports = cls_youle_erqiwang_pai; +} diff --git a/server/games/erqiwang/class.paiju.js b/server/games/erqiwang/class.paiju.js index e374e11..2454db4 100644 --- a/server/games/erqiwang/class.paiju.js +++ b/server/games/erqiwang/class.paiju.js @@ -1,6 +1,13 @@ /////////////////////////////////////////////////// ////////// cls_youle_erqiwang_paiju: 牌局 ///////// /////////////////////////////////////////////////// +//跨模块依赖:Node 走 require 守卫;友乐/浏览器无 require,由 min_loadJsFile 加载为同名全局(dev-guide 01 §1) +if (typeof require !== "undefined"){ + var cls_youle_erqiwang_arith = require("./class.arith.js"); + var cls_youle_erqiwang_config = require("./class.config.js"); + var cls_youle_erqiwang_pai = require("./class.pai.js"); +} + var cls_youle_erqiwang_paiju = cls_youle_erqiwang_paiju || { new: function(o_desk, firstseat) { @@ -914,3 +921,8 @@ var cls_youle_erqiwang_paiju = cls_youle_erqiwang_paiju || { return msg; } } + +//Node 导出;友乐/浏览器无 module 时跳过(dev-guide 01 §1)。min_random/min_now/min_ontimeout、youle_erqiwang.import 为平台全局 +if (typeof module !== "undefined"){ + module.exports = cls_youle_erqiwang_paiju; +}