通过打字稿和业力来宣传项目

时间:2018-05-08 12:56:25

标签: typescript karma-runner babel karma-babel-preprocessor karma-typescript

设置和目标

Typescript项目,使用typescript mocha测试。项目应该从Typescript转换为ES6,然后通过Babel转换为几个可发送的包。

我希望通过Karma(最终BrowserStack)在浏览器中运行所有与babel生成的转换版本相同的测试。

尝试和问题

我有karma-typescript + mocha工作,但仅限于es2017兼容的浏览器。问题是在两者之间插入babel 我想我已经尝试过我能想象到的一切,但是:

上述所有内容以及更多内容都有很多变化,但都没有。

使用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 some-test.ts(mocha在没有babel变换的情况下正常工作)。
  • 在旧版Firefox 44中TypeError: global is undefined
  • 在IE 10中Unable to get property 'wrappers' of undefined or null reference

P.S。 - 上述模块/框架都不重要,所以我对任何其他工作设置感到满意,这可以做打字稿 - > babel - > browserstack测试。谢谢!

2 个答案:

答案 0 :(得分:2)

我考虑过使用Babel 7编译器进行测试,该编译器本身支持编译TypeScript,并使用较旧的Babel 6编写。

因为我有点好奇,如果它以这种方式工作,我分叉您的回购并提出拉取请求。我还清理了一些设置文件。您可以阅读拉取请求中的更改,以了解所执行的操作。

现在测试似乎按预期通过了,欢呼! heres pull request

  • 已更改为@babel/core:^7.0.0 - 编译器
  • 更改了Babel的预设以匹配babel版本7
  • 使用babel-core": "^7.0.0-bridge.0 -resolution避免问题 - - 模块引用较旧版本的babel
  • 提供了一些额外的.tsconfig选项
  • karma.conf
  • 的一些细微更改

编辑:

我确实相信你可以将Babel加载器从构建线中删除,只需将karma-typescript -loader参数赋予目标es5。

主流浏览器支持es5一段时间了,也应该在FF 44中使用。在es6中也引入了类,这就是为什么你之前遇到类的问题,编译为es5将类转换为函数。

karmaTypescriptConfig: {
  compilerOptions: {
    sourceMap: true,
    target: 'es5' // <-- this here

答案 1 :(得分:0)

我发现了webpack的替代方法。 所以,业力-> webpack->通天塔。

这里是demo project。 如果您尝试迁移实际项目,则将进行测试。 该项目还解决了运行DOM测试的问题。