export function runServer()

in src/amo/server/base.js [498:594]


export function runServer({
  listen = true,
  exitProcess = true,
  config = defaultConfig,
} = {}) {
  const port = config.get('serverPort');
  const host = config.get('serverHost');

  const useHttpsForDev = process.env.USE_HTTPS_FOR_DEV;

  const isoMorphicServer = new WebpackIsomorphicTools(
    WebpackIsomorphicToolsConfig,
  );

  return isoMorphicServer
    .server(config.get('basePath'))
    .then(() => {
      global.webpackIsomorphicTools = isoMorphicServer;
      // Webpack Isomorphic tools is ready
      // now fire up the actual server.
      return new Promise((resolve, reject) => {
        /* eslint-disable global-require, import/no-dynamic-require */
        const App = require('amo/components/App').default;
        const createStore = require('amo/store').default;
        /* eslint-enable global-require, import/no-dynamic-require */
        let server = baseServer(App, createStore);
        if (listen === true) {
          if (useHttpsForDev) {
            if (host === 'example.com') {
              const options = {
                key: fs.readFileSync(
                  'bin/local-dev-server-certs/example.com-key.pem',
                ),
                cert: fs.readFileSync(
                  'bin/local-dev-server-certs/example.com.pem',
                ),
                passphrase: '',
              };
              server = https.createServer(options, server);
            } else {
              log.debug(
                `To use the HTTPS server you must serve the site at example.com (host was "${host}")`,
              );
            }
          }
          server.listen(port, host, (err) => {
            if (err) {
              return reject(err);
            }
            const proxyEnabled = convertBoolean(config.get('proxyEnabled'));
            // Not using oneLine here since it seems to change '  ' to ' '.
            // eslint-disable-next-line amo/only-log-strings
            log.info(
              [
                `🔥 Addons-frontend server is running`,
                `[ENV:${config.util.getEnv('NODE_ENV')}]`,
                `[isDevelopment:${config.get('isDevelopment')}]`,
                `[isDeployed:${config.get('isDeployed')}]`,
                `[apiHost:${config.get('apiHost')}]`,
                `[apiPath:${config.get('apiPath')}]`,
                `[apiVersion:${config.get('apiVersion')}]`,
              ].join(' '),
            );
            if (proxyEnabled) {
              const proxyPort = config.get('proxyPort');
              log.debug(
                `🚦 Proxy detected, frontend running at http://${host}:${port}.`,
              );
              log.debug(
                `👁  Open your browser at http${
                  useHttpsForDev ? 's' : ''
                }://${host}:${proxyPort} to view it.`,
              );
            } else {
              log.debug(
                `👁  Open your browser at http${
                  useHttpsForDev ? 's' : ''
                }://${host}:${port} to view it.`,
              );
            }
            return resolve(server);
          });
        } else {
          resolve(server);
        }
      });
    })
    .catch((err) => {
      log.error(`${err}`);

      if (exitProcess) {
        process.exit(1);
      } else {
        throw err;
      }
    });
}