Categorii
Programare

Cum pot avea un al treilea server în Razzle?

În acest articol voi prezenta una din căile de a face un al treilea server într-un proiect Razzle. Mai exact, un server care poate fi HTTP sau WS (WebSockets) sau oricare script Node.js, care poate fi simplu JS sau care se compilează din TS (TypeScript), cu aceleași path alias-uri ca cele pentru serverul principal și care poate folosi sintaxa de importuri din ES6.

  1. Rulează comanda asta (adaptează la yarn dacă e cazul):
npm i --save razzle-start-server-webpack-plugin

2. Adaugă asta în fișierul razzle.config.js la început:

const StartServerPlugin = require("razzle-start-server-webpack-plugin");

3. Adaugă asta în fișierul razzle.config.js ca metodă a lui module.exports:

modifyWebpackConfig(opts) {
  const config = opts.webpackConfig;
  const options = opts.options.webpackOptions;

  if (opts.env.target === 'node') {
    config.entry.secondserver = ['./a/b/c.ts'];

    if (opts.env.dev) {
      config.entry.secondserver.unshift(
        `${require.resolve('webpack/hot/poll')}?300`
      );

      // Pretty format server errors
      config.entry.secondserver.unshift(
        require.resolve('razzle-dev-utils/prettyNodeErrors')
      );

      config.plugins.push(
        new StartServerPlugin(
          Object.assign(options.startServerOptions, {
            entryName: 'secondserver',
            verbose: true,
            debug: true,
            nodeArgs: [],
            killOnExist: true,
            killOnError: true,
            signal: 'SIGTERM'
          })
        )
      );
    }
  }

  return config;
}

unde ./a/b/c.ts este o cale relativă (poate funcționează și cu o cale absolută) la punctul de intrare (entrypoint) în server care poate fi fie .js, fie .ts, fie .tsx (despre .tsx nu știu cât de util este fiindcă n-am folosit JSX în acest al doilea server până acum, dar se compilează ca .ts cel puțin).

4. Pentru ca pasul următor să funcționeze, instalează:

npm i --save-dev concurrently

5. Pentru a putea rula în mediu de dezvoltare acest server e suficient să execuți npm start. Pentru producție mai este o schimbare necesară. În fișierul package.json modifică script-ul următor astfel:

"start:prod": "NODE_ENV=production concurrently \"node build/server.js\" \"node build/secondserver.js\""

Acum pe producție se poate rula cu comanda npm run start:prod.

Notă: noul server folosește același tsconfig.json care e folosit de celălalt server și poate include fișiere (de exemplu, de tip TypeScript) incluse de celălalt server.

Aveți întrebări sau feedback constructiv? Vă rog să scrieți mai jos în comentarii. Mulțumesc.

5 1 vot
Article Rating
Abonare
Anunță la
guest
2 Comments
Cele mai vechi
Cele mai noi Cele mai votate
Feedback-uri inline
Vezi toate comentariile
Alex
Alex
2 luni în urmă cu

Felicitari tinere, pentru toate postarile de calitate. Nu am mai scris comentarii la postarile tale de ceva timp, pentru ca am fost ocupat cu munca, de dimineata pana seara, iar noaptea nu stau pe internet. Noaptea e pretioasa, pentru somn. Ganduri bune si pozitive, draga Silviu!