2016-01-21 6 views
3

Я строю шаблон с webpack и кармой с мокко.webpackJsonp не определен с помощью karma-webpack?

Это конфигурация, которую я использую для карма-webpack. Я новичок в webpack.

var path   = require('path'); 
var webpack = require('webpack'); 
var entries = { 
    "app": ["./index.js"] 
}; 
var root   = './'; 
var testSrc   = path.join(root, 'tests/'); 
var jsSrc   = path.join(root, 'src/javascripts/'); 
var publicPath  = path.join(root , 'public/'); 
var filenamePattern = 'index.js'; 
var extensions  = ['js'].map(function(extension) { 
    return '.' + extension; 
}); 


var webpackConfig = { 
    context: jsSrc, 
    resolve: { 
    root: jsSrc, 
    extensions: [''].concat(extensions) 
    }, 
    resolveLoader: { 
    root: path.join(__dirname, "node_modules") 
    }, 
    module: { 
    loaders: [{ 
     test: /\.js$/, 
     loader: 'babel-loader', 
     exclude: /node_modules/ 
    }] 
    }, 
    entry: entries, 
    output: { 
    filename: filenamePattern, 
    publicPath: publicPath 
    }, 
    plugins: [new webpack.optimize.CommonsChunkPlugin({ 
    name: 'shared', 
    filename: filenamePattern, 
    })] 
}; 

var karmaConfig = { 
    frameworks: ['mocha'], 
    files: ['tests/test-index.js'], 
    preprocessors: { 
    'tests/**/*.js': ['webpack'] 
    }, 
    webpack: webpackConfig, 
    webpackMiddleware: { 
    noInfo: true, 
    }, 
    singleRun: false, 
    autoWatch: true, 
    colors: true, 
    reporters: ['nyan'], 
    browsers: ['Chrome'], 
    plugins: [ 
    require("karma-nyan-reporter"), 
    require("karma-mocha"), 
    require("karma-firefox-launcher"), 
    require("karma-webpack"), 
    require("karma-chrome-launcher") 
    ] 
}; 
module.exports = function(config) { 
    config.set(karmaConfig); 
}; 

Когда я бегу старт карма karma.local.conf.js она не выполняет тесты becouse он говорит в браузере webpackJsonp не определен. Мне было интересно, не хватает ли я чего-то в этой конфигурации.

ответ

5

Вы можете решить эту проблему, изменив порядок файлов, загруженных в вашем браузере Karma.

karma.conf.js

files: [ 
      'build/shared.js', 
      'build/**/*.js', 
     ] 

Shared (в моем случае) это файл, в котором "webpackJsonp" определяется. Поместив это в верхнюю часть файлов, он будет загружен перед другими js-файлами. Решение ошибки.

+0

У вас есть репозиторий, где я могу увидеть этот случай? –

+0

Извините за поздний ответ. Я создал очень быстро репо на github, но ничего не работает, но в показывает фактическую проблему. https://github.com/carbosound1/webpack Если вы запустите «gulp test» => не можете найти переменную jsonp , тогда запустите файлы в karma.conf снова, и вы увидите, что ошибка исчезла. (Ошибки будут отображаться из-за отсутствия надлежащей настройки) просто демонстрационные цели – Carbosound1

+0

Нет проблем, если у вас есть решение этой проблемы, было бы здорово, если бы это было без ошибок, чтобы вы могли выявить то, что вы нашли, я уже ответил также в репозитории github, возможно, он может быть закрыт XD. –

0

После того, как я провел исследование, почему и как эта проблема происходит, я узнал, что есть плагин веб-пачки с кармой.

Таким образом, результат конфигурации будет:

var path   = require('path'); 
var webpack = require('webpack'); 
var entries = { 
    "app": ["./index.js"] 
}; 
var root   = './'; 
var testSrc   = path.join(root, 'tests/'); 
var jsSrc   = path.join(root, 'src/javascripts/'); 
var publicPath  = path.join(root , 'public/'); 
var filenamePattern = 'index.js'; 
var extensions  = ['js'].map(function(extension) { 
    return '.' + extension; 
}); 


var webpackConfig = { 
    context: jsSrc, 
    resolve: { 
    root: jsSrc, 
    extensions: [''].concat(extensions) 
    }, 
    resolveLoader: { 
    root: path.join(__dirname, "node_modules") 
    }, 
    module: { 
    loaders: [{ 
     test: /\.js$/, 
     loader: 'babel-loader', 
     exclude: /node_modules/ 
    }] 
    }, 
    entry: entries, 
    output: { 
    filename: filenamePattern, 
    publicPath: publicPath 
    } 
}; 

var karmaConfig = { 
    frameworks: ['mocha'], 
    files: ['tests/test-index.js'], 
    preprocessors: { 
    'tests/**/*.js': ['webpack'] 
    }, 
    webpack: webpackConfig, 
    webpackMiddleware: { 
    noInfo: true, 
    }, 
    singleRun: false, 
    autoWatch: true, 
    colors: true, 
    reporters: ['nyan'], 
    browsers: ['Chrome'], 
    plugins: [ 
    require("karma-nyan-reporter"), 
    require("karma-mocha"), 
    require("karma-firefox-launcher"), 
    require("karma-webpack"), 
    require("karma-chrome-launcher") 
    ] 
}; 
module.exports = function(config) { 
    config.set(karmaConfig); 
}; 

Так что я удалил Webpack плагин CommonsChunkPlugin. Вот еще одна ссылка на эту проблему.

https://github.com/webpack/karma-webpack/issues/24

1

У меня была такая же проблема также приходя в браузере в моем Asp.Net MVC 5 на основе веб-приложения:

"webpackJsonp is not defined" 

хотя я не использую карму. Решение, которое я нашел, состояло в том, чтобы переместить общий файл chunk в обычное включение тега на основе скрипта. Раньше я загружал этот файл через файл Asp.Net MVC BundleConfig.cs. Я думаю, иногда по какой-то неизвестной причине этот файл chunk-файла загружается после моих других файлов модулей и, следовательно, жалобы браузера.

я удалил включение commons.chunk.js из BundleConfig.cs и добавить его на страницу с помощью обычного тега сценария, прямо перед моим классом расслоения:

<script type="text/javascript" src="@Url.Content("~/Scripts/build/commons.chunk.js")"></script> 
@Scripts.Render("~/bundles/myModules")