【问题标题】:Webpack + Karma + Typescript + Ng1: Uncaught SyntaxError: Unexpected token importWebpack + Karma + Typescript + Ng1: Uncaught SyntaxError: Unexpected token import
【发布时间】:2017-02-27 01:32:03
【问题描述】:

我有以下 karma.conf...

var webpackConfig = require('./webpack.common.js');
webpackConfig.entry = {};
webpackConfig.plugins = [];
var globFlat = require('glob-flat');

var appFiles = globFlat.sync([
  './src/main/coffee/**/*Module.coffee',
  './src/main/coffee/**/*.coffee'

]);
var styleFiles = globFlat.sync([
]);
var dependencyFiles = [
  './src/main/typescripts/*.ts',
];
var testFiles = globFlat.sync([
  './test/main/**/*.coffee',
  './test/main/**/*.js'
]);

var files = dependencyFiles.concat(appFiles, styleFiles, testFiles);
module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['mocha', 'requirejs', 'chai-spies', 'chai'],
    files: files,
    preprocessors: {
      '../src/main/coffee/**/*.coffee': ['webpack'],
      '../src/main/typescripts/**/*.ts': ['webpack'],
      '../src/test/**/*.coffee': ['coffee']
    },

    webpack: webpackConfig,
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
    concurrency: Infinity
  })
};

还有下面的 webpack...

var webpack = require("webpack");
var glob = require('glob-all');
const helpers = require('./helpers');
var path = require("path");
var HtmlWebpackPlugin = require('html-webpack-plugin');
var environment = process.env.NODE_ENV || 'development';
module.exports = function(options){
  console.log("Running in " + environment+ " mode");
  isProd = options.env === 'production';
  return {
    context: helpers.root(''),
    entry: {
      ... // Shouldn't matter since it is overridden
    },
    resolve: {
      extensions: ['', '.js', '.ts', '.coffee', '.pug', '.styl', '.less', '.css'],
      modules: [helpers.root('src'), 'node_modules']
    },
    output: {
      filename: "[name].js",
      path: path.join(helpers.root(''), "src/main/webapp")
    },
    module: {
      loaders: [
        {test: /\.pug$/, loader: "pug-html-loader"},
        {test: /\.ts$/, loader: 'ts'},
        {
          test: /\.coffee$/,
          loaders: ["coffee-loader", "coffee-import"]
        },
        {test: /\.html$/, loader: "html?interpolate=require&-minimize"},
        {
          test: /\.less$/,
          loader: "style-loader!css-loader!less-loader"
        },
        {test: /\.css$/, loader: "style-loader!css-loader"},
        // I have to add the regex .*? because some of the files are named like... fontello.woff2?952370
        {
          test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)(\?.*)?$/,
          loader: 'url?limit=900000'
        }
      ]
    },

    plugins: [
      new HtmlWebpackPlugin({
        template: helpers.root('src/main/html/index.html')
      })
    ]
  }
};

但由于某种原因,当我运行 karma run 时,我得到...

Chrome 53.*** (Mac OS X ***) ERROR
  Uncaught SyntaxError: Unexpected token import
  at src/main/typescripts/polyfills.ts:1

如果我做

preprocessors: {
      '../src/main/coffee/**/*.coffee': ['webpack'],
      '../src/main/typescripts/**/*.ts': ['webpack'],
      '../src/test/**/*.coffee': ['coffee']
},

进入类似...

preprocessors: {
      './src/main/coffee/**/*.coffee': ['webpack'],
      './src/main/typescripts/**/*.ts': ['webpack'],
      './src/test/**/*.coffee': ['coffee']
},

我明白了

路径:'/_karma_webpack_/src/main/coffee/utilities/view/My.coffee' }

错误:没有这样的文件或目录

更新

好的,这就是我可以告诉 webpack 在我的情况下没有运行的交易。这就是为什么转译不起作用的问题仍然是为什么?

我这样做几乎与https://github.com/AngularClass/angular2-webpack-starter 完全一样。唯一的问题是,当我像 module.exports = require('./config/karma.conf.js'); 那样引用业力 conf 时,它不起作用。如果我将实际的 karma conf 移动到根文件夹中似乎没有问题(它当前在 src/build/karma.conf.js 中)

更新 2

我尝试将 webpack.test.js 移动到根文件夹并尝试配置以再次使用该文件,但仍然失败,所以我必须返回 webpack.config.js

webpack.test.js

// TODO: I would like this in the source folder but karma-webpack fails

const webpack = require("webpack");
const webpackMerge = require('webpack-merge'); // used to merge webpack configs
const commonConfig = require('./src/build/webpack.common.js'); // the settings that are common to prod and dev
const glob = require('glob-all');
const tests = glob.sync([
  './src/test/webapp/**/*.coffee'
]);
const ENV = process.env.ENV = process.env.NODE_ENV = 'test';
module.exports = function (options) {
  return webpackMerge(commonConfig({env: ENV}), {
    entry: {
      tests: '../src/test/**/*.coffee'
    },
    plugins: [
      new webpack.optimize.CommonsChunkPlugin({
        names: ['tests', 'styles', 'app', 'vendor', 'polyfills'],
        minChunks: Infinity
      })
    ]
  })
};

webpack.config.js

var environment = process.env.NODE_ENV || 'development';
switch (environment) {
  case 'prod':
  case 'production':
    module.exports = require('./src/build/webpack.prod')({env: 'production'});
    break;
  case 'test':
  case 'testing':
    module.exports = require('./webpack.test.js')({env: 'test'});
    break;
  case 'dev':
  case 'development':
    module.exports = require('./src/build/webpack.dev')({env: 'development'});
    break;
  default:
    module.exports = require('./src/build/webpack.common')({env: 'common'});

【问题讨论】:

    标签: angularjs typescript coffeescript webpack karma-webpack


    【解决方案1】:

    Uncaught SyntaxError: Unexpected token import

    TypeScript 在传递到 JS 运行时之前没有被编译的明显症状。

    修复

    改变

    {test: /\.ts$/, loader: 'ts'},
    

    收件人:

    {test: /\.ts$/, loader: 'ts-loader'},
    

    更多

    请参阅快速入门:https://github.com/TypeStrong/ts-loader#configuration

    【讨论】:

    • 感谢您的回复,但为什么更改加载程序会有所帮助?当我通过 webpack 正常加载它时,它似乎可以工作。另外,我认为 ts 等同于 webpack 中的 ts-loader。不过我会试试的
    • 顺便说一句,我同意你的断言,它没有被转译,但是,我猜这是在 karma-webpack 插件中。
    • 是的,同样的问题很抱歉,在我投反对票之前,我会给你一些时间来更正或删除。我真的很感谢你试图提供帮助!这似乎也应该是等效的,因为其他加载器(咖啡、手写笔、哈巴狗、生的等)都忽略了-loader,而且我在业力之外没有遇到过问题。
    猜你喜欢
    • 2017-09-10
    • 2017-01-24
    • 1970-01-01
    • 2017-04-08
    • 2016-06-28
    • 2016-11-19
    • 1970-01-01
    • 2017-04-06
    • 2012-05-17
    相关资源
    最近更新 更多