插件
undts像vite那样扩展了rollup
优秀的插件系统,在它的基础上提供了几个基于ts-morph
的钩子,以便于以后新的类似vue
/astro
/svelte
这种拥有自己的编译器的框架能够更好的集成。
dtsConfig
这个钩子在调用build
函数时被调用,可以通过这个钩子修改undts的配置。函数签名如下:
ts
interface DtsConfigHook {
(options: DTSBuildOptions): void | Promise<void> | DTSBuildOptions | Promise<DTSBuildOptions>
}
transformInclude
如果某个id
你想要被transform
开头的钩子处理,那么就返回true
,否则返回false
。默认情况下如果没有声明这个钩子,那么所有的id
都会被本插件的transformXXX
钩子处理。函数签名如下:
ts
interface TransformIncludeHook {
(moduleSpecifier: string): boolean
}
transformImportDeclaration
这个钩子在transform
钩子处理import
语句时被调用,可以通过这个钩子修改和处理import
语句。函数签名如下:
ts
interface TransformImportDeclarationHook {
(importDeclaration: ImportDeclaration, sourceFiles: Set<SourceFile>): void | Promise<void>
}
transformExportDeclaration
这个钩子在transform
钩子处理export
语句时被调用,可以通过这个钩子修改和处理export
语句。函数签名如下:
ts
interface TransformExportDeclarationHook {
(exportDeclaration: ExportDeclaration, sourceFiles: Set<SourceFile>): void | Promise<void>
}
transformCallExpression
这个钩子在transform
钩子处理CallExpression
时被调用,一般用来修改和处理dynamic import
。函数签名如下:
ts
interface TransformCallExpressionHook {
(callExpression: CallExpression, sourceFiles: Set<SourceFile>): void | Promise<void>
}
transformSourceFile
这个钩子在上面的所有transform钩子处理完毕
后被调用,可以通过这个钩子修改和处理sourceFile
。函数签名如下:
ts
interface TransformSourceFileHook {
(sourceFile: SourceFile): void | Promise<void>
}
writeCacheBundle
这个钩子会在写入每一个没有被bundle
的文件时被调用,该函数签名如下:
ts
export interface EmitWriteBundleContext {
getProjectSourceFiles: () => SourceFile[]
getCurrentOptions: () => DTSBuildOptions
setCurrentOptions: (options: DTSBuildOptions) => void
}
interface WriteCacheBundleHook {
writeCacheBundle?: (
this: EmitWriteBundleContext,
sourceFile: SourceFile,
outputFilePath: string,
outputFileText: string,
) => Promise<void> | void | [string, string] | Promise<[string, string]>
}
如果此钩子拥有返回值,那么返回值必须是一个元组,第一个元素是outputFilePath
,第二个元素是outputFileText
;该元组会覆盖outputFilePath
和outputFileText
的值。