{"_id":"@brendonjohn/react-ssr-nestjs-express","_rev":"2-b5b3ab0a61d7413cd14546f237466706","name":"@brendonjohn/react-ssr-nestjs-express","dist-tags":{"latest":"0.19.11"},"versions":{"0.19.10":{"name":"@brendonjohn/react-ssr-nestjs-express","version":"0.19.10","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/nestjs-express/README.md","keywords":["react","nest","nestjs","express","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","devDependencies":{"@brendonjohn/react-ssr-core":"^0.19.10","@nestjs/common":"^6.10.11","@nestjs/core":"^6.10.11","@nestjs/platform-express":"^6.10.11","react":"^16.12.0","react-dom":"^16.12.0","reflect-metadata":"^0.1.13","rxjs":"^6.5.3"},"peerDependencies":{"@brendonjohn/react-ssr-core":"^0.*","@nestjs/platform-express":"^6"},"gitHead":"c674c300ec54c3abc7512e492d95f2d50a998c2b","_id":"@brendonjohn/react-ssr-nestjs-express@0.19.10","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.20.2/node@v12.15.0+x64 (darwin)","dist":{"integrity":"sha512-w/oAVqigSJQFEkR5GNRbdfKcNDYTh9P55S+psH9z2e7+ZO3yRK65UnFdv+s3/E+oJlJyHtZ8Gia1uF72kWiTZQ==","shasum":"ee5caf1eadc1a48613b5710c52123bb770de266f","tarball":"https://registry.npmjs.org/@brendonjohn/react-ssr-nestjs-express/-/react-ssr-nestjs-express-0.19.10.tgz","fileCount":8,"unpackedSize":16213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSvX1CRA9TVsSAnZWagAAQp4QAJ+uJ6LdmqtS/uyNQY05\nbdG21TJ19bbm9E7rL1y4s5MpfLt7oFO+3YjmqhwDC2NzGYwEJQWy8wxG2YgF\nZYAAK8nbnMrtGlRcU7GyiM39SaAxc3BHSzEg/zHkRjtjHlqU7ttfCCFaP8u8\ncw3FVQmSsD4j9yz5Pl3Ns+HWYgtJ3f7aSNZICImS2sxIyYBjxnHulQYOUYvN\noyeIXKzY6zScfAju2RpRN+OQCSAV+g13Gt+Sv1J1YKm8YO+QPIrhK7EwNUsI\nEhzjF+YiVKPyPvHt4gsxY8JhHiBZSMm5eIGUN1x8wIAGwnktrD1y891wxP0m\nPnaLFCgKY53HKzCKT2ABHCIun1Pm8jHnFKOwUJWmiYc8td9NBHV1P9hSB4Ab\n0NuJgdy8hLv/utWFY9VMPspPQAY3vLGxM6tjUNjdkdpH1WHoPdGeiaTjZcOw\ntjSd2PgSDHvnec6xqdtMBNwWbpaeSm1NZwFHLW+WRbGhuwCMu3x099yKU5vZ\ntXQTh8a6mT2WVVsk2zPv1P3OgqhPJ8DvGIj0g5HMJ8+r/4GGsqWqERpCMvH7\npLVUnD3a/idLZprxSG6hi2WnLvcJoqYDi8CdSx5aTyh2cJZV7mMdLKNznMWb\ns6dvO11LqfDXXpy1WDvtLq05eKFl//w8Qal2kNm17GFWiAiAsXP4st2jOJFl\ntAko\r\n=GXWm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrbPO50jJNAvxPhUXBu5/58kiUi+qNdjG7CH5Cj3XazwIhAO0waqAzsVzLV4gN9ihruY1rXGQI6LlxmyG+wNONkDTb"}]},"maintainers":[{"name":"brendonjohn","email":"brendon@mish.guru"}],"_npmUser":{"name":"brendonjohn","email":"brendon@mish.guru"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-ssr-nestjs-express_0.19.10_1581970933490_0.11324468471324622"},"_hasShrinkwrap":false},"0.19.11":{"name":"@brendonjohn/react-ssr-nestjs-express","version":"0.19.11","description":"React SSR as a view template engine","repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"license":"MIT","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/nestjs-express/README.md","keywords":["react","nest","nestjs","express","server-side-rendering","ssr","view-engine","view-template-engine"],"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"publishConfig":{"access":"public"},"main":"index.js","devDependencies":{"@brendonjohn/react-ssr-core":"^0.19.10","@nestjs/common":"^6.10.11","@nestjs/core":"^6.10.11","@nestjs/platform-express":"^6.10.11","react":"^16.12.0","react-dom":"^16.12.0","reflect-metadata":"^0.1.13","rxjs":"^6.5.3"},"peerDependencies":{"@brendonjohn/react-ssr-core":"^0.*","@nestjs/platform-express":"^6"},"gitHead":"9b77b85492cf44942ddf5af9e86831269902f277","_id":"@brendonjohn/react-ssr-nestjs-express@0.19.11","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.20.2/node@v12.15.0+x64 (darwin)","dist":{"integrity":"sha512-ctbYvc3YWLcOc4WMbio07b1Zc9Tt0sSSfCt4y2KMxR+R6kZokwJaE/RjOnmM0W0QCjUZKPWueGrp3VHLiOiVaQ==","shasum":"d4ad845990ba97fe6bfffcebb3e185bc8f010889","tarball":"https://registry.npmjs.org/@brendonjohn/react-ssr-nestjs-express/-/react-ssr-nestjs-express-0.19.11.tgz","fileCount":8,"unpackedSize":16273,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSv4KCRA9TVsSAnZWagAAdrwP/3J9n93B5TKafHK59u3s\nHdrtCHSWwqDeTvZ5mF8p3HYekghp/yQvt8LbipgwSNN0mhld6aZHSuXKfenR\nN3UXUtmSLDaTSEvVbCitxrL6iB2qnyoC1OinK3ipZVJtpJENnitTPHp0IL39\ngW5lcP8YO+jQe6vEoioP3LUWJRwy1vnRvqOk3HyaSKkI8fjtb2rK7+rnN2Ao\ny8S2JKNrzN+yGinuAXyJde7RHTutHveAfzXJ8KDYaQR30fS/okosemquQCu8\n3cjBvosjMQjUUvk1UAnyejtRgAb6bnTzmfUMBC3gn8puRffl0ppUXFxlTRKx\naVpboD4PVYdO8EtLJ0A1XOmuG1w/+VGjmtw7PqiLrQAEf3pXgz3mYSP0E34Y\ngMLbKNDc7CS1t8M55Wp3MrsTieVhF9DM+3dx0SUWTq3tAw94LfNdq2ApV0RC\ne2dhqstNT0W7jLHHusXmWCeTYfEY5dzjjJ2RlEPh8XmuB2Z7cNXm7yLYBI/9\nFUGMft8w5zwbFPUzWoeOz2BlY9XVUVJafs2htHcNEM4qyMKsAvGuDisE2xEs\neDHfhm2g8orZXMFwx0izgVD0zJI9zCopEOD6X2UYaFlrHgCNcLriqFRc1Cn7\nqwofEOoJc4mw/6igUzgM0y4kpRzxI/NPCoROcF+6+LhK1hfdJvt2aoqqwSWb\nfaVV\r\n=WRL0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC4TJePxM32jaOsupAmq2iGJe4Esdg4QHpzHCphpUbbLAiEAlWquunUvguizbRroNYZi0N62oZ89yJMmPRh0k5G192M="}]},"maintainers":[{"name":"brendonjohn","email":"brendon@mish.guru"}],"_npmUser":{"name":"brendonjohn","email":"brendon@mish.guru"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-ssr-nestjs-express_0.19.11_1581973001888_0.366581297192931"},"_hasShrinkwrap":false}},"time":{"created":"2020-02-17T20:22:13.464Z","0.19.10":"2020-02-17T20:22:13.622Z","modified":"2022-04-04T20:31:19.639Z","0.19.11":"2020-02-17T20:56:41.980Z"},"maintainers":[{"name":"brendonjohn","email":"brendon@mish.guru"}],"description":"React SSR as a view template engine","homepage":"https://github.com/saltyshiomix/react-ssr/tree/master/packages/nestjs-express/README.md","keywords":["react","nest","nestjs","express","server-side-rendering","ssr","view-engine","view-template-engine"],"repository":{"type":"git","url":"git+ssh://git@github.com/saltyshiomix/react-ssr.git"},"author":{"name":"Yoshihide Shiono","email":"shiono.yoshihide@gmail.com"},"bugs":{"url":"https://github.com/saltyshiomix/react-ssr/issues","email":"shiono.yoshihide@gmail.com"},"license":"MIT","readme":"## Overview\n\n- SSR (Server Side Rendering) as a view template engine\n- Dynamic\n  - `props`\n    - Passing the server data to the React client `props`\n    - Suitable for dynamic routes like blogging\n  - `Head` component for better SEO\n- Developer Experience\n  - HMR (Hot Module Replacement) when `process.env.NODE_ENV !== 'production'`\n  - Automatically reflect to the browser as soon as you save the scripts and even if styles\n\n## Usage\n\nInstall it:\n\n```bash\n# install NestJS dependencies\n$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express\n\n# install @react-ssr/nestjs-express\n$ npm install --save @react-ssr/core @react-ssr/nestjs-express react react-dom\n```\n\nAnd add a script to your package.json like this:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"ts-node --project tsconfig.server.json server/main.ts\"\n  }\n}\n```\n\nThen, populate files below inside your project:\n\n**`.babelrc`**:\n\n```json\n{\n  \"presets\": [\n    \"@brendonjohn/react-ssr-nestjs-express/babel\"\n  ]\n}\n```\n\n**`tsconfig.json`**:\n\n```json\n{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"ssr.config.js\",\n    \".ssr\"\n  ]\n}\n```\n\n**`tsconfig.server.json`**:\n\n```json\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\"\n  },\n  \"include\": [\n    \"server\"\n  ]\n}\n```\n\n**`server/main.ts`**:\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { NestExpressApplication } from '@nestjs/platform-express';\nimport register from '@react-ssr/nestjs-express/register';\nimport { AppModule } from './app.module';\n\n(async () => {\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\n\n  // register `.tsx` as a view template engine\n  await register(app);\n\n  app.listen(3000, async () => {\n    console.log(`> Ready on http://localhost:3000`);\n  });\n})();\n```\n\n**`server/app.module.ts`**:\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\n\n@Module({\n  controllers: [\n    AppController,\n  ],\n})\nexport class AppModule {}\n```\n\n**`server/app.controller.ts`**:\n\n```ts\nimport {\n  Controller,\n  Get,\n  Render,\n} from '@nestjs/common';\n\n@Controller()\nexport class AppController {\n  @Get()\n  @Render('index') // this will render `views/index.tsx`\n  public showHome() {\n    const user = { name: 'NestJS' };\n    return { user };\n  }\n}\n```\n\n**`views/index.tsx`**:\n\n```tsx\ninterface IndexProps {\n  user: any;\n}\n\nconst Index = ({ user }: IndexProps) => {\n  return <p>Hello {user.name}!</p>;\n};\n\nexport default Index;\n```\n\nFinally, just run `npm start` and go to `http://localhost:3000`, and you'll see `Hello NestJS!`.\n\n## Configuration (`ssr.config.js`)\n\nHere is the default `ssr.config.js`, which is used by `react-ssr` when there are no valid values:\n\n```js\nmodule.exports = {\n  id: 'default',\n  distDir: '.ssr',\n  viewsDir: 'views',\n  staticViews: [],\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    return config;\n  },\n};\n```\n\n### `ssr.config.js#id`\n\nThe id of **UI framework**. (default: `default`)\n\nIt can be ignored only when the project does not use any UI frameworks.\n\nSupported UI frameworks are:\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\nFor example, if we want to use `emotion`, `ssr.config.js` is like this:\n\n```js\nmodule.exports = {\n  id: 'emotion',\n};\n```\n\n### `ssr.config.js#distDir`\n\nThe place where `react-ssr` generates **production** results. (default: `.ssr`)\n\nIf we use TypeScript or any other library which must be compiled, the config below may be useful:\n\n```js\nmodule.exports = {\n  // dist folder should be ignored by `.gitignore`\n  distDir: 'dist/.ssr',\n};\n```\n\n### `ssr.config.js#viewsDir`\n\nThe place where we put views. (default: `views`)\n\nA function `res.render('xxx')` will render `views/xxx.jsx` or `views/xxx.tsx`.\n\nA working example is here: [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n\n### `ssr.config.js#staticViews`\n\nIf specified, `react-ssr` generates html cache when production:\n\n```js\nmodule.exports = {\n  staticViews: [\n    'auth/login',\n    'auth/register',\n    'about',\n  ],\n};\n```\n\n### `ssr.config.js#webpack()`\n\n```js\nmodule.exports = {\n  webpack: (config /* webpack.Configuration */, env /* 'development' | 'production' */) => {\n    // we can override default webpack config here\n    return config;\n  },\n};\n```\n\n## Custom Document\n\nJust put `_document.tsx` into the views root:\n\n**`views/_document.tsx`**:\n\n```tsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/nestjs-express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html lang=\"en\">\n        <Head>\n          <title>Default Title</title>\n          <meta charSet=\"utf-8\" />\n          <meta name=\"viewport\" content=\"minimum-scale=1, initial-scale=1, width=device-width\" />\n          <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n};\n```\n\n**Note**:\n\n- **Please put `<Main />` component directly under `<body>` tag and don't wrap `<Main />` component with another components**, because this is a hydration target for the client.\n\nAnd then, use it as always:\n\n**`views/index.tsx`**:\n\n```tsx\nconst Index = (props) => {\n  return <p>Hello World!</p>;\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n\n## Dynamic `Head`\n\nWe can use the `Head` component in any pages:\n\n**`views/index.tsx`**:\n\n```tsx\nimport React from 'react';\nimport { Head } from '@react-ssr/nestjs-express';\n\nconst Index = (props) => {\n  return (\n    <React.Fragment>\n      <Head>\n        <title>Dynamic Title</title>\n        <meta name=\"description\" content=\"Dynamic Description\" />\n      </Head>\n      <p>Of course, SSR Ready!</p>\n    </React.Fragment>\n  );\n};\n\nexport default Index;\n```\n\nA working example is here: [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n\n## Supported UI Framework\n\n- [x] default (the id `default` doesn't need to be specified in `ssr.config.js`)\n  - [x] [bulma](https://bulma.io)\n  - [x] [semantic-ui](https://react.semantic-ui.com)\n  - [x] Or any other **non** CSS-in-JS UI frameworks\n- [x] [emotion](https://emotion.sh)\n- [x] [styled-components](https://www.styled-components.com)\n- [x] [material-ui](https://material-ui.com)\n- [x] [antd](https://ant.design)\n- [ ] and more...\n\n### Non CSS-in-JS framework\n\n<p align=\"center\"><img src=\"https://i.imgur.com/0PwlfVk.png\"></p>\n\nLike [semantic-ui](https://react.semantic-ui.com), non CSS-in-JS frameworks are supported without extra configuration.\n\nAll we have to do is to load global CSS in `_document` or each page:\n\n**`views/_document.tsx`**:\n\n```tsx\nimport React from 'react';\nimport {\n  Document,\n  Head,\n  Main,\n} from '@react-ssr/express';\n\nexport default class extends Document {\n  render() {\n    return (\n      <html>\n        <Head>\n          <title>A Sample of Semantic UI React</title>\n          <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css\" />\n        </Head>\n        <body>\n          <Main />\n        </body>\n      </html>\n    );\n  }\n}\n```\n\n### With Ant Design\n\n<p align=\"center\"><img src=\"https://i.imgur.com/yWGxseM.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-import` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@brendonjohn/react-ssr-express/babel\"\n  ],\n  \"plugins\": [\n    [\n      \"import\",\n      {\n        \"libraryName\": \"antd\",\n        \"style\": \"css\"\n      }\n    ]\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n\n### With Emotion\n\n<p align=\"center\"><img src=\"https://i.imgur.com/XN8evEM.png\"></p>\n\nIn order to enable SSR, we must install these packages:\n\n- [@emotion/cache](https://npm.im/@emotion/cache) as **dependencies**\n- [create-emotion-server](https://npm.im/create-emotion-server) as **dependencies**\n- [babel-plugin-emotion](https://npm.im/babel-plugin-emotion) as devDependencies\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@brendonjohn/react-ssr-express/babel\"\n  ],\n  \"plugins\": [\n    \"emotion\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n\n### With Material UI\n\n<p align=\"center\"><img src=\"https://i.imgur.com/o1AWdyd.png\"></p>\n\nWe can use [material-ui](https://material-ui.com) without extra configuration.\n\nA working example is here: [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n\n### With styled-components\n\n<p align=\"center\"><img src=\"https://i.imgur.com/RtuijYA.png\"></p>\n\nIn order to enable SSR, we must install `babel-plugin-styled-components` as devDependencies.\n\nAnd then, populate `.babelrc` in your project root:\n\n```json\n{\n  \"presets\": [\n    \"@brendonjohn/react-ssr-express/babel\"\n  ],\n  \"plugins\": [\n    \"styled-components\"\n  ]\n}\n```\n\nA working example is here: [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n\n## Examples\n\n- **@react-ssr/express**\n  - `.jsx`\n    - [examples/basic-jsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx)\n    - [examples/basic-custom-views](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-views)\n    - [examples/basic-custom-document](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-custom-document)\n    - [examples/basic-dynamic-head](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-dynamic-head)\n    - [examples/basic-hmr-css](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-css)\n    - [examples/basic-hmr-scss](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-hmr-scss)\n    - [examples/basic-blogging](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-blogging)\n    - [examples/with-jsx-antd](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-antd)\n    - [examples/with-jsx-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-bulma)\n    - [examples/with-jsx-emotion](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-emotion)\n    - [examples/with-jsx-material-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-material-ui)\n    - [examples/with-jsx-semantic-ui](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-semantic-ui)\n    - [examples/with-jsx-styled-components](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-styled-components)\n  - `.tsx`\n    - [examples/basic-tsx](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx)\n- **@react-ssr/nestjs-express**\n  - [examples/basic-nestjs](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs)\n  - [examples/basic-nestjs-nodemon](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-nestjs-nodemon)\n- **@react-ssr/static**\n  - `.jsx`\n    - [examples/basic-jsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-jsx-static)\n    - [examples/with-jsx-static-bulma](https://github.com/saltyshiomix/react-ssr/tree/master/examples/with-jsx-static-bulma)\n  - `.tsx`\n    - [examples/basic-tsx-static](https://github.com/saltyshiomix/react-ssr/tree/master/examples/basic-tsx-static)\n\n## Starters\n\n- [react-ssr-jsx-starter](https://github.com/saltyshiomix/react-ssr-jsx-starter)\n- [react-ssr-tsx-starter](https://github.com/saltyshiomix/react-ssr-tsx-starter)\n- [react-ssr-nestjs-starter](https://github.com/saltyshiomix/react-ssr-nestjs-starter)\n\n## Articles\n\n[Introducing an Alternative to NEXT.js](https://dev.to/saltyshiomix/introducing-an-alternative-to-next-js-12ph)\n\n[[Express] React as a View Template Engine?](https://dev.to/saltyshiomix/express-react-as-a-view-template-engine-h37)\n\n## Related\n\n[reactjs/express-react-views](https://github.com/reactjs/express-react-views)\n","readmeFilename":"README.md"}