1 | const path = require('path');
|
2 | const root = process.cwd();
|
3 | const nodeExternals = require('webpack-node-externals');
|
4 | const TerserPlugin = require('terser-webpack-plugin');
|
5 | const { logInfo } = require('../bin/log');
|
6 | const { getPackageJson, getPackageJsonAnuxSettings } = require('../bin/utils');
|
7 |
|
8 | module.exports = (env, argv) => {
|
9 | const isDev = argv.mode === 'development';
|
10 | const useNodemon = argv.useNodemon === true;
|
11 | const { name } = getPackageJson({ throwErrorIfNotFound: true });
|
12 | let { build: { entry, includeNodeModules } } = getPackageJsonAnuxSettings({ build: { includeNodeModules: false } });
|
13 |
|
14 | if (includeNodeModules) {
|
15 | logInfo('NOTE: Including node modules in build output.');
|
16 | }
|
17 |
|
18 | if (entry) {
|
19 | logInfo('NOTE: Using custom entries.');
|
20 | } else {
|
21 | entry = { index: './src/index.ts' };
|
22 | }
|
23 |
|
24 | const result = {
|
25 | entry,
|
26 | devtool: 'source-map',
|
27 | target: 'node',
|
28 | output: {
|
29 | path: path.resolve(root, './dist'),
|
30 | libraryTarget: 'umd',
|
31 | library: name,
|
32 | },
|
33 | module: {
|
34 | rules: [{
|
35 | test: /\.tsx?$/,
|
36 | loader: 'ts-loader',
|
37 | options: {
|
38 | onlyCompileBundledFiles: true,
|
39 | compilerOptions: {
|
40 | declaration: true,
|
41 | declarationDir: './dist',
|
42 | noEmit: false,
|
43 | },
|
44 | },
|
45 | }, {
|
46 | test: /\.js$/,
|
47 | use: ['source-map-loader'],
|
48 | enforce: 'pre'
|
49 | }],
|
50 | },
|
51 | optimization: {
|
52 | minimizer: [
|
53 | new TerserPlugin({
|
54 | parallel: true,
|
55 | terserOptions: {
|
56 | compress: !isDev,
|
57 | keep_classnames: true,
|
58 | keep_fnames: true,
|
59 | mangle: !isDev,
|
60 | sourceMap: true,
|
61 | },
|
62 | }),
|
63 | ],
|
64 | },
|
65 | plugins: [
|
66 | useNodemon ? new (require('nodemon-webpack-plugin'))() : null,
|
67 | ].filter(item => item != null),
|
68 | externals: [
|
69 | includeNodeModules ? null : nodeExternals(),
|
70 | ].filter(item => !!item),
|
71 | resolve: {
|
72 | extensions: ['.ts', '.tsx', '.js', '.jsx'],
|
73 | },
|
74 | stats: {
|
75 | assets: false,
|
76 | builtAt: isDev,
|
77 | cached: false,
|
78 | cachedAssets: false,
|
79 | children: false,
|
80 | chunks: false,
|
81 | chunkGroups: false,
|
82 | chunkModules: false,
|
83 | chunkOrigins: false,
|
84 | colors: true,
|
85 | depth: false,
|
86 | entrypoints: false,
|
87 | env: false,
|
88 | errors: true,
|
89 | errorDetails: true,
|
90 | hash: false,
|
91 | logging: 'error',
|
92 | modules: false,
|
93 | outputPath: false,
|
94 | performance: true,
|
95 | providedExports: false,
|
96 | publicPath: false,
|
97 | reasons: false,
|
98 | source: false,
|
99 | timings: true,
|
100 | usedExports: false,
|
101 | version: false,
|
102 | warnings: false,
|
103 | },
|
104 | };
|
105 |
|
106 | return result;
|
107 | };
|