pixelplanet/webpack.config.server.babel.js

182 lines
4.2 KiB
JavaScript
Raw Normal View History

/*
*/
import path from 'path';
import webpack from 'webpack';
import nodeExternals from 'webpack-node-externals';
import GeneratePackageJsonPlugin from 'generate-package-json-webpack-plugin';
2021-03-18 16:15:18 +00:00
import CopyPlugin from 'copy-webpack-plugin';
2020-12-02 20:20:45 +00:00
import pkg from './package.json';
const basePackageValues = {
name: pkg.name,
version: pkg.version,
private: true,
engines: pkg.engines,
scripts: {
2022-01-03 12:59:40 +00:00
start: 'node --nouse-idle-notification --expose-gc server.js',
},
dependencies: {
2020-12-02 20:20:45 +00:00
mysql2: '',
},
};
const ttag = {};
const babelPlugins = [
['ttag', ttag],
];
console.log('IGNORE GPJWP (generate-package-json-webpack-plugin) WARNINGS / ERRORS, ITS CURRENT VERSION IS A BIT BUGGY, BUT STILL WORKS');
export default ({
2022-01-01 00:39:01 +00:00
development, extract,
}) => {
if (extract) {
ttag.extract = {
output: path.resolve(__dirname, 'i18n', 'template-ssr.pot'),
};
ttag.discover = ['t', 'jt'];
}
return {
2022-01-03 12:59:40 +00:00
name: 'server',
target: 'node',
context: __dirname,
2022-01-01 00:39:01 +00:00
mode: (development) ? 'development' : 'production',
entry: {
2022-01-03 12:59:40 +00:00
server: [path.resolve(__dirname, 'src', 'server.js')],
backup: [path.resolve(__dirname, 'src', 'backup.js')],
2021-02-04 23:29:47 +00:00
captchaserver: [path.resolve(__dirname, 'src', 'captchaserver.js')],
},
output: {
2022-01-03 12:59:40 +00:00
library: {
type: 'commonjs2',
},
2021-03-18 16:15:18 +00:00
clean: true,
},
resolve: {
2022-01-02 20:50:42 +00:00
extensions: ['.js', '.jsx'],
},
module: {
rules: [
{
2022-01-02 20:50:42 +00:00
test: /\.(js|jsx)$/,
loader: 'babel-loader',
include: [
path.resolve(__dirname, 'src'),
],
options: {
cacheDirectory: false,
presets: [
['@babel/preset-env', {
targets: {
node: pkg.engines.node.replace(/^\D+/g, ''),
},
modules: false,
}],
],
plugins: babelPlugins,
},
},
{
test: /\.css/,
use: [
{
loader: 'css-loader',
options: {
importLoaders: 1,
sourceMap: false,
modules: false,
},
},
],
},
{
test: [/\.po$/],
loader: 'ttag-po-loader',
},
],
},
externals: [
/\/proxies\.json$/,
/\/canvases\.json$/,
2022-01-04 10:31:10 +00:00
/\/styleassets\.json$/,
/\/assets\.json$/,
nodeExternals(),
],
plugins: [
new webpack.DefinePlugin({
2022-01-01 00:39:01 +00:00
'process.env.NODE_ENV': development ? '"development"' : '"production"',
'process.env.BROWSER': false,
}),
// create package.json for deployment
new GeneratePackageJsonPlugin(basePackageValues, {
sourcePackageFilenames: [
path.resolve(__dirname, 'package.json'),
],
}),
2021-03-18 16:15:18 +00:00
new CopyPlugin({
patterns: [
{
from: path.resolve(__dirname, 'public'),
2022-01-03 12:59:40 +00:00
to: path.resolve(__dirname, 'dist', 'public'),
2021-03-18 16:15:18 +00:00
},
path.resolve(__dirname, 'src', 'canvases.json'),
path.resolve(__dirname, 'src', 'proxies.json'),
{
from: path.resolve(
__dirname, 'deployment', 'example-ecosystem.yml'
),
to: path.resolve(
2022-01-03 12:59:40 +00:00
__dirname, 'dist', 'ecosystem.yml'
2021-03-18 16:15:18 +00:00
),
},
{
from: path.resolve(
__dirname, 'deployment', 'example-ecosystem-backup.yml'
),
to: path.resolve(
2022-01-03 12:59:40 +00:00
__dirname, 'dist', 'ecosystem-backup.yml'
2021-03-18 16:15:18 +00:00
),
},
{
from: path.resolve(__dirname, 'captchaFonts'),
2022-01-03 12:59:40 +00:00
to: path.resolve(__dirname, 'dist', 'captchaFonts'),
},
2021-03-18 16:15:18 +00:00
{
from: path.resolve(
__dirname, 'deployment', 'example-ecosystem-captchas.yml'
),
to: path.resolve(
2022-01-03 12:59:40 +00:00
__dirname, 'dist', 'ecosystem-captchas.yml'
2021-03-18 16:15:18 +00:00
),
},
],
}),
],
stats: {
colors: true,
reasons: false,
hash: false,
version: false,
chunkModules: false,
},
2021-01-29 21:46:58 +00:00
node: {
global: false,
__filename: false,
__dirname: false,
},
};
};