You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cartodb/webpack.dev.config.js

125 lines
3.4 KiB

const webpack = require('webpack');
const {resolve} = require('path');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const PACKAGE = require('./package.json');
const version = PACKAGE.version;
const stats = (env) => {
return env && env.stats;
};
const isVendor = (module, count) => {
const userRequest = module.userRequest;
return userRequest && userRequest.indexOf('node_modules') >= 0;
};
const entryPoints = {
builder_embed: './lib/assets/core/javascripts/cartodb3/public_editor.js',
dataset: './lib/assets/core/javascripts/cartodb3/dataset.js',
builder: './lib/assets/core/javascripts/cartodb3/editor.js'
};
module.exports = env => {
return {
entry: entryPoints,
output: {
filename: `${version}/javascripts/[name].js`,
path: resolve(__dirname, 'public/assets')
},
resolve: {
symlinks: false,
modules: [
resolve(__dirname, 'node_modules'),
resolve(__dirname, 'lib/assets/node_modules')
]
},
devtool: 'cheap-module-eval-source-map',
plugins: [
stats(env) ? new BundleAnalyzerPlugin({
analyzerMode: 'static'
}) : undefined
].concat(
// For each entry point, we generate the vendor file
Object.keys(entryPoints)
.map(entry => new webpack.optimize.CommonsChunkPlugin({
name: `${entry}_vendor`,
chunks: [entry],
minChunks: isVendor
}))
)
.concat([
// Extract common chuncks from the 3 vendor files
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
chunks: Object.keys(entryPoints).map(n => `${n}_vendor`),
minChunks: (module, count) => {
return count >= Object.keys(entryPoints).length && isVendor(module);
}
}),
// Extract common chuncks from the 3 entry points
new webpack.optimize.CommonsChunkPlugin({
children: true,
minChunks: Object.keys(entryPoints).length
}),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
['window.jQuery']: 'jquery'
})
])
.filter(p => !!p), // undefined is not a valid plugin, so filter undefined values here
module: {
rules: [
{
test: /\.js$/,
loader: 'shim-loader',
include: [
resolve(__dirname, 'node_modules/cartodb.js')
],
options: {
shim: {
'wax.cartodb.js': {
exports: 'wax'
},
'html-css-sanitizer': {
exports: 'html'
},
'lzma': {
exports: 'LZMA'
}
}
}
},
{
test: /\.tpl$/,
use: 'tpl-loader',
include: [
resolve(__dirname, 'lib/assets/core/javascripts/cartodb3'),
resolve(__dirname, 'node_modules/cartodb.js'),
resolve(__dirname, 'node_modules/cartodb-deep-insights.js')
]
},
{
test: /\.mustache$/,
use: 'raw-loader',
include: [
resolve(__dirname, 'lib/assets/core/javascripts/cartodb3'),
resolve(__dirname, 'node_modules/cartodb.js'),
resolve(__dirname, 'node_modules/cartodb-deep-insights.js')
]
}
]
},
node: {
fs: 'empty' // This fixes the error Module not found: Error: Can't resolve 'fs'
},
stats: {
warnings: false
}
};
};