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

Allow TypeScript 5+ in peerDependencies #13071

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

karlhorky
Copy link

@karlhorky karlhorky commented Mar 17, 2023

Now that TypeScript 5 was released (specifically, typescript@5.0.2), it would be great to get the restriction on the version of TypeScript removed.

Otherwise npm will throw errors like this, when resolving peer dependencies:

CodeSandbox demo (run npm i in a terminal to get the error below): https://codesandbox.io/p/sandbox/react-scripts-5-0-1-typescript-5-0-2-t48wwi

$ npm i
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR! 
npm ERR! While resolving: react-scripts@5.0.1
npm ERR! Found: typescript@5.0.2
npm ERR! node_modules/typescript
npm ERR!   dev typescript@"5.0.2" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peerOptional typescript@"^3.2.1 || ^4" from react-scripts@5.0.1
npm ERR! node_modules/react-scripts
npm ERR!   react-scripts@"5.0.1" from the root project
npm ERR! 
npm ERR! Conflicting peer dependency: typescript@4.9.5
npm ERR! node_modules/typescript
npm ERR!   peerOptional typescript@"^3.2.1 || ^4" from react-scripts@5.0.1
npm ERR!   node_modules/react-scripts
npm ERR!     react-scripts@"5.0.1" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR! 
npm ERR! See /project/home/karlhorky/.cache/npm/eresolve-report.txt for a full report.

npm ERR! A complete log of this run can be found in:
npm ERR!     /project/home/karlhorky/.cache/npm/_logs/2023-03-17T11_12_53_021Z-debug-0.log

Alternatives considered

I could instead do this if desired, which would then need to be updated again each time TypeScript 6, 7, etc are released:

-    "typescript": "^3.2.1 || ^4"
+    "typescript": "^3.2.1 || ^4 || ^5"

@karlhorky
Copy link
Author

karlhorky commented Mar 17, 2023

cc @ianschmitz @iansu breaking out of the box with latest TypeScript may be enough of a reason to get a new patch release out with this change (eg. react-scripts@5.0.2)

@karlhorky karlhorky changed the title Allow TypeScript 5+ Allow TypeScript 5+ in peerDependencies Mar 17, 2023
rewbs pushed a commit to rewbs/sd-parseq that referenced this pull request Mar 20, 2023
…install react-scripts alongside latest typescript. This can be reverted when facebook/create-react-app#13071 is merged.
vgaidarji added a commit to vgaidarji/react-graphql-playground that referenced this pull request Mar 24, 2023
npm deps installation is used with "--force"
due to existing issue facebook/create-react-app#13071
vgaidarji added a commit to vgaidarji/react-graphql-playground that referenced this pull request Mar 24, 2023
- Added basic integration with GH actions for building and testing the application
-- npm dependencies installation is used with `--force` flag due to existing issue facebook/create-react-app#13071
@mdlkumaran
Copy link

eagerly waiting and checking everyday to see an update on this as this stops from upgrading to the latest typescript v5.0.2. Thanks

@atanf
Copy link

atanf commented Apr 21, 2023

Typescript does not use semantic versioning. The bump from 4.8 to 4.9 is equivalent to the bump of 4.9 to 5.0.

(The current version of Typescript was versioned as 5.0 instead of 4.10 because they never release minor releases with a numeric value greater than 9 and always bump the major version after each x.9 release)

Therefore it makes no sense to have a "^4" version restriction on Typescript.

If this project wants to play it safe, then you should maintain an explicit upper bound ("<= 4.9.*", and then moving forward change it to "<= 5.0.*", and then "<= 5.1.*", and so on, as each newly released Typescript version is tested to work).

If you don't want to play it safe then you should just have the minimal supported version (">= 3.2.1") as implemented in this PR.

The "Alternatives considered" of "^3.2.1 || ^4 || ^5" makes no sense, since future version 6.0 is no more or less likely to break things as future releases: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8 or 5.9.

microsoft/TypeScript#39269
microsoft/TypeScript#14116
https://news.ycombinator.com/item?id=24224975

@xenohunter
Copy link

Bumping it since it's been two months that issue persists, and a month since the last comment.

@himyjan
Copy link

himyjan commented Jun 4, 2023

package.json

"dependencies": {
  "react": "^18.2.0",
  "react-dom": "^18.2.0",
  "react-scripts": "5.0.1",
},
"devDependencies": {
  "@types/react": "^18.2.8",
  "@types/react-dom": "^18.2.4",
  "typescript": "^5.1.3"
},
"overrides": {
  "react-scripts": {
    "typescript": ">3.2.1"
  },
},

@Philipp91
Copy link

Philipp91 commented Aug 7, 2023

It's been another quarter since the last ping here. What's stopping this from being merged? The reasoning is sound, the implementation is correct and simple.

The alternative is for people to stop using react-scripts entirely. (Or put up with the workaround above. But if a project can't merge a simple PR like this in half a year, maybe it's better not to depend on it.)

@karlhorky
Copy link
Author

create-react-app will not be maintained any more and is effectively dead - it will be going away, replaced by a recommendation to use meta-frameworks like Next.js:

@atanf
Copy link

atanf commented Aug 23, 2023

create-react-app will not be maintained any more and is effectively dead

I think it is a bit too premature to declare this project dead.

create-react-app is an open source project with an MIT License. If the current maintainer has decided that they will no longer work on it, then there is still a chance that someone from the community will take over maintainership. This is something that happens all the time in the open source world.

This is a popular project with lots of pull requests and community involvement, leading me to believe that there is a good chance that someone will step up and request to be an official maintainer, or will maintain their own fork that will become the new home for this project.

@karlhorky
Copy link
Author

karlhorky commented Aug 23, 2023

Maybe - however, keep in mind:

  • it is pretty unmaintained since a long time now, with nobody taking on the enormous effort required
  • as noted in Dan's comment, it no longer represents the direction and features of React, so probably will not have large uptake, which will also decline over time

I would suggest taking a look at the new directions of React, which are reflected in metaframeworks like Next.js and Remix. Even if you don't go with React Server Components right away (which I can also highly recommend), you can win a lot from a modern metaframework (which create-react-app is far away from now) - first class routing, better bundling, more efficient forms of data fetching and static generation, the list goes on...

henges added a commit to henges/slskd that referenced this pull request Oct 20, 2023
henges added a commit to henges/slskd that referenced this pull request Oct 20, 2023
@tommy-gilligan
Copy link

please merge

@craigmcc
Copy link

craigmcc commented Feb 1, 2024

Given that there has been no commits on this codebase in pretty close to two years, it seems safe to assume that CRA is dead. The documentation also says it's not the recommended tool to start any new project.

Previous comments on this issue (and other related ones) have included a variety of ways you can override the version declaration in package.json. If you're stuck with a CRA based app, you should probably try one of those ideas (or "eject" the project and deal with all the config files yourself).

For me personally, I'm migrating my projects to Next.JS - which not only supports Typescript 5, but also all the cool stuff from React 18+. And, the ability to use Server Actions completely avoids the need to create a back end server and API (with Express or whatever) simply to serve the needs of my React front end.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

9 participants