[Tools] Nx workspace with React

Nx

Create a new empty Nx workspace

npx create-nx-workspace <workspace name>

Choose

Empty workspace
Nx Cloud
Nx CLI

Useful Commands

yarn nx list

Shows all the available packages for nx

yarn nx list @nrwl/react

Generate a new React app with Nx

bash yarn add @nrwl/react yarn nx g @nrwl/react:application --name store

Useful Commands

bash yarn nx g @nrwl/react:application --help

Running the application

yarn nx run store:serve

You can modify the port in workspace.json:

  "serve": {
    "executor": "@nrwl/web:dev-server",
    "options": {
      "buildTarget": "store:build",
+     "port": 3000
  },

Generate a shared react lib for store application

yarn nx g @nrwl/react:lib ui-shared --directory=store

Generate a component inside lib

yarn nx g @nrwl/react:component header --project=store-ui-shared

Choose Y to export the component.

Using the generated component inside application

You can find the component import path from tsconfig.base.json:

    "paths": {
      "@egghead/store/ui-shared": ["libs/store/ui-shared/src/index.ts"]
    }

app.tsx:

import {Header} from '@egghead/store/ui-shared'

Genearte a Typescript lib

yarn nx g @nrwl/workspace:lib util-formatters --directory=store

Generate a Lib for application by --appProject

 yarn nx g @nrwl/react:lib feature-game-detail --directory=store --appProject=store

This will add some routing config into application

Add a backend server

yarn add -D @nrwl/express
yarn nx g @nrwl/express:application api --frontendProject=store

Added --frontendProject will also generate a proxy.conf.json file in store application.

yarn nx run api:serve

Useful commands

Run Frontend and backend in one command

yarn nx run-many --target=serve --projects=api,store --parallel=true

Modify workspace.json to run multi applications

        "serve": {...},
        "serveAppAndApi": {
          "builder": "@nrwl/workspace:run-commands",
          "options": {
            "commands": [
              {
                "command": "nx run api:serve"
              },
              {
                "command": "nx run store:serve"
              }
            ]
          }
        },

Run:

yarn nx run store:serveAppAndApi

Generate a lib which share between backend and frontend

yarn nx g @nrwl/workspace:lib util-interface --directory=api

It will generate under libs/api/util-interface.

Use storybook

yarn add @nrwl/storybook -D
yarn nx list @nrwl/react

You should be able to see storybook-configuration.

yarn nx generate @nrwl/react:stroybook-configruation store-ui-shared --configureCypress --generateStories

It will generate Storybook under libs/ui-shared/.storybook & Cypress under store-ui-shared-e2e folder

Run storybook

yarn nx run store-ui-shared:storybook

Run Cypress

yarn nx run store-ui-shared-e2e:e2e --watch

Run JEST

yarn nx run store:test

Build application

yarn nx run store:build --configuration=production

or

yarn nx build store --configuration=production

Will generate a dist folder

Lint application

yarn nx run store:lint

Run the applications/libs which affected

Nx use git history to detect which applications or libs have been changed.

And then run the affected libs and applications to speed up testing.

yarn nx affected:test --base=master
yarn nx affected:lint --base=master
yarn nx affected:dep-graph --base=master

Run unit testings based on master branch.

yarn nx affected:test --all
yarn nx affected:test --all --skip-nx-cache

Nx will cache the running affected result into node_modules/.cache to speed up next runtime.

You can --skip-nx-cache or delete cache.

Migrations

yarn nx migrate latest

then install the new packages.

yarn

If there is migrations.json created:

yarn nx migrate --run-migrations=migrations.json
posted @ 2021-01-21 23:17  Zhentiw  阅读(290)  评论(0编辑  收藏  举报