49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import fs from 'node:fs';
|
|
import { dirname, extname, resolve } from 'node:path';
|
|
|
|
import { findUpSync } from 'find-up';
|
|
|
|
/**
|
|
* 查找 package.json 文件所在的目录
|
|
* @param pathname
|
|
*/
|
|
function findUpPackageDir(pathname: string = '') {
|
|
const file = findUpSync('package.json', {
|
|
cwd: dirname(pathname),
|
|
type: 'file',
|
|
});
|
|
return dirname(file || '');
|
|
}
|
|
|
|
/**
|
|
* 根据给定的扩展名数组来查找文件是否存在,并返回对应文件路径
|
|
* @param pathname 文件路径
|
|
* @param extensions 扩展名数组
|
|
* @returns 对应文件路径,如果未找到则返回 null
|
|
*/
|
|
function findFileByExtension(
|
|
pathname: string = '',
|
|
extensions: string[] = ['.ts'],
|
|
): string {
|
|
if (extname(pathname)) {
|
|
return pathname;
|
|
}
|
|
|
|
for (const ext of extensions) {
|
|
const fullpath = resolve(pathname);
|
|
if (fs.existsSync(fullpath + ext) && fs.statSync(fullpath + ext).isFile()) {
|
|
return fullpath + ext;
|
|
}
|
|
}
|
|
|
|
for (const ext of extensions) {
|
|
const resultPath = resolve(pathname, `index${ext}`);
|
|
if (fs.existsSync(resultPath)) {
|
|
return resultPath;
|
|
}
|
|
}
|
|
return pathname;
|
|
}
|
|
|
|
export { findFileByExtension, findUpPackageDir };
|