【发布时间】:2018-10-18 10:33:22
【问题描述】:
设置和目标
Typescript 项目,带有 typescript mocha 测试。项目应该从 Typescript 转换为 ES6,然后通过 Babel 转换为几个可交付的捆绑包。
我想通过Karma(最后是BrowserStack)在浏览器中针对与 babel 生成的相同转换版本运行所有测试。
尝试和问题
我有 karma-typescript + mocha 工作,但只在 es2017 兼容的浏览器中工作。问题是在两者之间插入 babel。
我想我已经尝试了我能想象到的一切,但就是:
- karma-typescript-es6-transform:只转换捆绑的 ES6 模块,而不是用户的代码。
-
karma-browserify 和 babelify 转换:browserify 似乎与 karma typescript 或至少它的转换系统不兼容。当 babel 找不到
some/some.js文件时失败,该文件似乎只存在于业力记忆中。 - karma-babel-preprocessor 似乎是正确的做法。
以上还有很多变体,但都没有奏效。
karma-babel-preprocessor 的有希望的设置
我认为这应该是正确的做法,所以我发布了一个包含我当前状态的项目:https://github.com/anpur/karma-typescript-babelify。
这是我karma.conf.js的一部分:
frameworks: ['mocha', 'karma-typescript'],
preprocessors: {
'src/*.ts': ['karma-typescript', 'babel'],
},
babelPreprocessor: {
options: {
presets: [
[ 'es2015' ]
]
}
},
karmaTypescriptConfig: {
compilerOptions: {
sourceMap: true,
target: 'es6'
},
bundlerOptions: {
addNodeGlobals: true,
sourceMap: true
},
tsconfig: './tsconfig.json'
},
Karma 能够在此设置中进行转换 -> 转换 -> 捆绑它,但我遇到了一整套不同的奇怪问题(没有浏览器在这种状态下工作):
- 在 es2017 浏览器 (Chrome) 中:
Uncaught Error: Can't find entrypointforsome-test.ts(mocha 可以正常工作,无需 babel 转换)。 - 在旧版 Firefox 44 中
TypeError: global is undefined。 - 在 IE 10
Unable to get property 'wrappers' of undefined or null reference.
附: - 上述模块/框架对我来说都不重要,所以我会对任何其他工作设置感到满意,它可以进行 typescript -> babel -> browserstack 测试。谢谢!
【问题讨论】:
-
Jimi Pajala 的回答将适合大多数情况,但不是所有情况,因为babel-plugin-transform-typescrip 不支持某些打字稿功能。对于我的真实项目,我似乎必须将业力与已经编译的源代码一起使用(ES6 通过 browserify + babel 转换成业力)。我会尽快用这两种方法更新 github。
标签: typescript karma-runner babeljs karma-babel-preprocessor karma-typescript