facebook / create-react-app

Set up a modern web app by running one command.
https://create-react-app.dev
MIT License
102.69k stars 26.84k forks source link

Cannot use CRA to create a new yarn workspace/package #3405

Closed mattfysh closed 6 years ago

mattfysh commented 6 years ago

Is this a bug report?

Yes

Can you also reproduce the problem with npm 4.x?

No

Which terms did you search for in User Guide?

Environment

  1. node -v: v8.7.0
  2. npm -v: 5.5.1
  3. yarn --version (if you use Yarn): 1.2.1
  4. npm ls react-scripts (if you haven’t ejected): N/A (happens on init)

Then, specify:

  1. Operating system: macOS Sierra v10.12.6
  2. Browser and version (if relevant):

Steps to Reproduce

(Write your steps here:)

  1. mkdir cra-issue && cd cra-issue
  2. create a package.json using this:
    {
    "private": true,
    "workspaces": [
      "packages/*"
    ],
    "devDependencies": {
      "husky": "^0.14.3"
    }
    }
  3. yarn
  4. create-react-app packages/app-a

Expected Behavior

A new CRA application to be initialized under packages/app-a

Actual Behavior

...
Aborting installation.
  Unexpected error. Please report it as a bug:
  { Error: Cannot find module '/Users/cra/Projects/sandbox/repro/packages/workspace-a/node_modules/react-scripts/package.json'
      at Function.Module._resolveFilename (module.js:527:15)
      at Function.Module._load (module.js:476:23)
      at Module.require (module.js:568:17)
      at require (internal/module.js:11:18)
      at checkNodeVersion (/Users/cra/.config/yarn/global/node_modules/create-react-app/createReactApp.js:488:23)
      at getPackageName.then.then.then.packageName (/Users/cra/.config/yarn/global/node_modules/create-react-app/createReactApp.js:295:7)
      at <anonymous>
      at process._tickCallback (internal/process/next_tick.js:188:7) code: 'MODULE_NOT_FOUND' }

  Deleting generated file... node_modules
  Deleting generated file... package.json
  Deleting workspace-a / from /Users/cra/Projects/sandbox/repro/packages
  Done.

Reproducible Demo

Use steps above

gaearon commented 6 years ago

Yea, we should really figure out a Workspaces integration. Also as a solution to the "absolute imports" problem.

mattfysh commented 6 years ago

@gaearon I tried to use require.resolve within the current path.resolve but couldn't get it working... granted I only had a couple of minutes to try, so I may not have used it right... feels like it should be an easy fix though - to get the script to use node's require resolution algorithm.

PS. Thanks for the quick reply! 🚀

dariocravero commented 6 years ago

In case anyone is stuck with this and until the different issues are fixed, I made a little guide on how to use yarn workspaces with Create React App and Create React Native App (Expo) to share common code across. Hope you find it handy! https://learn.viewsdx.com/how-to-use-yarn-workspaces-with-create-react-app-and-create-react-native-app-expo-to-share-common-ea27bc4bad62 https://medium.com/viewsdx/how-to-use-yarn-workspaces-with-create-react-app-and-create-react-native-app-expo-to-share-common-ea27bc4bad62

mattfysh commented 6 years ago

@dariocravero - thats the workaround I've gone with, creating in a tmp location and copying into the yarn workspaces structure. In addition to removing node_modules, you may want to also remove yarn.lock as I believe with workspaces all package locks are managed in the top-level lockfile? I could be mistaken though, I came to this conclusion when running yarn outdated in the repo root and having outdated dependencies inside nested packages appearing in the output. @gaearon - does that sound right?

dariocravero commented 6 years ago

That's a good point @mattfysh, thanks! Updated the guide :)

gaearon commented 6 years ago

Seems like a duplicate of https://github.com/facebookincubator/create-react-app/issues/3031.