vite-plugin-import-rewriter
Version:
重写 `import` 的 `vite` 插件
44 lines (33 loc) • 1.32 kB
text/typescript
import { DEFAULT_OPTIONS } from './consts';
import type { Options } from './types';
import {
isExistsFile,
isIdIncludeSign,
getSignMethod,
delSign,
getNewIdByMethod,
getIdBasename,
getResolvePath
} from './utils';
export default function getResolveId(id: string, options: Options) {
const { start = DEFAULT_OPTIONS.start, sign, methods, root } = options;
const extensions = options.extensions;
let resolveID: string = id;
// 如果指定了 sign
if (sign) {
// 但是路径中不包含该标记,则不处理
if (!isIdIncludeSign(id, sign)) return id;
const methodName = getSignMethod(id, sign);
// 如果路径中包含该标记,但是没有指定方法,则不处理
const deletedId = delSign(id, sign);
resolveID = getNewIdByMethod(deletedId, methodName, methods);
}
let basename = getIdBasename(resolveID, start);
let newResolveID = getResolvePath(basename, root, extensions);
// 如果找到了重写后模块的路径,则返回这个路径
if (newResolveID && isExistsFile(newResolveID)) return newResolveID;
// 如果原始路径的模块存在,则返回原始路径
if (isExistsFile(getResolvePath(resolveID, root, extensions)))
return resolveID;
return `@${start}-virtual-module`;
}