UNPKG

2.84 kBJavaScriptView Raw
1const path = require('path');
2const root = process.cwd();
3const nodeExternals = require('webpack-node-externals');
4const TerserPlugin = require('terser-webpack-plugin');
5const { logInfo } = require('../bin/log');
6const { getPackageJson, getPackageJsonAnuxSettings } = require('../bin/utils');
7
8module.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 // console.dir(result);
106 return result;
107};