2017-01-28 52 views
4

我试图对使用打字机编写的库进行业力测试,但即使导入了babel并将其配置为es2015,但仍继续获得Uncaught SyntaxError: Unexpected token import。 (不幸的是,业力只会支持V2.5版本的ES6)Webpack Karma + Typescript with ES6

什么我需要改变配置使事情工作?

karma.conf.js:

var webpackConfig = require('./webpack.config.test'); 

module.exports = function(config) { 
    config.set({ 
     basePath: '', 
     frameworks: ['jasmine'], 
     files: [ 
      { 
       pattern: './config/karma.tests.js', 
       watched: false 
      } 
     ], 
     preprocessors: { 
      './config/karma.tests.js': ['babel', 'webpack', 'sourcemap'] 
     }, 
     plugins: [ 
      'karma-webpack', 
      'karma-jasmine', 
      'karma-sourcemap-loader', 
      'karma-chrome-launcher', 
      'karma-phantomjs-launcher', 
      'karma-babel-preprocessor' 
     ], 
     babelPreprocessor: { 
      options: { 
       presets: ['es2015'] 
      } 
     }, 
     webpack: webpackConfig, 
     webpackMiddleware: { 
      stats: 'errors-only' 
     }, 
     webpackServer: { 
      noInfo: true 
     }, 
     reporters: ['progress'], 
     port: 9876, 
     colors: true, 
     logLevel: config.LOG_INFO, 
     autoWatch: false, 
     browsers: ['PhantomJS'], 
     singleRun: true 
    }); 
}; 

webpack.config.test.js

var webpack       = require('webpack'); 
var helpers       = require('./helpers'); 

var config = { 
    devtool: 'inline-source-map', 
    resolve: { 
     root: helpers.root('src'), 
     extensions: [ '', '.js', '.ts' ] 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.ts$/, 
       loader: 'ts-loader', 
       include: helpers.root('src'), 
       exclude: helpers.root('node_modules') 
      } 
     ] 
    }, 
} 

module.exports = config; 

tsconfig.json:

{ 
    "compileOnSave": false, 
    "compilerOptions": { 
     "declaration": true, 
     "declarationDir": "declarations", 
     "module": "commonjs", 
     "moduleResolution": "node", 
     "noImplicitAny": true, 
     "outDir": "dist", 
     "preserveConstEnums": true, 
     "removeComments": false, 
     "sourceMap": true, 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true,   
     "target": "es6", 
     "typeRoots": [ 
      "node_modules/@types" 
     ] 
    }, 
    "exclude": [ 
     "node_modules", 
     "dist" 
    ] 
} 
+0

这哪里是错误实际发生的?哪个文件/哪一行? – smnbbrv

+0

任何文件;总是第一个使用ES6语言功能的人。 – sqwk

+0

这是什么意思的任何文件? 'src'中的任何文件? 'node_modules中的任何文件?'你能发布'tsconfig.json吗?' – smnbbrv

回答

3

希望哟你可以在这里解决你的问题。 我认为webpack配置需要加载器来转换ES6文件,因此您需要在您的webpack.config.test.js文件中加载器。

var webpack = require('webpack'); 
 
var helpers = require('./helpers'); 
 

 
var config = { 
 
    devtool: 'inline-source-map', 
 
    resolve: { 
 
     root: helpers.root('src'), 
 
     extensions: [ '', '.js', '.ts' ] 
 
    }, 
 
    module: { 
 
     loaders: [ 
 
      { 
 
       test: /\.ts$/, 
 
       loader: 'ts-loader', 
 
       include: helpers.root('src'), 
 
       exclude: helpers.root('node_modules') 
 
      }, 
 
       test: /\.js$/, 
 
       exclude: helpers.root('node_modules'), 
 
       loader: 'babel-loader' 
 
     ] 
 
    }, 
 
} 
 

 
module.exports = config;

+1

谢谢,在我组合了两个装载器之后,这个工作就像这样:'babel-loader?presets [] = es2015!ts-loader'。我还从'karma.conf.js'中删除了所有babel部分,并向'karma.tests.json'添加了一个'require('babel-polyfill')'。 (本质上,窍门是使用webpack处理babel而不是业力。) – sqwk