1
0

find.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import fs from 'node:fs';
  2. import { dirname, extname, resolve } from 'node:path';
  3. import { findUpSync } from 'find-up';
  4. /**
  5. * 查找 package.json 文件所在的目录
  6. * @param pathname
  7. */
  8. function findUpPackageDir(pathname: string = '') {
  9. const file = findUpSync('package.json', {
  10. cwd: dirname(pathname),
  11. type: 'file',
  12. });
  13. return dirname(file || '');
  14. }
  15. /**
  16. * 根据给定的扩展名数组来查找文件是否存在,并返回对应文件路径
  17. * @param pathname 文件路径
  18. * @param extensions 扩展名数组
  19. * @returns 对应文件路径,如果未找到则返回 null
  20. */
  21. function findFileByExtension(
  22. pathname: string = '',
  23. extensions: string[] = ['.ts'],
  24. ): string {
  25. if (extname(pathname)) {
  26. return pathname;
  27. }
  28. for (const ext of extensions) {
  29. const fullpath = resolve(pathname);
  30. if (fs.existsSync(fullpath + ext) && fs.statSync(fullpath + ext).isFile()) {
  31. return fullpath + ext;
  32. }
  33. }
  34. for (const ext of extensions) {
  35. const resultPath = resolve(pathname, `index${ext}`);
  36. if (fs.existsSync(resultPath)) {
  37. return resultPath;
  38. }
  39. }
  40. return pathname;
  41. }
  42. export { findFileByExtension, findUpPackageDir };