2017-01-28 3 views
4

Я пытаюсь запустить тест кармы для библиотеки, написанной на машинописном тексте, но продолжаю получать Uncaught SyntaxError: Unexpected token import, хотя babel импортируется и настроен для es2015. (К сожалению, карма будет поддерживать только ES6, начиная с версии 2.5)Webpack Karma + Typcript с 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 config нуждается в загрузчиках для преобразования файлов 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'. Я также удалил все части babel из 'karma.conf.js' и добавил' require ('babel-polyfill') 'to' karma.tests.json'. (По сути, трюк заключался в том, чтобы обращаться с babel с помощью webpack, а не с кармой.) – sqwk