1 | const args = require('minimist')(process.argv.slice(2));
|
2 | const fs = require('fs');
|
3 | const { resolveApp } = require('./paths');
|
4 | const detectPort = require('detect-port');
|
5 | const semver = require('semver');
|
6 |
|
7 | let odWebpackConfig = {};
|
8 | if (fs.existsSync(resolveApp('create-frontend.conf.js'))) {
|
9 | try {
|
10 | odWebpackConfig = require(resolveApp('create-frontend.conf'));
|
11 | } catch (err) {
|
12 | console.error('Error in create-frontend.conf.js file:', err);
|
13 | }
|
14 | }
|
15 |
|
16 | const pkg = require(resolveApp('package.json'));
|
17 | const config = Object.assign({}, pkg['create-frontend'] || {}, odWebpackConfig);
|
18 | function getConfigValue(key, fallback) {
|
19 | if (config[key] == null) {
|
20 | return fallback;
|
21 | }
|
22 | return config[key];
|
23 | }
|
24 |
|
25 | module.exports = async function getConfig() {
|
26 | const WEBPACK_PORT = await getPort(args.webpackPort || 3000);
|
27 | const IS_DEBUG = !!args.debug;
|
28 | const APP_PROTOCOL = args.protocol || 'http';
|
29 | const WEBPACK_DOMAIN = args.webpackDomain || 'localhost';
|
30 | const WEBPACK_SERVER = `${APP_PROTOCOL}://${WEBPACK_DOMAIN}:${WEBPACK_PORT}`;
|
31 | const ENTRY_POINTS = getConfigValue('entryPoints', {
|
32 | app: 'client/js/entry.js',
|
33 | });
|
34 | const HASH_FILENAMES = getConfigValue('hashFileNames', true);
|
35 | const ENABLE_DEV_SOURCEMAPS = getConfigValue('enableDevSourcemaps', true);
|
36 | const ENABLE_PROD_SOURCEMAPS = getConfigValue('enableProdSourcemaps', false);
|
37 | const HTML_OPTIONS = getConfigValue('htmlOptions', {});
|
38 | const APPEND_PLUGINS = getConfigValue('appendPlugins', () => []);
|
39 | const PREPEND_RULES = getConfigValue('prependRules', () => []);
|
40 | const EDIT_CONFIG = getConfigValue('editConfig', _ => _);
|
41 | const EDIT_DEV_SERVER_CONFIG = getConfigValue('editDevServerConfig', _ => _);
|
42 | const SERVER_ENTRY_POINT = getConfigValue('serverEntryPoint', 'server/entry.js');
|
43 |
|
44 | const APP_DIRECTORY = fs.realpathSync(process.cwd());
|
45 | const SERVER_BUILD_DIRECTORY = resolveApp(getConfigValue('serverBuildPath', 'build/server'));
|
46 | const BUILD_PATH = getConfigValue('buildPath', 'build');
|
47 | const PUBLIC_DIRECTORY = resolveApp(getConfigValue('publicDirectory', 'public'));
|
48 | const BUILD_DIRECTORY = resolveApp(PUBLIC_DIRECTORY, BUILD_PATH);
|
49 | const HTML_PATH = resolveApp(getConfigValue('htmlPath', 'client/html'));
|
50 | const SERVER_OUTPUT_FILE = 'build-server';
|
51 | const MANIFEST_PATH = resolveApp(BUILD_DIRECTORY, 'asset-manifest.json');
|
52 | const CORE_JS = pkg.dependencies['core-js'] ? semver.coerce(pkg.dependencies['core-js']).major : undefined;
|
53 |
|
54 | return {
|
55 | APP_DIRECTORY,
|
56 | APP_PROTOCOL,
|
57 | APPEND_PLUGINS,
|
58 | BUILD_DIRECTORY,
|
59 | BUILD_PATH,
|
60 | EDIT_CONFIG,
|
61 | EDIT_DEV_SERVER_CONFIG,
|
62 | ENABLE_DEV_SOURCEMAPS,
|
63 | ENABLE_PROD_SOURCEMAPS,
|
64 | ENTRY_POINTS,
|
65 | HASH_FILENAMES,
|
66 | HTML_OPTIONS,
|
67 | HTML_PATH,
|
68 | IS_DEBUG,
|
69 | PREPEND_RULES,
|
70 | PUBLIC_DIRECTORY,
|
71 | SERVER_BUILD_DIRECTORY,
|
72 | SERVER_ENTRY_POINT,
|
73 | WEBPACK_DOMAIN,
|
74 | WEBPACK_PORT,
|
75 | WEBPACK_SERVER,
|
76 | SERVER_OUTPUT_FILE,
|
77 | MANIFEST_PATH,
|
78 | CORE_JS,
|
79 | };
|
80 | };
|
81 |
|
82 |
|
83 |
|
84 | let resolvedPort;
|
85 | async function getPort(desiredPort) {
|
86 | if (resolvedPort) {
|
87 | return resolvedPort;
|
88 | }
|
89 |
|
90 | const WEBPACK_PORT = await detectPort(desiredPort);
|
91 |
|
92 | resolvedPort = WEBPACK_PORT;
|
93 | return resolvedPort;
|
94 | }
|