mirror of
https://github.com/elastic/kibana.git
synced 2025-04-25 02:09:32 -04:00
113 lines
3.3 KiB
JavaScript
113 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
let EventEmitter = require('events').EventEmitter;
|
|
let inherits = require('util').inherits;
|
|
let _ = require('lodash');
|
|
let join = require('path').join;
|
|
let write = require('fs').writeFileSync;
|
|
let webpack = require('webpack');
|
|
let DirectoryNameAsMain = require('webpack-directory-name-as-main');
|
|
let ExtractTextPlugin = require('extract-text-webpack-plugin');
|
|
|
|
let utils = require('requirefrom')('src/utils');
|
|
let fromRoot = utils('fromRoot');
|
|
let OptmzBundles = require('./OptmzBundles');
|
|
let OptmzUiModules = require('./OptmzUiModules');
|
|
|
|
let kbnTag = `Kibana ${ utils('packageJson').version }`;
|
|
|
|
class BaseOptimizer extends EventEmitter {
|
|
constructor(opts) {
|
|
super();
|
|
|
|
this.sourceMaps = opts.sourceMaps || false;
|
|
this.modules = new OptmzUiModules(opts.plugins);
|
|
this.bundles = new OptmzBundles(
|
|
opts,
|
|
`${kbnTag} ${this.constructor.name} ${ this.sourceMaps ? ' (with source maps)' : ''}`
|
|
);
|
|
|
|
_.bindAll(this, 'getConfig');
|
|
}
|
|
|
|
getConfig() {
|
|
let mapQ = this.sourceMaps ? '?sourceMap' : '';
|
|
|
|
return {
|
|
context: fromRoot('.'),
|
|
entry: this.bundles.getEntriesConfig(),
|
|
|
|
devtool: this.sourceMaps ? '#source-map' : false,
|
|
|
|
output: {
|
|
path: this.bundles.dir,
|
|
filename: '[name].bundle.js',
|
|
sourceMapFilename: '[file].map',
|
|
publicPath: '/bundles/',
|
|
devtoolModuleFilenameTemplate: '[absolute-resource-path]'
|
|
},
|
|
|
|
plugins: [
|
|
new webpack.ResolverPlugin([
|
|
new DirectoryNameAsMain()
|
|
]),
|
|
new webpack.NoErrorsPlugin(),
|
|
new webpack.optimize.DedupePlugin(),
|
|
new ExtractTextPlugin('[name].style.css', {
|
|
allChunks: true
|
|
})
|
|
],
|
|
|
|
module: {
|
|
loaders: [
|
|
{
|
|
test: /\.less$/,
|
|
loader: ExtractTextPlugin.extract(
|
|
'style',
|
|
`css${mapQ}!autoprefixer?{ "browsers": ["last 2 versions","> 5%"] }!less${mapQ}`
|
|
)
|
|
},
|
|
{ test: /\.css$/, loader: ExtractTextPlugin.extract('style', `css${mapQ}`) },
|
|
{ test: /\.jade$/, loader: 'jade' },
|
|
{ test: /\.(html|tmpl)$/, loader: 'raw' },
|
|
{ test: /\.png$/, loader: 'url?limit=10000&name=[path][name].[ext]' },
|
|
{ test: /\.(woff|woff2|ttf|eot|svg|ico)(\?|$)/, loader: 'file?name=[path][name].[ext]' },
|
|
{ test: /\/src\/(plugins|ui)\/.+\.js$/, loader: `auto-preload-rjscommon-deps${mapQ}` },
|
|
{
|
|
test: /\.js$/,
|
|
exclude: /(node_modules|bower_components)/,
|
|
loader: 'babel',
|
|
query: {
|
|
optional: ['runtime'],
|
|
stage: 1,
|
|
nonStandard: false
|
|
}
|
|
},
|
|
{
|
|
// explicitly require .jsx extension to support jsx
|
|
test: /\.jsx$/,
|
|
exclude: /(node_modules|bower_components)/,
|
|
loader: 'babel',
|
|
query: {
|
|
optional: ['runtime'],
|
|
stage: 1,
|
|
nonStandard: true
|
|
}
|
|
}
|
|
].concat(this.modules.loaders),
|
|
noParse: this.modules.noParse,
|
|
},
|
|
|
|
resolve: {
|
|
extensions: ['.js', '.less', ''],
|
|
postfixes: [''],
|
|
modulesDirectories: ['node_modules'],
|
|
loaderPostfixes: ['-loader', ''],
|
|
root: fromRoot('.'),
|
|
alias: this.modules.aliases
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
module.exports = BaseOptimizer;
|