设置和目标
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 内存中。 - 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 entrypoint
forsome-test.ts
(mocha 可以正常工作,没有 babel 转换)。 - 在旧的 Firefox 44
TypeError: global is undefined
中。 - 在 IE 10
Unable to get property 'wrappers' of undefined or null reference
中。
PS - 上述模块/框架对我来说都不重要,所以我会对任何其他工作设置感到满意,它可以进行 typescript -> babel -> browserstack 测试。谢谢!