diff --git a/package.json b/package.json index 9e3a1d8..574918a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kevisual/project-search", - "version": "0.0.8", + "version": "0.0.9", "description": "", "main": "index.js", "scripts": { diff --git a/src/project/project-search/file-list-content.ts b/src/project/project-search/file-list-content.ts index c17bf78..9c3f0f2 100644 --- a/src/project/project-search/file-list-content.ts +++ b/src/project/project-search/file-list-content.ts @@ -23,13 +23,23 @@ const TEXT_FILE_EXTENSIONS = [ '.sh', '.bash', '.zsh', '.fish', '.ps1', '.bat', '.cmd', '.psm1', // 其他 '.sql', '.graphql', '.gql', '.proto', '.dockerfile', '.gitignore', '.gitattributes', '.editorconfig', '.eslintrc', '.prettierrc', '.prettierignore', '.npmrc', '.yarnrc', '.babelrc', '.webpackrc', + // lock 文件 + '.lock', '-lock.json', '-lock.yaml', '-lock.yml', '.lockb', + // 其他配置文件 + '.pem', '.key', '.crt', '.cer', '.p12', '.pfx', ]; // 没有扩展名的配置文件 const CONFIG_FILE_NAMES = [ - '.gitignore', '.gitattributes', '.dockerignore', '.editorconfig', '.env', '.env.local', '.env.development', '.env.production', + '.gitignore', '.gitattributes', '.dockerignore', '.editorconfig', '.env', '.env.local', '.env.development', '.env.production', '.env.test', '.env.staging', '.env.example', '.env.sample', 'Dockerfile', 'Makefile', 'CMakeLists.txt', 'Vagrantfile', 'Gemfile', 'Podfile', 'Cartfile', '.bashrc', '.zshrc', '.vimrc', '.inputrc', + // lock 文件 + 'bun.lockb', 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'pnpm-workspace.yaml', + 'Gemfile.lock', 'Podfile.lock', 'Cartfile.resolved', 'composer.lock', 'requirements.txt', + 'Pipfile.lock', 'poetry.lock', 'Cargo.lock', 'go.sum', 'go.mod', + // IDE 配置 + '.vscode', '.idea', ]; export const isText = (filePath: string): boolean => { diff --git a/src/project/project-search/index.ts b/src/project/project-search/index.ts index 6357c25..1fe471a 100644 --- a/src/project/project-search/index.ts +++ b/src/project/project-search/index.ts @@ -53,9 +53,15 @@ function fileId(filePath: string): string { return Buffer.from(filePath).toString('base64url'); } -/** 根据文件绝对路径生成 md5 hash */ +/** 根据文件内容生成 md5 hash,用于检测文件变更 */ function fileHash(filePath: string): string { - return crypto.createHash('md5').update(filePath).digest('hex'); + try { + const content = fs.readFileSync(filePath); + return crypto.createHash('md5').update(content).digest('hex'); + } catch { + // 文件不可读时回退为路径 hash + return crypto.createHash('md5').update(filePath).digest('hex'); + } } export class ProjectSearch {