对于我的库项目,我已经意识到最好使用 TypeScript 转换为 ES2015 格式,然后bili
将其转换为其他格式(也称为 UMD 和 CJS)。所以这意味着我的主要tsconfig.json
是:
{
"compilerOptions": {
"declaration": true,
"module": "es2015",
"target": "es2015",
"lib": ["es2015", "esnext.asynciterable", "es2015.reflect"],
"moduleResolution": "node",
"sourceMap": true,
"noImplicitAny": true,
"outDir": "./lib",
"removeComments": false,
"typeRoots": ["./node_modules/@types"]
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*-spec.ts"]
}
这可以满足我的转换所需,但多年来我一直很享受通过以下方式运行的 mocha 测试ts-node
:
ts-node --require ts-node/register 'test/**/*-spec.ts'
我很快意识到我所有基于 TS 的测试脚本现在都由于使用了import语句等而崩溃,但我能够通过添加以下内容来解决这个问题:
TS_NODE_PROJECT="tsconfig.test.json" ts-node --require ts-node/register 'test/**/*-spec.ts'
替代方案tsconfig.test.json
是:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"target": "es5",
"lib": ["es2015"],
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"inlineSourceMap": true
},
"include": ["scripts/**/*.ts"]
}
lodash
这确实在一定程度上推动了事情的发展,因为我的测试文件——它们是 TypeScript 文件——现在确实运行了,但是当我从切换到(希望是显而易见的原因)时一切都不好lodash-es
,现在我在 lodash-es 中遇到错误:
所以从本质上讲,似乎正在转换以下 ES 格式的文件:
- 我的测试脚本
test-spec.ts
- 我的源文件
src/my-file.ts
但是我的源文件依赖项(例如 ES2015 中的“lodash-es”)没有被转译。我有什么办法可以解决这个问题吗?
更新
我发现这篇文章非常有用:Treeshake Lodash with Webpack, Jest and Typescript
虽然该示例使用 Jest,但我相信 Mocha 的行为方式与描述的方式相同。我不知道的是……有没有办法像本文中的 Jest 那样配置 Mocha。