1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const case_sensitive_paths_webpack_plugin_1 = tslib_1.__importDefault(require("case-sensitive-paths-webpack-plugin"));
|
5 | const fork_ts_checker_webpack_plugin_1 = tslib_1.__importDefault(require("fork-ts-checker-webpack-plugin"));
|
6 | const tsconfig_paths_webpack_plugin_1 = tslib_1.__importDefault(require("tsconfig-paths-webpack-plugin"));
|
7 | const webpack_node_externals_1 = tslib_1.__importDefault(require("webpack-node-externals"));
|
8 | const clean_webpack_plugin_1 = require("clean-webpack-plugin");
|
9 | const eslintFormatter_1 = tslib_1.__importDefault(require("./formatters/eslintFormatter"));
|
10 | const formatForkTsCheckerMessages_1 = require("./formatForkTsCheckerMessages");
|
11 | const formatTsLoaderMessages_1 = require("./formatTsLoaderMessages");
|
12 | const paths_1 = require("./paths");
|
13 | const env_1 = require("../util/env");
|
14 | exports.createWebpackConfig = (environment) => {
|
15 | const isDev = environment === 'development';
|
16 | return {
|
17 | mode: environment,
|
18 | entry: paths_1.paths.appIndexJs,
|
19 | target: 'node',
|
20 | externals: [
|
21 | webpack_node_externals_1.default(env_1.RuntimeOptions.useMonorepo
|
22 | ? {
|
23 | modulesFromFile: true,
|
24 | }
|
25 | : undefined),
|
26 | ],
|
27 | devtool: isDev ? 'cheap-eval-source-map' : 'source-map',
|
28 | output: {
|
29 | path: isDev ? paths_1.paths.appDevBundlePath : paths_1.paths.appBuild,
|
30 | filename: isDev ? 'bundle.js' : 'bundle.prod.js',
|
31 | libraryTarget: 'commonjs',
|
32 | },
|
33 | resolve: {
|
34 | extensions: ['.ts', '.js', '.json'],
|
35 | plugins: [
|
36 | new tsconfig_paths_webpack_plugin_1.default({
|
37 | configFile: paths_1.paths.appTsConfig,
|
38 | logLevel: 'ERROR',
|
39 | }),
|
40 | ],
|
41 | },
|
42 | module: {
|
43 | rules: [
|
44 | {
|
45 | test: /\.(j|t)sx?$/,
|
46 | enforce: 'pre',
|
47 | use: [
|
48 | {
|
49 | loader: require.resolve('eslint-loader'),
|
50 | options: {
|
51 | eslintPath: require.resolve('eslint'),
|
52 | formatter: eslintFormatter_1.default,
|
53 | configFile: paths_1.paths.appEslint,
|
54 | emitWarning: true,
|
55 | resolvePluginsRelativeTo: __dirname,
|
56 | },
|
57 | },
|
58 | ],
|
59 | include: paths_1.paths.appSrc,
|
60 | },
|
61 | {
|
62 | test: /\.jsx?$/,
|
63 | include: paths_1.paths.appSrc,
|
64 | exclude: /node_modules/,
|
65 | loader: require.resolve('babel-loader'),
|
66 | options: {
|
67 | babelrc: false,
|
68 | presets: [require.resolve('@babel/preset-env')],
|
69 | compact: true,
|
70 | },
|
71 | },
|
72 | {
|
73 | test: /\.tsx?$/,
|
74 | include: paths_1.paths.appSrc,
|
75 | loader: require.resolve('ts-loader'),
|
76 | options: {
|
77 | transpileOnly: true,
|
78 | experimentalWatchApi: isDev ? true : undefined,
|
79 | errorFormatter: formatTsLoaderMessages_1.formatTsLoaderMessages,
|
80 | },
|
81 | },
|
82 | ],
|
83 | },
|
84 | plugins: [
|
85 | new fork_ts_checker_webpack_plugin_1.default({
|
86 | silent: true,
|
87 | async: false,
|
88 | watch: paths_1.paths.appSrc,
|
89 | tsconfig: paths_1.paths.appTsConfig,
|
90 | formatter: formatForkTsCheckerMessages_1.formatForkTsCheckerMessages,
|
91 | checkSyntacticErrors: true,
|
92 | reportFiles: ['**', '!**/__tests__/**', '!**/?(*.)(spec|test|t).*'],
|
93 | }),
|
94 | new case_sensitive_paths_webpack_plugin_1.default(),
|
95 | new clean_webpack_plugin_1.CleanWebpackPlugin(),
|
96 | ],
|
97 | optimization: {
|
98 | nodeEnv: false,
|
99 | },
|
100 | node: {
|
101 | __dirname: false,
|
102 | __filename: false,
|
103 | },
|
104 | performance: {
|
105 | hints: false,
|
106 | },
|
107 | };
|
108 | };
|
109 |
|
\ | No newline at end of file |