mirror of
https://github.com/a2nt/silverstripe-webpack.git
synced 2024-10-22 17:05:31 +02:00
126 lines
3.5 KiB
JavaScript
Executable File
126 lines
3.5 KiB
JavaScript
Executable File
/*
|
|
* Common Environment
|
|
*/
|
|
|
|
const webpack = require('webpack');
|
|
const conf = require('./webpack.configuration');
|
|
|
|
const path = require('path');
|
|
|
|
const includes = {
|
|
app: path.join(__dirname, conf.SRC, 'js/app.js'),
|
|
};
|
|
|
|
const _getAllFilesFromFolder = function(dir) {
|
|
dir = path.join(__dirname, dir);
|
|
|
|
const filesystem = require('fs');
|
|
let results = [];
|
|
|
|
filesystem.readdirSync(dir).forEach((file) => {
|
|
if (file === '_notes') {
|
|
return;
|
|
}
|
|
|
|
file = `${dir}/${file}`;
|
|
const stat = filesystem.statSync(file);
|
|
|
|
if (stat && stat.isDirectory()) {
|
|
results = results.concat(_getAllFilesFromFolder(file));
|
|
} else {
|
|
results.push(file);
|
|
}
|
|
});
|
|
|
|
return results;
|
|
};
|
|
|
|
// add page specific scripts
|
|
const pageScripts = _getAllFilesFromFolder(conf.TYPESJS);
|
|
pageScripts.forEach((file) => {
|
|
includes[path.basename(file, '.js')] = file;
|
|
});
|
|
|
|
// add page specific scss
|
|
const scssIncludes = _getAllFilesFromFolder(conf.TYPESSCSS);
|
|
scssIncludes.forEach((file) => {
|
|
includes[path.basename(file, '.scss')] = file;
|
|
});
|
|
|
|
module.exports = {
|
|
entry: includes,
|
|
devtool: 'source-map',
|
|
externals: {
|
|
'jquery': 'jQuery',
|
|
},
|
|
module: {
|
|
rules: [{
|
|
test: /\.jsx?$/,
|
|
exclude: /node_modules/,
|
|
use: {
|
|
loader: 'babel-loader',
|
|
options: {
|
|
presets: [
|
|
['es2015', {
|
|
modules: false,
|
|
}],
|
|
['stage-2'],
|
|
],
|
|
plugins: [
|
|
['transform-react-jsx'],
|
|
['react-hot-loader/babel'],
|
|
],
|
|
},
|
|
},
|
|
}, {
|
|
test: /\.tsx?$/,
|
|
use: 'ts-loader',
|
|
exclude: /node_modules/,
|
|
}, {
|
|
test: /\.coffee?$/,
|
|
use: 'coffee-loader',
|
|
}, {
|
|
test: /\.(png|jpg|jpeg|gif|svg)$/,
|
|
loader: 'file-loader',
|
|
options: {
|
|
name: '[name].[ext]',
|
|
outputPath: 'img/',
|
|
publicPath: '../img/',
|
|
},
|
|
}, {
|
|
test: /\.worker\.js$/,
|
|
use: {
|
|
loader: 'worker-loader',
|
|
},
|
|
}],
|
|
},
|
|
resolve: {
|
|
modules: [
|
|
path.resolve(__dirname, 'public'),
|
|
'node_modules'
|
|
],
|
|
alias: {
|
|
'jquery': require.resolve('jquery'),
|
|
'jQuery': require.resolve('jquery'),
|
|
},
|
|
},
|
|
plugins: [
|
|
new webpack.ProvidePlugin({
|
|
$: 'jquery',
|
|
jQuery: 'jquery',
|
|
'window.jQuery': 'jquery',
|
|
Popper: ['popper.js', 'default'],
|
|
Util: 'exports-loader?Util!bootstrap/js/dist/util',
|
|
Alert: 'exports-loader?Alert!bootstrap/js/dist/alert',
|
|
Button: 'exports-loader?Button!bootstrap/js/dist/button',
|
|
Carousel: 'exports-loader?Carousel!bootstrap/js/dist/carousel',
|
|
Collapse: 'exports-loader?Collapse!bootstrap/js/dist/collapse',
|
|
Dropdown: 'exports-loader?Dropdown!bootstrap/js/dist/dropdown',
|
|
Modal: 'exports-loader?Modal!bootstrap/js/dist/modal',
|
|
Tooltip: 'exports-loader?Tooltip!bootstrap/js/dist/tooltip',
|
|
Popover: 'exports-loader?Popover!bootstrap/js/dist/popover',
|
|
Scrollspy: 'exports-loader?Scrollspy!bootstrap/js/dist/scrollspy',
|
|
Tab: 'exports-loader?Tab!bootstrap/js/dist/tab',
|
|
}),
|
|
],
|
|
}; |