创建自己的TypeScript依赖库 | 您所在的位置:网站首页 › typescript引入js库 › 创建自己的TypeScript依赖库 |
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。 前言阅读本篇文章您将了解到如下内容: npm package 代码检查 单元测试 打包 Git Hooks本文为应用型文章, 将不会阐述过多理论知识 需求分析在系统架构层面, 应将不同的功能进行拆分 例如把接口调用客户端与系统接口分为两个依赖库: 接口调用客户端: @houtaroy/api-client 系统接口: @houtaroy/system-api系统接口中安装依赖@houtaroy/api-client 使用系统接口的项目安装依赖@houtaroy/system-api 这么做的好处有: 低耦合 易于维护 版本管理 不容易产生魔改乱象再来分析一个完整的依赖库应包含哪些功能: 代码检查 单元测试 打包 提交检查 说明文档和前言中的内容基本相同 技术选型根据上一节中的功能点, 网上冲浪后可以确定: 包管理器: pnpm 代码检查: eslint + prettier 单元测试: jest 打包: rollup 提交检查: husky 说明文档: vitepress 创建依赖库 初始化依赖库在依赖库文件夹下运行: pnpm init根据情况自定义部分内容后, 生成package.json文件: { "name": "@houtaroy/test", "version": "2022.0.0", "description": "Houtaroy Test", "main": "index.js", "author": "Houtaroy", "license": "MIT" } 安装TypeScript pnpm add typescript -D安装完成后, 初始化配置文件tsconfig.json: npx tsc --init配置项可参考官方文档: TSConfig Reference 例如, 笔者的源码在目录src下, 打包后的文件在lib下, 则需要增加如下配置: { "include": ["src/**/*"], "exclude": ["node_modules", "lib", "test"] } 安装prettier与eslintprettier负责代码风格检查 eslint负责代码语法检查 很多教程中都使用了二者, 但如何配置却讲的云里雾里, 像是vscode要装一堆插件/再抄一份配置文件等等 笔者给出一个自认为清晰的思路: 使用prettier/eslint/eslint prettier插件, 把代码风格与语法检查全部交给eslint 安装prettier: pnpm add prettier -D创建prettier配置文件.prettierrc.js: export default { semi: true, singleQuote: false, trailingComma: 'none', printWidth: 120 }具体配置内容参照官方文档: Options · Prettier 中文网 安装eslint: pnpm add eslint -D安装eslint typescript插件: pnpm add @typescript-eslint/parser @typescript-eslint/eslint-plugin -D安装eslint prettier插件: pnpm add eslint-config-prettier eslint-plugin-prettier创建eslint配置文件.eslintrc.js, 并使用相关插件: export default { env: { browser: true, node: true, es2021: true }, extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], parser: "@typescript-eslint/parser", parserOptions: { ecmaVersion: "latest", sourceType: "module" }, plugins: ["prettier", "@typescript-eslint"], rules: { "prettier/prettier": "error" } }插件主页: prettier/eslint-plugin-prettier(看见没, 官方出的! ) 修改package.json, 增加格式化脚本: "scripts": { "lint": "eslint src/**" }IDE如何自动格式化请根据实际情况配置 单元测试安装jest: pnpm add jest -D由于我们使用的是typescript, 安装支持插件ts-ject: pnpm add ts-jest ts-node -D生成配置文件并修改为jest.config.ts: export default { preset: "ts-jest", testEnvironment: "node" }假设库的内容为: import { Sum } from "../types"; export class SumClient implements Sum { public sum(one: number, two: number) { return one + two; } } export default SumClient;编写测试文件test/sum.test.ts: import SumClient from "../src"; const client = new SumClient(); test("测试加法", () => { expect(client.sum(1, 2)).toBe(3); });在package.json增加测试脚本: "scripts": { "test": "jest" }运行命令pnpm run test即可进行单元测试 打包安装rollup: pnpm add rollup -D安装typescript插件: pnpm add @rollup/plugin-typescript -D因为项目引用了其它库, 需要安装node插件: pnpm add @rollup/plugin-node-resolve -D适配commonjs, 安装插件: pnpm add @rollup/plugin-commonjs -D创建打包配置文件rollup.config.ts: import typescript from "@rollup/plugin-typescript"; import { nodeResolve } from "@rollup/plugin-node-resolve"; import commonjs from "@rollup/plugin-commonjs"; export default { input: "src/index.ts", output: [ { file: "lib/index.cjs.js", format: "cjs" }, { file: "lib/index.esm.js", format: "es" } ], plugins: [typescript(), nodeResolve(), commonjs()] };在package.json中增加打包脚本: "scripts": { "build": "rollup --config" } 提交检查安装husky: pnpm add husky -D执行初始化命令, 会生成目录.husky: pnpm husky install修改.husky/pre-commit, 增加上两节中的代码检查和单元测试: #!/bin/sh . "$(dirname "$0")/_/husky.sh" pnpm run lint pnpm run test至此为止, 一套较为完善的依赖库模块已完成 说明文档说明文档有许多成熟的产品, 笔者这里推荐vitepress 如何使用不再赘述, 可参考官方文档: VitePress (vuejs.org) 总结可能很多小伙伴在搭建自己的依赖库或脚手架时, 会觉得异常繁琐无从下手 其实我们只需要冷静下来, 一一列举出它的功能 随后寻找对应的开源解决方案, 并认真阅读官方文档 你纠结许久, 百度许久都不能解决的问题, 可能就是官方文档中的一句话或一个示例 最后动手实践 多经历几次你就会发现, 大部分困难都是纸老虎 所有代码已上传至模板仓库: ts-starter: TypeScript Package Starter 我是Houtaroy, 若有一行代码能为他人提供帮助, 便是在下的毕生荣幸 |
CopyRight 2018-2019 实验室设备网 版权所有 |