* esm-shim.js:更改扩展名.js为.cjs强制开启 CommonJS模式 原因: 项目启用了 "type": "module" 后,Node.js 会默认将所有 .js 文件视为 ES Module 解析。然而,兼容层 (shim) 的核心逻辑依赖于 CommonJS 特有的 API(如 require、module._load、Module.prototype._compile)来劫持模块加载。 解决: 通过将扩展名改为 .cjs,显式告知 Node.js 即使在 ESM 项目中,该文件仍需以 CommonJS 模式 加载。这确保了它能在不破坏新架构的前提下,继续为旧版 Node.js 提供兼容性支持。 * esm-shim.cjs:重构并优化,使其更加符合项目整体规范 将原本的脚本式 Shim 重构为符合工程规范的模块,并补充了标准的 JSDoc 注释。 提取了硬编码配置为常量,提升可维护性。 使用闭包隔离了 Shim 的内部逻辑,防止污染全局作用域。 * server.js:重写为 ESM 语法 移除了不再需要的“异步启动检测”逻辑(原生 ESM 支持顶层 await,无需迂回) API 现代化:将已废弃的 req.connection 替换为 req.socket,将 url.parse 替换为标准的 new URL()。 * package.json:声明"type": "module",正式启用原生 ESM 支持 组合解决日志中的启动警告 * server.js:更新启动提示 * README.md:更新项目结构 * server.js:修复意外的全局覆盖导致不支持流式请求,改为和原版一致的局部引用 http-util.js 里调用的 fetch 是 Node.js 18+ 自带的原生 Fetch,但是重构后不小心强制了node-fetch,实际并无需要 * tmdb-util.js:修复未捕获的Promise拒绝导致进程崩溃退出 嗯?以往怎么没崩草 node:internal/deps/undici/undici:13510 Error.captureStackTrace(err); ^ DOMException [AbortError]: This operation was aborted at node:internal/deps/undici/undici:13510:13 at async httpGet (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/http-util.js:49:24) at async tmdbApiGet (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:22:22) at async searchTmdbTitles (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:71:22) at async executeSearch (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:354:24) Node.js v22.18.0
21 lines
484 B
JSON
21 lines
484 B
JSON
{
|
|
"name": "danmu-api-server",
|
|
"version": "1.0.0",
|
|
"type": "module",
|
|
"description": "A danmu Node.js Express API server",
|
|
"main": "danmu_api/server.js",
|
|
"scripts": {
|
|
"start": "node danmu_api/server.js",
|
|
"build-forward-widget": "node build-forward-widget.js"
|
|
},
|
|
"author": "",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"chokidar": "^4.0.3",
|
|
"dotenv": "^16.4.7",
|
|
"esbuild": "^0.25.10",
|
|
"https-proxy-agent": "^7.0.6",
|
|
"node-fetch": "^3.3.2"
|
|
}
|
|
}
|