parent
6ec73fefd6
commit
f35c81eeed
@ -0,0 +1,7 @@
|
||||
var cfg = {
|
||||
requirePattern: "require\\('(\\..+)'\\)",
|
||||
defaultExt: '.js',
|
||||
validExtensions: ['.tpl', '.json', '.js', '.mustache']
|
||||
}
|
||||
|
||||
module.exports = cfg;
|
@ -0,0 +1,69 @@
|
||||
var path = require('path');
|
||||
var webpack = require('webpack');
|
||||
|
||||
module.exports = {
|
||||
task: function () {
|
||||
var cfg = {};
|
||||
|
||||
cfg.builder_specs = {
|
||||
entry: {
|
||||
main: [
|
||||
// To be filled by grunt
|
||||
]
|
||||
},
|
||||
output: {
|
||||
path: path.resolve(path.resolve('.'), '.grunt'),
|
||||
filename: '[name].affected-specs.js'
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'shim-loader',
|
||||
query: {
|
||||
shim: {
|
||||
'wax.cartodb.js': {
|
||||
exports: 'wax'
|
||||
},
|
||||
'html-css-sanitizer': {
|
||||
exports: 'html'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.tpl$/,
|
||||
use: 'tpl-loader'
|
||||
},
|
||||
{test: /\.mustache$/, use: 'mustache-loader'}
|
||||
],
|
||||
exprContextRegExp: /$^/,
|
||||
exprContextCritical: false
|
||||
},
|
||||
plugins: [
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'vendor',
|
||||
minChunks: function (module) {
|
||||
return module.context && module.context.indexOf('node_modules') !== -1;
|
||||
}
|
||||
}),
|
||||
new webpack.ProvidePlugin({
|
||||
$: 'jquery',
|
||||
jQuery: 'jquery',
|
||||
['window.jQuery']: 'jquery'
|
||||
}),
|
||||
new webpack.SourceMapDevToolPlugin({
|
||||
filename: '[file].map',
|
||||
exclude: /vendor/
|
||||
})
|
||||
],
|
||||
target: 'web',
|
||||
node: {
|
||||
fs: 'empty'
|
||||
},
|
||||
stats: 'normal'
|
||||
};
|
||||
|
||||
return cfg;
|
||||
}
|
||||
};
|
@ -0,0 +1,112 @@
|
||||
var webpack = require('webpack');
|
||||
var _ = require('underscore');
|
||||
var colors = require('colors');
|
||||
var pretty = require('prettysize');
|
||||
var glob = require('glob');
|
||||
var retrieveAffectedSpecs = require('../../affectedSpecs');
|
||||
var cfg = require('./webpack.config.js').task();
|
||||
|
||||
var compiler = {};
|
||||
var affectedSpecs = [];
|
||||
var cache = {};
|
||||
var paths = {
|
||||
builder_specs: './lib/assets/core/test/spec/cartodb3/**/*.spec.js'
|
||||
};
|
||||
|
||||
/**
|
||||
* affected - To be used as part of a 'registerTask' Grunt definition
|
||||
*/
|
||||
var affected = function (grunt) {
|
||||
var done = this.async();
|
||||
|
||||
affectedSpecs = [
|
||||
'./lib/build/source-map-support.js',
|
||||
'./lib/assets/core/javascripts/cartodb3/components/form-components/index.js'
|
||||
];
|
||||
|
||||
if (grunt.option('specs') === 'all') {
|
||||
var allSpecs = glob.sync(paths.builder_specs);
|
||||
console.log(colors.yellow('All specs. ' + allSpecs.length + ' specs found.'));
|
||||
affectedSpecs = affectedSpecs.concat(allSpecs);
|
||||
done();
|
||||
} else {
|
||||
retrieveAffectedSpecs(grunt)
|
||||
.then(function (specsList) {
|
||||
console.log(colors.yellow(specsList.length + ' specs found.'));
|
||||
affectedSpecs = affectedSpecs.concat(specsList);
|
||||
done();
|
||||
})
|
||||
.catch(function (reason) {
|
||||
throw new Error(reason);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var bootstrap = function (config) {
|
||||
if (!config) {
|
||||
throw new Error('Please provide subconfiguration key for webpack.');
|
||||
}
|
||||
|
||||
if (!cfg[config]) {
|
||||
throw new Error(config + ' section needed in webpack.config.js');
|
||||
}
|
||||
|
||||
cfg[config].entry = function () {
|
||||
return affectedSpecs;
|
||||
}
|
||||
|
||||
compiler[config] = webpack(cfg[config]);
|
||||
cache[config] = {};
|
||||
compiler[config].apply(new webpack.CachePlugin(cache[config]));
|
||||
};
|
||||
|
||||
function logAssets(assets) {
|
||||
_.each(assets, function (asset) {
|
||||
var trace = asset.name;
|
||||
trace += ' ' + pretty(asset.size);
|
||||
console.log(colors.yellow(trace));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* compile - To be used as part of a 'registerTask' Grunt definition
|
||||
*/
|
||||
var compile = function (config) {
|
||||
if (!config) {
|
||||
throw new Error('Please provide subconfiguration key for webpack.');
|
||||
}
|
||||
|
||||
var done = this.async();
|
||||
|
||||
compiler[config].run(function (err, stats) {
|
||||
if (err) {
|
||||
console.error(err.stack || err);
|
||||
if (err.details) {
|
||||
console.error(err.details);
|
||||
}
|
||||
done();
|
||||
return;
|
||||
}
|
||||
|
||||
var info = stats.toJson();
|
||||
|
||||
if (stats.hasErrors()) {
|
||||
console.error(colors.red(info.errors));
|
||||
}
|
||||
|
||||
if (stats.hasWarnings()) {
|
||||
console.warn(colors.yellow(info.warnings));
|
||||
}
|
||||
|
||||
console.log(colors.yellow('Time: ' + info.time));
|
||||
logAssets(info.assets);
|
||||
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
affected: affected,
|
||||
bootstrap: bootstrap,
|
||||
compile: compile
|
||||
};
|
Loading…
Reference in new issue