前言:
记录下自己玩 ts
的感动时刻(二回)。之前在写一个仓库的时候遇到了一个问题,在使用 ts
作为开发语言的 mocha
不能识别 tsconfig.json
里面配置的 paths
,只会傻乎乎的按着 package.json
里面写的东西去找入口文件引入,这在开发的时候是极度不能忍受的(有俩个笨办法解决,但我不服输)。
说说问题
配置文件这么写
// package.json
{
"main": "dist/index.cjs",
"module": "dist/index.mjs",
}
// tsconfig.json
{
"compilerOptions": {
"paths": { "仓库名": ["src"] }
}
}
mocha 不会按照我想要的去 src 目录下去找文件加载,他只会傻乎乎的按着 package.json 里面的信息去加载。
说说笨办法
- 开发的时候把 package.json 里面的信息换成 src/index.ts ,发布的时候换回去
忘了(回想起来了再说)
正确的解决思路
- 首先我们要认识俩个包,一个是
tsconfig-paths
,一个是ts-node
tsconfig-paths
用来使 paths 参数起作用(在这里)ts-node
用来执行 ts 代码,mocha 需要他来执行 ts 代码进行单测
- 安装他们,有了他们后。 tsconfig.json 其实支持对 ts-node 进行参数配置,如下
// tsconfig.json
{
"ts-node": {
// 这里涉及到俩个概念 require 和 register ,在这篇文章不进行细讲,知道这么用就行
"require": [ "tsconfig-paths/register" ]
}
}
- 我们还需要告诉 mocha 对 ts 文件特殊对待,加载我们的 ts-node 去进行单元测试
// .mocharc.js
module.extends = {
extension: [ 'ts', 'tsx' ],
// 这里继续涉及了 require 和 register 俩个概念
require: [
'ts-node/register'
]
}
- 上面步骤完成后,问题就解决了
总结
又 ts
魔怔了(((逃