nrwl / nx

Smart Monorepos · Fast CI
https://nx.dev
MIT License
23.63k stars 2.36k forks source link

Nx 10 Plans #2152

Closed vsavkin closed 4 years ago

vsavkin commented 4 years ago

Nx 10 Plans

Nx 8 => Nx 9

Nx 8 to Nx 9 was a great release. These are some of the highlights.

Generic Tool

We always wanted Nx to be the tool that helps teams using different stack work together, share code, etc.. That's why a big focus of Nx 9 was to make it a great tool for many ecosystems.

Two Modes

Nx now works in two modes: standalone or as an extension to the Angular CLI. Nx will automatically select the right mode based on the preset you provided.

- `nx create-nx-workspace --preset=react` will use the standalone mode
- `nx create-nx-workspace --preset=angular` will use Angular CLI
- `nx create-nx-workspace --preset=angular --cli=nx` will use the standalone more with an Angular project

React Support

We put a lot of work into making the React story robust. We added support for publishable React libries, support for Next.JS etc.. You can read more about it at https://blog.nrwl.io/react/home.

We also published a free book on building monorepos with React and launched a React version of nx.dev.

Supporting Design Systems

Nx has always been a great tool for design systems. You can develop components, test them, document them, use them in a variety of projects. When you change a component, you can run a test against that component and then test all the applications using that component.

This remains our focus. Last month we released Storybook support, which works both for Angular and React projects.

Nx Course

Check out the free course even if you are already an Nx user.

Bazel Support

It took us a bit longer to get started, but we are making good progress here. We are working with the Bazel folks to add support to Nx. I hope to get the first beta out by XMas, but it's probably be around Old New Year (it's a thing. look it up :) ). The good thing about our new approach to Bazel is that you can add or remove it with ease. This means that you can start without Bazel and only add it when you feel like it's justified.

Nx 10

This is our plan for the next 6 months.

Stability

Nx 7 -> Nx 9 came with a lot of new capabilities. It's time to solidify what we have and tie up loose ends. We are in the process of cleaning up the internals of Nx to make the model more sound.

Smarter Affected

A large monorepo can have projects written in different frameworks. For instance, you can have one app written in React and another one written in Angular. Currently, if you change the version of say Angular, Nx will retest and rebuild both the apps (and their corresponding libs).

Nx 10 will be able to understand what projects are affected by your changing package.json. Most of it will be done automatically, by using advanced code analysis, but we will give you a way to manually configure it as well.

Computation Caching

If someone on your team already ran a similar command, Nx will be able to use their results to drastically speed up the command for everyone else. Support for computation caching is already available for Nx 8.12 and Nx 9 users, but it's not "on" by default.

Distributed CI

In Nx 9 we introduced print-affected and run-many to make more complex CI setups straightforward. See the Azure DevOps example here. More examples are coming in in the next 6 months.

Bazel Support

A lot of it depends on the progress the Bazel team makes, but we will do our best to add Bazel support.

Mixing Monorepo and Polyrepo Development

Nx provides great ergonomics for developing projects within the same monorepo. Publishing packages to artifactory from the monorepo, and then consuming them in the monorepo, although possible, can be a bit tricky. For smaller companies it may not matter as much, but it's a big deal for larger enterprises. This is one of the things we are going to address first in 2020.

Ecosystem

We have added nx list to help you discover what Nx plugins are available and how to install them. Currently, all of them are plugins maintained by the Nx core team. We see interesting plugins being developed the community. We will provide more documentation on how to do it, help folks get started, and integrate them into nx list.

RamaneekGill commented 4 years ago

Great update!

I have two questions:

Having nx be the tool of choice for supporting monorepo for any language can also help teams who are currently using Bazel adopt this tool to reduce existing overhead.

KostasDimakis commented 4 years ago

Cheers for the amazing work you do over at nrwl.

As far as supporting more tech stacks are there any plans of supporting gatsby and firebase functions. Also, I don't think that's only me but I couldn't figure out how to integrate a service-worker (workbox) using your version of create-react-app and the build tool it's using.

dsebastien commented 4 years ago

I see that Nx currently scaffolds an @angular/pwa service worker by default for Angular projects. Would it be possible to make that optional and to support workbox instead (e.g., behind some flag)?

tommck commented 4 years ago

I'm a bit confused.. how can we tell what version of nx we have? I check locally and I see that nx is 0.8.9, so... 9.x?

alvarosabu commented 4 years ago

There is a open issue regarding Vue support here --> https://github.com/nrwl/nx/issues/1541 , any plan for next releases ?

atifsyedali commented 4 years ago

