UNPKG

3.3 kBJavaScriptView Raw
1const args = require('minimist')(process.argv.slice(2));
2const fs = require('fs');
3const { resolveApp } = require('./paths');
4const detectPort = require('detect-port');
5const semver = require('semver');
6
7let odWebpackConfig = {};
8if (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
16const pkg = require(resolveApp('package.json'));
17const config = Object.assign({}, pkg['create-frontend'] || {}, odWebpackConfig);
18function getConfigValue(key, fallback) {
19 if (config[key] == null) {
20 return fallback;
21 }
22 return config[key];
23}
24
25module.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// Store resolved port so that we get the same one on each getConfig() call,
83// even after the port has already been used by our own logic
84let resolvedPort;
85async 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}