返回

工具库集成带来那些问题?如何正确地将ts配置与工具库匹配?

前端

随着工具库的使用越来越普遍,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方式时的注意事项。希望本文能够帮助大家更好地使用工具库,提高开发效率。