2015-08-27 3 views
2

Я пытаюсь работать с базовыми эталонами тестов, и мне трудно понять правильную конфигурацию. Я пытаюсь использовать Benchmarkjs с webpack и babel, чтобы перевести мой код на es5. Я создал benchmarks.webpack.js как точку входа, которая выглядит следующим образом:Использование Benchmarkjs с Webpack и Babel

var context = require.context('./src/js', true, /-benchmark\.js$/); 
context.keys().forEach(context); 
module.exports = context; 

Я тогда эталонный файл, который я хочу, чтобы запустить (тест-benchmark.js):

import benchmark from 'benchmark'; 
import benchmarks from 'beautify-benchmark'; 

let suite = new benchmark.Suite; 

suite.add('RegExp#test', function() { 
    /o/.test('Hello World!'); 
}) 
.add('String#indexOf', function() { 
    'Hello World!'.indexOf('o') > -1; 
}) 
.on('cycle', function(event) { 
    benchmarks.add(event.target); 
}) 
.on('complete', function() { 
    benchmarks.log(); 
}) 
.run(); 

Я обновил свой WebPack сборку, чтобы попытаться transpile контрольных показателей:

_.assign(config, { 
    devtool: 'eval-cheap-module-source-map', 
    output: { 
    path: path.join(__dirname, 'build/benchmark'), 
    filename: 'benchmark.js', 
    publicPath: '/' 
    }, 
    entry: [ 
    './benchmarks.webpack.js' 
    ], 
    plugins: [ 

    ], 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     loaders: ['babel?stage=0'], 
     include: path.join(__dirname, 'src/js') 
     }, 
    ] 
    }, 
}); 

Наконец, я хочу, чтобы иметь возможность бежать это из сценария НОГО:

"scripts": { 
    "bench": "webpack --config webpack.bench.config.js && node build/benchmark/benchmark.js" 
    }, 

Однако я получаю предупреждение о том, что результат бенчмарки зависимости является выражением и там нет подходящих погрузчиков для .json, .txt и т.д. файлы. Я попытался взломать Benchmarkjs для правильного экспорта, но не был успешным.

WARNING in ./~/benchmark/benchmark.js 
Critical dependencies: 
1122:34-49 the request of a dependency is an expression 
@ ./~/benchmark/benchmark.js 1122:34-49 

WARNING in ./~/benchmark/package.json 
Module parse failed: /home/bill/dev/levelstory/react-client-redux/node_modules/benchmark/package.json Line 2: Unexpected token : 
You may need an appropriate loader to handle this file type. 
| { 
| "name": "benchmark", 
| "version": "1.0.0", 
| "description": "A benchmarking library that works on nearly all JavaScript platforms, supports high-resolution timers, and returns statistically significant results.", 
@ ./~/benchmark ^\.\/.*$ 

WARNING in ./~/benchmark/LICENSE.txt 
Module parse failed: /home/bill/dev/levelstory/react-client-redux/node_modules/benchmark/LICENSE.txt Line 1: Unexpected number 
You may need an appropriate loader to handle this file type. 
| Copyright 2010-2012 Mathias Bynens <http://mathiasbynens.be/> 
| Based on JSLitmus.js, copyright Robert Kieffer <http://broofa.com/> 
| Modified by John-David Dalton <http://allyoucanleet.com/> 
@ ./~/benchmark ^\.\/.*$ 
+0

Можете ли вы создать проект GitHub для отладки? Это проще решить проблему. –

+0

Я создал проект на странице https://github.com/bunkat/benchmark-webpack-babel. – Bill

ответ

1

Похоже тест делает что-то особенное с require. Это бесполезно для Webpack. Он имеет следующие строки:

var freeRequire = typeof require == 'function' && require; 

... 

function req(id) { 
    try { 
     var result = freeExports && freeRequire(id); 
    } catch(e) { } 
    return result || null; 
} 

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

Смежные вопросы