UNPKG

4.81 kBJavaScriptView Raw
1"use strict";
2
3var _fs = _interopRequireDefault(require("fs"));
4
5var _webpackMerge = _interopRequireDefault(require("webpack-merge"));
6
7var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
8
9var _path = _interopRequireDefault(require("path"));
10
11var _terserWebpackPlugin = _interopRequireDefault(require("terser-webpack-plugin"));
12
13var _webpack = _interopRequireDefault(require("webpack"));
14
15function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
16
17var config = function config(customizations) {
18 var mode = process.env.NODE_ENV;
19 var tsScriptConfigPath = _fs["default"].existsSync("".concat(process.cwd(), "/tsconfig.json")) ? "".concat(process.cwd(), "/tsconfig.json") : _path["default"].resolve('node_modules', '@procore', 'core-webpack', 'tsconfig.json');
20 var output = mode === 'production' ? {
21 path: _path["default"].resolve("".concat(process.cwd()), 'build'),
22 filename: '[name].bundle.js',
23 libraryTarget: 'umd'
24 } : {
25 path: '/',
26 publicPath: 'http://localhost:5000/',
27 filename: '[name].bundle.js',
28 libraryTarget: 'umd'
29 };
30 var plugins = [new _miniCssExtractPlugin["default"]({
31 filename: '[name].bundle.css'
32 })];
33 var client = process.env.CLIENT_NAME ? "-".concat(process.env.CLIENT_NAME) : '';
34 var digest = process.env.CLIENT_DIGEST ? "-".concat(process.env.CLIENT_DIGEST) : '';
35 plugins = mode === 'development' ? plugins : plugins.concat([new _webpack["default"].SourceMapDevToolPlugin({
36 test: /\.js$/,
37 filename: "sourcemaps/[name].bundle".concat(client).concat(digest, ".js.map"),
38 append: false,
39 exclude: [/node_modules\/*/]
40 }), new _webpack["default"].SourceMapDevToolPlugin({
41 test: /\.css$/,
42 filename: '[file].map',
43 exclude: [/node_modules\/*/]
44 })]);
45 var defaults = {
46 entry: {
47 index: _path["default"].resolve('src', 'index.js')
48 },
49 devServer: {
50 headers: {
51 'Access-Control-Allow-Origin': '*'
52 },
53 host: '0.0.0.0',
54 hot: true,
55 inline: true,
56 port: '5000'
57 },
58 devtool: mode === 'production' ? false : 'inline-source-map',
59 mode: mode,
60 module: {
61 rules: [{
62 test: /\.tsx?$/,
63 exclude: /node_modules/,
64 use: {
65 loader: require.resolve('ts-loader'),
66 options: {
67 context: process.cwd(),
68 configFile: tsScriptConfigPath
69 }
70 }
71 }, {
72 test: /\.jsx?$/,
73 exclude: /node_modules/,
74 use: {
75 loader: require.resolve('babel-loader'),
76 options: {
77 plugins: [require.resolve('@babel/plugin-proposal-object-rest-spread'), require.resolve('@babel/plugin-transform-runtime'), require.resolve('babel-plugin-transform-class-properties')],
78 presets: [require.resolve('@babel/preset-env'), require.resolve('@babel/preset-react')]
79 }
80 }
81 }, {
82 test: /\.s?[ca]ss$/,
83 exclude: /node_modules/,
84 use: [{
85 loader: mode === 'development' ? require.resolve('style-loader') : _miniCssExtractPlugin["default"].loader
86 }, {
87 loader: require.resolve('css-loader'),
88 options: {
89 localIdentName: '[local]--[hash:base64:5]',
90 modules: true,
91 importLoaders: 1
92 }
93 }, {
94 loader: require.resolve('postcss-loader'),
95 options: {
96 ident: 'postcss',
97 plugins: function plugins() {
98 return [require('postcss-preset-env')({
99 browsers: 'last 2 versions'
100 }), require('precss')()];
101 }
102 }
103 }]
104 }, {
105 test: /\.(gif|jpe?g|png|svg|eot|ttf|otf|woff2?)$/,
106 use: require.resolve('file-loader')
107 }]
108 },
109 optimization: {
110 minimizer: [new _terserWebpackPlugin["default"]({
111 cache: true,
112 parallel: 2,
113 sourceMap: true,
114 terserOptions: {
115 compress: {
116 drop_console: true
117 }
118 }
119 })],
120 splitChunks: {
121 cacheGroups: {
122 "default": {
123 minChunks: 2,
124 priority: -20,
125 reuseExistingChunk: true
126 },
127 styles: {
128 chunks: 'all',
129 enforce: true,
130 name: 'styles',
131 test: /\.css$/
132 },
133 vendors: {
134 test: /[\\/]node_modules[\\/]/,
135 priority: -10
136 }
137 }
138 }
139 },
140 output: output,
141 plugins: plugins,
142 resolve: {
143 extensions: ['.css', '.js', '.jsx', '.scss', '.ts', '.tsx']
144 }
145 };
146 return typeof customizations === 'function' ? customizations(_webpackMerge["default"], defaults) : (0, _webpackMerge["default"])(defaults, customizations);
147};
148
149exports = module.exports = config;
\No newline at end of file