Is there early access to plugin API? I would love to move my create-react-app Nx builder and distributed cache task runner as a plugin (see https://github.com/apployees/apployees-nx) and help test drive the effort.

@KostasDimakis @dsebastien my https://npm.org/@apployees-nx/webserver Nx builder has support for service workers, ported over from create-react-app. Create a new app with it and it will setup an example. See https://github.com/Apployees/apployees-nx/blob/master/README.md#webserver----apployees-nxwebserver

nickroberts commented 4 years ago

I would love to see first class Gatsby support, as well. In the meantime, I thought about just creating a React workspace, manually setting up a few Gatsby apps in side the apps folder, then I can create shared libraries that I can use for those Gatsby applications.

I'm currently using Lerna with my Gatsby projects, but I love using nx with Angular, so keep up the great work!

xavierclotet commented 4 years ago

And would it be posible the support of Scully ?

beeman commented 4 years ago

It would be great if there was support for Cloud Functions as suggested in this issue. From looking at the PoC linked in the last comment it should be fairly straightforward to implement a working builder for this.

JoelCode commented 4 years ago

App Composition with Microservice

Add Microservice to NX

Solution with Google Cloud Functions

Google Cloud Functions Generator Generate a Google Cloud Function within a Nx workspace with dev tools:

I took Nx development strategy for front-end components & applied it to back-end microservices (Google Cloud Functions). With my plugin, I can create & deploy production-ready microservices in 5 minutes. I then combine my microservices to develop a business automation strategy, business analytics, or data streaming pipeline.

GitHub Repository

CodeByKwakes commented 4 years ago

@vsavkin is there any chance of independent app/lib semver and changelog like lerna in the next nx version

georgiee commented 4 years ago

Do you have some kind of roadmap/plans for Nx 10? I'm asking because my expectations might have been wrong so far. I assumed Nx Workspace is pretty quick with keeping up the versions with Angular's pace of releases. People love Nx but the same people would love to upgrade to the latest Angular release either to pick up new features or just get the update done for other things down the pipeline. There are usually beta & rc phases that should allow Nx Workspace to be ready for the Angular release day.


Those are only my expectations and there are no hidden hard feelings. I just wonder if you have some general plan for keeping up with Angular? I could not find any particular branch or pending PR that points to a particular Nx 10 release. There is not even a dedicate issue to describe the progress or problems.

Is there an opportunity to let the community support you? Can you give any insights?

beeman commented 4 years ago

@georgiee in the Nx 9 Plans topic Victor told us that they'd stop syncing to Angular releases in 2020. In the community Slack one of the team members said 'we’re about to release nx v10'.

I needed Angular 10 in one of my projects so I updated manually, in my case it was a matter of updating the deps to get it to a working state.

With that being said, this pr shows that the Nx 9 -> Nx 10 migration will change quite a few bits to cleanly update the workspace so probably better to wait.

georgiee commented 4 years ago

Thank you @beeman for linking those findings, very much appreciated.

I usually update minor versions of Angular without any hesitations during our houskeeping cycles, but a major Angular upgrade is always a delicate thing even though this v10 release is usually described with few breaking changes (Reference https://github.com/angular/angular/blob/master/CHANGELOG.md#1000-2020-06-24). The fact that you had success with the upgrade speaks for the Angular releases, the way Nx sits on top of it and of course for your very own project. I still fear side effects that will catch our team after the upgrade and spotted some early adaptor with issues already (https://github.com/nrwl/nx/issues/3232). So yes, better wait for the Nx v10 release instead of doing a manual upgrade.

The fact that Nx isn't bound to the Angular release cycle anymore explains why there is no release yet. This matches very well with my understanding that Nx is growing to a workspace tool far beyond Angular with the available support of React & friends. Does this also mean the given Nx version isn't an indication of the Angular version in the future? Will there be a major bump for every new framework release then?

A few words from the Nx maintainers on the release management or even roadmap of Nx would help a lot and would create (even more) confidence in Nx 🙏 I always hoped for Nx to stay Angular-centric and I wonder how to handle the lack of any release schedule for Nx vs. Angular. Will releases just come when the time is right? This makes planning for it difficult. In the past months it was a big success to convince people in our enterprise environment to follow the Angular release schedule instead of staying in the comfort zone of past releases. I would love to preserve some of the momentum that a new Angular release creates.

I'm optimistic Nx can hold up with Angular release in a sensible way. Let's continue waiting for Nx v10 then.

vsavkin commented 4 years ago

This is an Nx 10 beta: https://www.npmjs.com/package/@nrwl/workspace/v/10.0.0-beta.0. It works with Angular 10. Our plan is to cut an RC this week, and hopefully a final version next week.

nickroberts commented 4 years ago

Any update on the status?

We are going to start a new project next week, and I would love to start fresh with the latest version of Nx, as it really is nice.

I have a current project which has been updated to Angular 10, and I modified a couple things to get it to work. I need to update that project as well. I thought about testing out the beta build, but we are nearing a milestone, and I don't want to break anything.

Thanks again for all of your hard work!

viceice commented 4 years ago

It's released 🥳

https://www.npmjs.com/package/@nrwl/workspace

kevinbeal commented 4 years ago

I don't see any indication of bazel being supported. The nx add command certainly doesn't work. Is this pushed back to Nx 11?

jaysoo commented 4 years ago

Closing this since 10 has been release. Please see Nx 11 plans here https://github.com/nrwl/nx/issues/3377.

github-actions[bot] commented 1 year ago

This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context.