config.ts•2.3 kB
import path from 'path';
import fs from 'fs-extra';
import dotenv from 'dotenv';
// 加载环境变量
dotenv.config();
// 获取根目录
const getRootDir = () => {
return process.env.ROOT_DIR || process.cwd();
};
// 配置项
export const config = {
port: Number(process.env.PORT) || 3000,
rootDir: getRootDir(),
dataDir: path.join(getRootDir(), 'data'),
projectsDir: path.join(getRootDir(), 'data', 'projects'),
projectsDataFile: path.join(getRootDir(), 'data', 'projects.json'),
documentsDataFile: path.join(getRootDir(), 'data', 'documents.json'),
rulesDataFile: path.join(getRootDir(), 'data', 'rules.json'),
templatesDir: path.join(getRootDir(), 'data', 'templates'),
sessionSecret: process.env.SESSION_SECRET || 'memory-bank-secret',
defaultDocumentTemplates: {
projectbrief: '# 项目概述\n\n## 项目名称\n\n## 目标\n\n## 需求\n\n## 技术栈\n\n## 时间线\n\n',
productContext: '# 产品背景\n\n## 为什么需要这个项目\n\n## 需要解决的问题\n\n## 产品功能\n\n## 用户体验目标\n\n',
activeContext: '# 当前工作重点\n\n## 最近的更改\n\n## 下一步计划\n\n## 活动决策和考虑\n\n',
systemPatterns: '# 系统架构\n\n## 主要技术决策\n\n## 设计模式\n\n## 组件关系\n\n',
techContext: '# 技术上下文\n\n## 使用的技术\n\n## 开发设置\n\n## 技术约束\n\n## 依赖关系\n\n',
progress: '# 进度\n\n## 已完成的工作\n\n## 待完成的工作\n\n## 当前状态\n\n## 已知问题\n\n',
tasks: '# 任务\n\n## 待办任务\n\n- [ ] 任务1\n- [ ] 任务2\n\n## 进行中任务\n\n- [ ] 任务3\n\n## 已完成任务\n\n- [x] 任务4\n'
}
};
// 确保数据目录存在
export const ensureDataDirs = async () => {
await fs.ensureDir(config.dataDir);
await fs.ensureDir(config.projectsDir);
await fs.ensureDir(config.templatesDir);
// 初始化空的数据文件(如果不存在)
if (!await fs.pathExists(config.projectsDataFile)) {
await fs.writeJSON(config.projectsDataFile, []);
}
if (!await fs.pathExists(config.documentsDataFile)) {
await fs.writeJSON(config.documentsDataFile, []);
}
if (!await fs.pathExists(config.rulesDataFile)) {
await fs.writeJSON(config.rulesDataFile, []);
}
};
export default config;