income-stat-report
v1.0.7
Published
收入统计明细生成器 —— 纯前端单文件工具:上传维修/销售源表,生成《收入统计明细表》xlsx(SUMIFS 公式,无数据透视)。SheetJS 与 ExcelJS 已内联,离线可用。
Maintainers
Readme
发布到 npm · 收入统计明细生成器
把单文件程序发布到 npm,让用户手上的 收入统计明细生成器.html 能检查更新。
out/npm/
├── package.json 包元数据(name / version / files)—— **版本唯一来源**
├── version.json 版本清单(发布时由 package.json 自动生成,供 CDN 读取)
├── income-stat-report.html ← 单文件产物(由 out/pack/pack-builder.html 生成后放进来)
├── 一键发布.bat 构建校验 + 发布
├── .npmrc.example 令牌模板(复制为 .npmrc 可非交互发布)
└── README.md 本文件为什么包内文件名是 ASCII
包内文件叫 income-stat-report.html,而不是中文名。原因:更新是从 CDN 按 URL 取文件的,中文文件名在部分 CDN / 反向代理上会被转义或改写,导致取更新 404。桌面上的成品仍叫 收入统计明细生成器.html,用户侧无感。
程序内对应配置项:config.js 的 appUpdateFile(默认已是该 ASCII 名)。
发布流程(3 步)
1) 用打包器生成单文件
打开 out/pack/pack-builder.html:
- 选入
out/webapp/下的 8 个源文件(index.html、styles.css、config.js、app-core.js、app-build.js、app-sheet.js、app-ui.js、logo.jpg) - 在「更新源」里填 包名
income-stat-report与 版本号(必须与package.json的version一致) - 点「生成单文件 HTML」→ 得到
收入统计明细生成器.html(约 1.7 MB,含 SheetJS + ExcelJS,离线可用)
「更新源」留空也能打包,产物就是纯离线工具,只是页脚的检查更新会提示「尚未配置更新源」。
2) 放进发布目录
把产物复制到本目录并改名为 income-stat-report.html:
Copy-Item "$env:USERPROFILE\Downloads\收入统计明细生成器.html" "out\npm\income-stat-report.html" -Force(一键发布.bat 在缺文件时会自动从「下载」文件夹找中文名那份并复制过来。)
3) 发布
双击 一键发布.bat。它会:
- 检查 node / npm
- 确保
income-stat-report.html就位 - 由
package.json生成version.json(避免两处版本号漂移) - 校验单文件内嵌的
appVersion是否等于package.json的version(不一致会警告,可选继续) - 执行
npm publish --access public(有.npmrc就用它;没有则在窗口内粘贴令牌,不落盘) - 打印 npm / npmmirror / jsDelivr 的验证地址
也可以手动:
cd out\npm
npm publish --access public首次发布前建议先确认包名未被占用:
npm view income-stat-report报 404 即可用(已实测 4 个候选名income-stat-report/income-stat-detail/wwt-income-stat/income-stat-generator全部可用)。
发新版本
- 改
package.json的version(例如1.0.1)——如改了取数口径,同时把out/webapp/config.js的configVersion+1 - 用打包器按新版本号重新打包 → 覆盖
out/npm/income-stat-report.html - 双击
一键发布.bat
更新机制(程序侧)
// config.js
appVersion: '1.0.0' // 本程序版本,发布前与 package.json 对齐
appPkg: '' // npm 包名;留空 = 完全不联网
appUpdateFile: 'income-stat-report.html'
updateSources: [] // 留空则用内置顺序:
// registry.npmmirror.com/<pkg>/latest
// cdn.jsdelivr.net/npm/<pkg>@latest/version.json
// registry.npmjs.org/<pkg>/latest- 填了
appPkg:启动后台静默检查一次(失败不打扰)+ 页脚「检查更新」按钮手动检查; 发现新版本时给出下载链接(cdn.jsdelivr.net/npm/<pkg>@<ver>/income-stat-report.html)。 - 留空:程序完全不发起任何网络请求,保持纯前端离线。
- 下载到新版本后,替换本地那份 HTML 即可;规则配置(localStorage)与数据都不受影响。
实测结论:npm 官方 registry 不返回 CORS 头(
OPTIONS预检回 404),所以浏览器里不可能完成npm publish,发布必须走 npm CLI。但读取版本信息没问题(npmmirror 对file://跨域宽容,jsDelivr 返回*)。
验证清单
# 包信息(应返回 version 字段)
curl https://registry.npmmirror.com/income-stat-report/latest
# 版本清单
curl https://cdn.jsdelivr.net/npm/income-stat-report@latest/version.json
# 单文件本体(应 >1MB)
curl -I https://cdn.jsdelivr.net/npm/income-stat-report@latest/income-stat-report.html发布后可在页面实测:把 appPkg 填成包名,点页脚「检查更新」,应显示「已是最新版本 vX.Y.Z」。
