Karma webpack - 无法在js中

时间:2017-03-14 17:20:18

标签: javascript webpack tdd karma-runner

我正在编写一些学习项目来实现TDD,webpack。

我使用webpack 2使用以下配置:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
//const ExtractTextPlugin = require('extract-text-webpack-plugin');
const WebpackMd5Hash = require('webpack-md5-hash');

process.noDeprecation = true;

module.exports = {

  entry: './src/js/index.js', 
  devtool: 'source-map', 
  context: __dirname,
  target: 'web', 
  stats: 'errors-only',
  watch: true,


  output: {
    path: path.resolve(__dirname, './dist'), 
    filename: 'js/[name].[chunkHash].js', 
    publicPath: '/', 
  },

  module: {
    rules: [
      {
        test: /\.jsx?$/,
        include: [
          path.resolve(__dirname, 'src')
        ],
        exclude: [
          path.resolve(__dirname, 'node_modules')
        ],

        loader: 'babel-loader',

        options: {
          presets: ['es2015']
        },
      },
      {
        test: /\.css$/, 
        /*use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          use: "css-loader"
        })*/
        use: [ 'style-loader', 'css-loader' ]

      }
    ]
  },

  plugins: [
    new WebpackMd5Hash(),
    //new ExtractTextPlugin('[name].[contenthash].css'),
    new HtmlWebpackPlugin({
      template: 'src/index.html',
      filename: 'index.html',
      minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeRedundantAttributes: true,
        useShortDoctype: true,
        removeEmptyAttributes: true,
        removeStyleLinkTypeAttributes: true,
        keepClosingSlash: true,
        minifyJS: true,
        minifyCSS: true,
        minifyURLs: true
      },
      inject: true
    }),
    new webpack.optimize.UglifyJsPlugin()
  ],

  devServer: {
    contentBase: path.join(__dirname, "dist/"),
    compress: true,
    port: 8080
}

}

当我运行简单的webpack时,它编译并正常工作。但是当我尝试使用webpack预处理器运行karma时,它会出现以下错误: Uncaught Error: Module parse failed: C:\Users\Javid\Desktop\projects\rejection\src\css\style.css Unexpected token (1:0) You may need an appropriate loader to handle this file type.

我在js文件中使用import '../css/style.css';。谷歌搜索了很多,没有找到解决方案。

解决方案

我使用了另外的raw-loader来处理我的css,并将我的导入更改为:import css from 'raw-loader!../css/style.css';

1 个答案:

答案 0 :(得分:1)

参考:https://angular.io/docs/ts/latest/guide/webpack.html

此站点显示了用于开发,测试和生产构建的项目的一个很好的示例。特别是对于你的问题,看起来好像在运行业力时使用加载器来忽略.css文件。

以下是与业力相关的文件示例:

" karma.config.js":

module.exports = require('./config/karma.conf.js');

" karma.conf.js":

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

module.exports = function (config) {

        var _config = {
            basePath: '',

            frameworks: ['jasmine'],

            files: [
                {pattern: './config/karma-test-shim.js', watched: false}
            ],

            preprocessors: {
                './config/karma-test-shim.js': ['webpack', 'sourcemap']
            },

            webpack: webpackConfig,

            webpackMiddleware: {
                stats: 'errors-only'
            },

            webpackServer: {
                noInfo: true
            },

            reporters: ['kjhtml'],
            port: 9876,
            colors: true,
            logLevel: config.LOG_INFO,
            autoWatch: false,
            browsers: ['Chrome'],
            singleRun: true
        };

        config.set(_config);
    };

" webpack.test.js":

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

module.exports = {
    devtool: 'inline-source-map',

    resolve: {
        extensions: ['.ts', '.js']
    },

    module: {
        rules: [
            {
                test: /\.ts$/,
                loaders: [
                    {
                        loader: 'awesome-typescript-loader',
                        options: { configFileName: helpers.root('src', 'tsconfig.json') }
                    } , 'angular2-template-loader'
                ]
            },
            {
                test: /\.html$/,
                loader: 'html-loader'

            },
            {
                test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
                loader: 'null-loader'
            },
            {
                test: /\.css$/,
                exclude: helpers.root('src', 'app'),
                loader: 'null-loader'
            },
            {
                test: /\.css$/,
                include: helpers.root('src', 'app'),
                loader: 'raw-loader'
            }
        ]
    },

    plugins: [
        new webpack.ContextReplacementPlugin(
            // The (\\|\/) piece accounts for path separators in *nix and Windows
            /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/,
            helpers.root('./src'), // location of your src
            {} // a map of your routes
        )
    ]
}