Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Craco+CRA strows middleware deprecation warnings from CRA. #495

Open
MattGyverLee opened this issue Feb 24, 2023 · 0 comments
Open

Craco+CRA strows middleware deprecation warnings from CRA. #495

MattGyverLee opened this issue Feb 24, 2023 · 0 comments
Labels
bug Something isn't working

Comments

@MattGyverLee
Copy link

What's happening
I have a working Craco 5/React 16/Node14 project (https://github.com/MattGyverLee/prestige) that I'm trying to rebuild in Craco 7/React 18/Node 18 from scratch.
I ran CRA and got a working app. I added a CRACO config and got a working app, then added Electron.
In my old app, I would use this command to start both webpack and the Electron server:
"electron-dev": "env-cmd -f .env.electron concurrently \"craco start --config craco.config.js\" \"wait-on http://localhost:3000 && electron public/electron.js",.
It would simply wait until port 3000 woke up and then start Electron.

My env.electron on both projects looks like this:

REACT_APP_NAME=PrestigeElec
REACT_APP_MODE=electron
BROWSER=none
SKIP_PREFLIGHT_CHECK=true

On my new app, I'm using

"electron-dev3": "env-cmd -f .env.electron concurrently \"craco start --config craco.config.js\" \"wait-on http://localhost:3000 && electron public/electron.js",

Initially, I was getting the deprecation warnings shown here:
facebook/create-react-app#11860
I understand that these are warnings from react-scripts and not errors, but they cause the wait-on to never trigger.
I used this post:
facebook/create-react-app#11860 (comment)
and this post:
facebook/create-react-app#12035 (comment)
to resolve/hide the warnings (along with testing CRACO 7.0.0, 7.0.0-alpha.3 and 7.0.0-alpha.5`.

Unfortunately, wait-on still never triggered, and I didn't know why. It just sat and waited indefinitely after the server was running until I crashed it:

C:\Github\prestigenext>yarn electron-dev
yarn run v1.22.19
$ env-cmd -f .env.electron concurrently "craco start --config craco.config.js" "wait-on http://localhost:3000 && electron public/electron.js
[0] Starting the development server...
[0]
[0] Compiled successfully!
[0]
[0] You can now view prestige in the browser.
[0]
[0]   Local:            http://localhost:3000
[0]   On Your Network:  http://192.168.8.165:3000
[0]
[0] Note that the development build is not optimized.
[0] To create a production build, use yarn build.
[0]
[0] webpack compiled successfully
[0] No issues found.

C:\Github\prestigenext>[1] ^C^CTerminate batch job (Y/N)? Terminate batch job (Y/N)? craco start --config craco.config.js exited with code 1
[1] wait-on tcp:3000 && electron public/electron.js exited with code 1

Finally, after writing all this, I tested with my local IP address instead of localhost, and wait-on worked. Then I found this post that offers the workaround of http://127.0.0.1:3000 .
https://stackoverflow.com/questions/74448801/react-stuck-at-wait-on-at-localhost3000

What should happen
Once the deprecation bug is solved with react-scripts, CRACO should probably be updated so that we don't need the devServer workaround.

To reproduce

  1. CREATE a CRA app with CRACO.
  2. Try to start it, and get the deprecation error.

CRACO version
CRACO 7.0.0, 7.0.0-alpha.3 and 7.0.0-alpha.5`.

CRACO config

const fs = require("fs");
const NodePolyfillPlugin = require("node-polyfill-webpack-plugin");
const evalSourceMap = require("react-dev-utils/evalSourceMapMiddleware");
const redirectServedPath = require("react-dev-utils/redirectServedPathMiddleware");
const noopServiceWorker = require("react-dev-utils/noopServiceWorkerMiddleware");
module.exports = {
  webpack: {
    plugins: {
      add: [
        new NodePolyfillPlugin({
          excludeAliases: ["console"],
        }),
      ],
    },
  },
  devServer: (devServerConfig, { env, paths }) => {
    devServerConfig = {
      onBeforeSetupMiddleware: undefined,
      onAfterSetupMiddleware: undefined,
      setupMiddlewares: (middlewares, devServer) => {
        if (!devServer) {
          throw new Error("webpack-dev-server is not defined");
        }
        if (fs.existsSync(paths.proxySetup)) {
          require(paths.proxySetup)(devServer.app);
        }
        middlewares.push(
          evalSourceMap(devServer),
          redirectServedPath(paths.publicUrlOrPath),
          noopServiceWorker(paths.publicUrlOrPath)
        );
        return middlewares;
      },
    };
    return devServerConfig;
  },
};

package.json

{
  "name": "prestige",
  "version": "0.4.0",
  "main": "public/electron.js",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "@types/jest": "^27.5.2",
    "@types/node": "^16.18.12",
    "@types/react": "^18.0.28",
    "@types/react-dom": "^18.0.11",
    "concurrently": "^7.6.0",
    "cross-env": "^7.0.3",
    "electron": "^23.1.1",
    "electron-is-dev": "^2.0.0",
    "env-cmd": "^10.1.0",
    "node-polyfill-webpack-plugin": "^2.0.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "sleep": "^6.3.0",
    "typescript": "^4.9.5",
    "wait-on": "^7.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "electron-dev": "env-cmd -f .env.electron concurrently \"craco start --config craco.config.js\" \"wait-on http://127.0.0.1:3000 && electron ."
    
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@craco/craco": "^7.0.0-alpha.5"
  }
}

Additional information
I realize that this is a sticky incompatibility between CRACO and CRA (with an open issue).

@MattGyverLee MattGyverLee added the bug Something isn't working label Feb 24, 2023
@MattGyverLee MattGyverLee changed the title Craco+Electron+wait-on fails to trigger because of Deprecation warning in CRA. Craco+CRA strows middleware deprecation warnings from CRA. Feb 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant