@morjs/utils
Version:
mor utils
142 lines (141 loc) • 4.8 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
import EventEmitter from 'events';
import { IFs } from 'memfs';
import { Plugin, Runner, zod as z } from 'takin';
import webpack, { Compiler, Configuration, Watching } from 'webpack';
import WebpackChain from 'webpack-chain-5';
export declare type InputFileSystem = Compiler['inputFileSystem'];
/**
* Webpack 相关用户配置
*/
declare const WebpackConfigSchema: z.ZodObject<{
/**
* webpack chain 支持, 允许定制 webpack 配置
*/
webpackChain: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodType<WebpackChain, z.ZodTypeDef, WebpackChain>], z.ZodUnknown>, z.ZodUnion<[z.ZodPromise<z.ZodVoid>, z.ZodVoid]>>>;
/**
* 允许额外 watch 一些被 ignore 的目录或文件
*/
watchNodeModules: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, z.ZodArray<z.ZodString, "many">]>>;
}, "strip", z.ZodTypeAny, {
webpackChain?: (args_0: WebpackChain, ...args_1: unknown[]) => void | Promise<void>;
watchNodeModules?: string | RegExp | string[];
}, {
webpackChain?: (args_0: WebpackChain, ...args_1: unknown[]) => void | Promise<void>;
watchNodeModules?: string | RegExp | string[];
}>;
/**
* webpackChain 配置类型支持
*/
export declare type WebpackUserConfig = z.infer<typeof WebpackConfigSchema>;
declare type Universalify<T> = T extends (arg0: infer A, arg1: (arg0: null | NodeJS.ErrnoException, arg1: infer B) => void) => void ? ((arg0: A) => Promise<B>) & T : never;
export declare type UniversalifiedInputFileSystem = {
readFile: Universalify<InputFileSystem['readFile']>;
readJson: Universalify<InputFileSystem['readJson']>;
readlink: Universalify<InputFileSystem['readlink']>;
readdir: Universalify<InputFileSystem['readdir']>;
stat: Universalify<InputFileSystem['stat']>;
lstat: Universalify<InputFileSystem['lstat']>;
realpath?: Universalify<InputFileSystem['realpath']>;
fileExists: (arg: string) => Promise<boolean>;
pathExists: (arg: string) => Promise<boolean>;
purge?: (arg0?: string) => Promise<void>;
join?: (arg0: string, arg1: string) => Promise<string>;
relative?: (arg0: string, arg1: string) => Promise<string>;
dirname?: (arg0: string) => Promise<string>;
mem: IFs;
};
declare type CallbackFunction = Parameters<Compiler['run']>[0];
/**
* webpack 封装
* 主要目的是 共用 webpack 的能力
*/
export declare class WebpackWrapper extends EventEmitter {
/**
* webpack 实例, 初始化的时机为完成所有配置之后
*/
compiler?: Compiler;
/**
* webpack 中的 带缓存 inputFileSystem, 共用这部分,以节省性能
*/
private inputFileSystem;
/**
* webpack 中的 带缓存 fs, 共用这部分,以节省性能
* 支持 promise 方式调用
*/
fs: UniversalifiedInputFileSystem;
/**
* @deprecated
* 请替换为直接使用 webpackWrapper.fs
*/
promisifiedFs: UniversalifiedInputFileSystem;
/**
* webpack 配置
* 该配置在 buildConfig 调用前 通过 webpackChain 生成
*/
config?: Configuration;
/**
* webpack watcher 实例
*/
watching?: Watching;
/**
* 提供 webpack chain 支持
*/
private webpackChain;
/**
* watch 参数
*/
private watchOptions?;
/**
* 是否开启 watch
*/
watch?: boolean;
/**
* 需要额外 watch 文件或文件夹
*/
watchNodeModules?: WebpackUserConfig['watchNodeModules'];
constructor();
/**
* 合并当前配置到 webpack 配置中
* @param cnf 需要合并的配置
*/
merge(cnf: Configuration): this;
/**
* 获取 webpackChain 实例, 用于修改 webpack 配置
*/
get chain(): WebpackChain;
/**
* @private
* 准备 webpack 的 config
* 该方法调用之后 基于 chain 的修改不再生效
* NOTE: 该方法为 编译插件内部调用, 如无特别需要请勿自行调用
*/
buildConfig(): Configuration;
/**
* @private
* 准备 webpack 相关实例
* NOTE: 该方法为 编译插件内部调用, 如无特别需要请勿自行调用
*/
prepare(): this;
/**
* 运行 webpack
* @param callback 回调函数
*/
run(callback?: CallbackFunction): Promise<webpack.Stats>;
/**
* 生成默认回调函数, 用于优化 stats 信息显示
* @returns 默认回调函数
*/
private makeDefaultCallback;
}
/**
* Webpack 插件, 提供如下能力
* 1. hooks.webpackWrapper 的 hook 触发
* 2. 提供 webpackChain 配置支持
*/
export declare class WebpackPlugin implements Plugin {
name: string;
apply(runner: Runner): void;
}
export {};