工具库集成带来那些问题?如何正确地将ts配置与工具库匹配?
2023-09-07 19:28:01

随着工具库的使用越来越普遍,typescript项目也会越来越多地接触到各种工具库。特别是在大型企业当中,使用工具库会显得尤为重要,特别是在微前端、混合开发、构建通用基础库等场景,可能都会大量地应用到工具库。使用工具库能够让我们节省很多开发时间,降低耦合度,快速地进行二次开发,但是我们也会遇到各种各样问题,例如类型定义、变量名与函数名一致性、版本更新、依赖冲突等等。这些都是我们在使用工具库时需要考虑的问题。今天我就带大家一起去探索这些问题,并且详细地解说如何能够正确地将ts配置与工具库进行匹配。
在开始讲解之前,我们首先来看一下在使用工具库时常见的几种场景。
1. 工具库采用esm
这种模式对于编译后的代码更小、性能更好,同时也兼容模块化。但是这类工具库就要求我们需要考虑类型定义文件、代码兼容性等。
2. 工具库采用cjs
这是最为常见的模式,在tsconfig.json中配置"module": "commonjs"即可,这种模式下的代码可以被ts或者js两种环境识别,但是编译后的代码会比较大,不建议使用。
3. 工具库采用umd
这是一种更为灵活的方式,它既支持esm、cjs,也支持es5的规范。我们可以不用修改tsconfig.json配置即可实现编译,并且兼容多种环境。
一、工具库采用ESM方式的注意事项
1. 模块化问题
工具库采用esm方式时,我们应该明确一点,希望有esm以及mjs。所以我们在打包的时候需要配置多个出口文件,每个文件对应不同的模块方式。可以参考rollup配置来进行设置。
rollup.config.js
export default {
input: 'src/main.js',
output: [
{
file: 'dist/main.js',
format: 'esm',
},
{
file: 'dist/main.mjs',
format: 'mjs',
},
],
};
2. 依赖问题
工具库采用ESM方式时,需要保证依赖的包也都是ESM方式的,否则可能会出现兼容性问题。我们可以使用npm包管理器来安装ESM方式的包。
npm install --save-dev @rollup/plugin-node-resolve
3. 配置类型声明文件
当工具库采用ESM方式时,我们需要在tsconfig.json中配置类型声明文件,这样才能保证编译时能够正确地识别类型。
{
"compilerOptions": {
"module": "esnext",
"target": "es2017",
"moduleResolution": "node",
"strict": true,
"jsx": "react-jsx",
"types": ["node"]
}
}
4. 配置编译器
工具库采用ESM方式时,我们需要配置编译器来支持ESM模块的编译。我们可以使用TypeScript编译器或Babel编译器。
TypeScript编译器
tsc --module es2015 --target es2015 --outDir dist src/main.ts
Babel编译器
babel src/main.js --out-file dist/main.js
二、工具库采用CJS方式的注意事项
1. 安装工具库
工具库采用CJS方式时,我们可以使用npm包管理器来安装。
npm install --save-dev @rollup/plugin-commonjs
2. 配置编译器
工具库采用CJS方式时,我们需要配置编译器来支持CJS模块的编译。我们可以使用TypeScript编译器或Babel编译器。
TypeScript编译器
tsc --module commonjs --target es2015 --outDir dist src/main.ts
Babel编译器
babel src/main.js --out-file dist/main.js --presets=@babel/preset-env
3. 配置类型声明文件
工具库采用CJS方式时,我们也可以在tsconfig.json中配置类型声明文件,这样才能保证编译时能够正确地识别类型。
{
"compilerOptions": {
"module": "commonjs",
"target": "es2017",
"moduleResolution": "node",
"strict": true,
"jsx": "react-jsx",
"types": ["node"]
}
}
三、工具库采用UMD方式的注意事项
1. 安装工具库
工具库采用UMD方式时,我们可以使用npm包管理器来安装。
npm install --save-dev @rollup/plugin-umd
2. 配置编译器
工具库采用UMD方式时,我们需要配置编译器来支持UMD模块的编译。我们可以使用TypeScript编译器或Babel编译器。
TypeScript编译器
tsc --module umd --target es2015 --outDir dist src/main.ts
Babel编译器
babel src/main.js --out-file dist/main.js --presets=@babel/preset-env
3. 配置类型声明文件
工具库采用UMD方式时,我们也可以在tsconfig.json中配置类型声明文件,这样才能保证编译时能够正确地识别类型。
{
"compilerOptions": {
"module": "umd",
"target": "es2017",
"moduleResolution": "node",
"strict": true,
"jsx": "react-jsx",
"types": ["node"]
}
}
4. 依赖问题
工具库采用UMD方式时,我们应该确保依赖的包也都是UMD方式的,否则可能会出现兼容性问题。我们可以使用npm包管理器来安装UMD方式的包。
npm install --save-dev @rollup/plugin-node-resolve
总结
在本文中,我们讨论了在使用工具库时需要注意的问题,以及如何正确地将ts配置与工具库进行匹配。我们介绍了工具库采用ESM、CJS、UMD方式时的注意事项。希望本文能够帮助大家更好地使用工具库,提高开发效率。