2016-01-21 65 views
3

我正在用摩卡建立一個webpack和karma的樣板。webpackJsonp未使用karma-webpack定義?

這是我用於karma-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.conf.js

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

共享(在我的情況)是其中 「webpackJsonp」 被定義該文件。 通過將這個文件放在文件的頂部,它會在其他js文件之前加載。解決錯誤。雖然我沒有使用噶

"webpackJsonp is not defined" 

+0

你有一個回購在那裏我可以看到這個情況? –

+0

對不起,遲到的答案我創建了非常快速的回購github沒有任何工作,但在顯示實際問題。 https://github.com/carbosound1/webpack 如果你運行「gulp test」=>找不到varable 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基於Web的應用程序相同的問題。我找到的解決方案是將commons塊文件移動到基​​於正常腳本標記的包含。我之前通過Asp.Net MVC的捆綁文件BundleConfig.cs加載了這個文件。我猜有時出於某種未知的原因,這個公共塊文件會在我的其他模塊文件和瀏覽器投訴後加載。

我從BundleConfig.cs刪除commons.chunk.js包容和使用正常的腳本標籤,我的包類權之前把它添加到頁面:

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