有关 mocha 在 ts 开发中遇到的问题

947 阅读1分钟

前言:

记录下自己玩 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 魔怔了(((逃

扩展阅读