feat: 添加命令在每次启动项目或者编译时执行scripts/statistics.mjs脚本,解决gemini生成代码不兼容windows问题

master
lichaojun 2 months ago
parent 832503210b
commit 8a6e79a691

@ -45,6 +45,7 @@ vue3-mgt-template/
### **对Gemini的特别指令**
- **严格遵守规范**当Gemini为本项目生成或修改任何代码时**必须** 严格遵守本文件中定义的所有开发规范。
- **中文优先**:所有代码注释、日志输出(例如 `console.log`、以及提交信息Commit Message**必须** 使用中文。
- **多平台兼容**所有代码需要兼容mac,windows,linux平台。
### 代码风格
@ -86,6 +87,22 @@ vue3-mgt-template/
* 根据用户需求,多次优化了页面标题的生成规则。
* 根据用户反馈为所有由Gemini生成的代码和日志添加了中文注释并强化了此项规范。
### 本次会话总结 (2025年10月14日)
本次会话聚焦于解决 `scripts/statistics.mjs` 脚本在 Windows 平台上的兼容性问题。
1. **问题定位**:
* 用户报告在 Windows 系统上运行 `pnpm run stats` 命令无法生成正确的 `config.json` 文件,统计数据不完整。初步诊断为跨平台路径分隔符问题。
2. **修复过程**:
* **初次尝试**: 修正了脚本中过滤 `components` 目录的逻辑,将硬编码的 `/` 改为跨平台兼容的判断方式。但测试后发现问题未完全解决。
* **深入分析**: 进一步排查发现,问题根源在于 `globSync` 函数在 Windows 上接收了由 `path.join` 生成的包含 `\` 的路径模式,导致文件匹配失败。
* **最终修复**: 根据 `glob` 库的最佳实践,修改了脚本,在调用 `globSync` 前强制将路径模式中的 `\` 替换为 `/`
3. **结果验证**:
* 重新运行 `pnpm run stats` 命令,脚本成功执行,并生成了包含所有模块 (`demo`, `python`, `template` 等) 的完整统计数据。
* `config.json` 文件内容恢复正常,证明了跨平台兼容性问题已解决。
- gemini在与我每次对话中需要将重要信息更新到GEMINI.md文件中方便下次重新运行时gemini理解
## 开发任务
@ -93,7 +110,7 @@ vue3-mgt-template/
使用了删除线的就代表已执行完成
### 任务列表
* 项目首页/welcome这个路由下是默认的的首页介绍页面但是现在这个页面是一个静态的页面是由一些模拟数据渲染的我现在希望完成功能如下
* ~~项目首页/welcome这个路由下是默认的的首页介绍页面但是现在这个页面是一个静态的页面是由一些模拟数据渲染的我现在希望完成功能如下~~
- ~~在package.json中添加一个命令当执行这个命令的时候可以本地统计/src/views下的/demo/python/utils/screen这四个模块下分别有多少个页面页面维度请按照router路由来统计例如/python文件夹有五个文件夹这就是5个页面。当统计完成后在/src/views/welcome中创建或者更新config.json文件以便后续页面可以直接读取json配置文件~~
- ~~请读取/src/view/welcome中页面其中页面的数据来源为/scripts/statistics.mjs请更新该脚本以便获得更多的信息来满足/src/view/welcome页面所需数据的渲染~~

@ -4,9 +4,9 @@
"private": true,
"type": "module",
"scripts": {
"dev": "NODE_OPTIONS=--max-old-space-size=4096 vite",
"dev": "pnpm stats && NODE_OPTIONS=--max-old-space-size=4096 vite",
"serve": "pnpm dev",
"build": "rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build",
"build": "pnpm stats && rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build",
"build:staging": "rimraf dist && vite build --mode staging",
"report": "rimraf dist && vite build",
"preview": "vite preview",

@ -1,5 +1,3 @@
import { globSync } from 'glob';
import fs from 'fs';
import path from 'path';
@ -92,7 +90,8 @@ const templateTitleMap = parseStaticRouteTitles(path.join(routerModulesPath, 'te
let allNotes = [];
// 1. 统计 demo 模块
const demoFiles = globSync(path.join(viewsPath, 'demo', '**/*.vue')).filter(p => !p.includes('/components/'));
const demoPattern = path.join(viewsPath, 'demo', '**/*.vue').replace(/\\/g, '/');
const demoFiles = globSync(demoPattern).filter(p => !p.replace(/\\/g, '/').includes('/components/'));
demoFiles.forEach(file => {
const stats = fs.statSync(file);
allNotes.push({
@ -104,7 +103,8 @@ demoFiles.forEach(file => {
});
// 2. 统计 python 模块
const pythonFiles = globSync(path.join(viewsPath, 'python', '**/*.vue'));
const pythonPattern = path.join(viewsPath, 'python', '**/*.vue').replace(/\\/g, '/');
const pythonFiles = globSync(pythonPattern);
pythonFiles.forEach(file => {
const stats = fs.statSync(file);
allNotes.push({
@ -116,7 +116,8 @@ pythonFiles.forEach(file => {
});
// 3. 统计 template 模块
const templateFiles = globSync(path.join(viewsPath, 'template', '**/*.vue')).filter(p => !p.includes('/components/'));
const templatePattern = path.join(viewsPath, 'template', '**/*.vue').replace(/\\/g, '/');
const templateFiles = globSync(templatePattern).filter(p => !p.replace(/\\/g, '/').includes('/components/'));
templateFiles.forEach(file => {
const stats = fs.statSync(file);
allNotes.push({

@ -1,8 +1,8 @@
{
"totalNotes": 74,
"categories": 5,
"lastUpdated": "2025-10-14T03:06:31.162Z",
"weeklyAdded": 5,
"lastUpdated": "2025-10-14T13:11:22.933Z",
"weeklyAdded": 16,
"categoryChartData": [
{
"name": "demo",
@ -27,34 +27,34 @@
],
"recentNotes": [
{
"path": "demo/deletdNodeModules/index.vue",
"title": "删除 node_modules 文件夹非常耗时解决办法",
"path": "demo/typescript/index.vue",
"title": "typescript",
"category": "demo",
"date": "2025-10-14"
},
{
"path": "demo/asyncDynComp/index.vue",
"title": "异步动态加载组件",
"path": "demo/thirdCompWrap/index.vue",
"title": "第三方组件二次封装slot传递",
"category": "demo",
"date": "2025-10-11"
"date": "2025-10-14"
},
{
"path": "demo/asyncDynComp/moduleA/item2.vue",
"title": "item2",
"path": "demo/scssLiveTranslate/index.vue",
"title": "SCSS → CSS 实时翻译器",
"category": "demo",
"date": "2025-10-11"
"date": "2025-10-14"
},
{
"path": "demo/asyncDynComp/moduleA/item1.vue",
"title": "item1",
"path": "demo/pullRefresh/index.vue",
"title": "有弹性的下拉刷新",
"category": "demo",
"date": "2025-10-11"
"date": "2025-10-14"
},
{
"path": "demo/dataSafe/index.vue",
"title": "数据安全-加密解密与掩码",
"path": "demo/pullLoadData.vue",
"title": "首页高度不够,手写移动端下拉加载历史数据",
"category": "demo",
"date": "2025-10-10"
"date": "2025-10-14"
}
]
}
Loading…
Cancel
Save