UNPKG

1.98 kBJavaScriptView Raw
1const webpack = require('webpack')
2const nodeExternals = require('webpack-node-externals')
3const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin')
4const config = require('./paths')
5const path = require('path')
6
7module.exports = (options) => ({
8 target: 'node',
9 devtool: 'source-map',
10 externals: nodeExternals(),
11 performance: {
12 hints: false
13 },
14 resolve: {
15 extensions: ['.js', '.json'],
16 modules: [options.paths.userNodeModulesPath, path.resolve(__dirname, '../node_modules')]
17 },
18 resolveLoader: {
19 modules: [options.paths.userNodeModulesPath, path.resolve(__dirname, '../node_modules')]
20 },
21 node: {
22 __filename: false,
23 __dirname: false
24 },
25 entry: {
26 main: [
27 require.resolve('babel-polyfill'),
28 `${options.paths.serverSrcPath}/index.js`
29 ],
30 },
31 output: {
32 path: options.paths.serverBuildPath,
33 filename: '[name].js',
34 sourceMapFilename: '[name].map',
35 publicPath: options.paths.publicPath,
36 libraryTarget: 'commonjs2'
37 },
38
39 module: {
40 rules: [
41 {
42 test: /\.json$/,
43 loader: 'json-loader'
44 },
45 {
46 test: /\.(js|jsx)$/,
47 loader: 'babel-loader',
48 exclude: [
49 /node_modules/,
50 options.paths.buildPath
51 ],
52 options: {
53 presets: [
54 [require.resolve('babel-preset-env'), {
55 modules: false
56 }]
57 ],
58 plugins: [
59 require.resolve('babel-plugin-transform-object-rest-spread'),
60 require.resolve('babel-plugin-transform-class-properties')
61 ]
62 }
63 }
64 ]
65 },
66 plugins: [
67 new webpack.DefinePlugin({
68 'process.env.NODE_ENV': JSON.stringify(options.env),
69 '__DEV__': options.env === 'development'
70 }),
71 new webpack.BannerPlugin({
72 raw: true,
73 banner: 'require("source-map-support").install();'
74 }),
75 new FriendlyErrorsWebpackPlugin(),
76 new webpack.NoErrorsPlugin()
77 ]
78})