Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Include a package for some libs in Nrwl/Nx workspace

It seems like in a Nrwl/Nx workspace there is only a single package.json file. Now if we have multiple applications, each dependent on different packages, then we have to include all of those package in the single package.json file and wouldn't that increase the size of all the apps when they're built? (presumable vendor.js file).

For example if app-1 depends on d3 and app-2 depends on ag-grid libraries, wouldn't both of these libraries be included for both app-1 and app-2 unnecessarily? When the user of app-1 visits the app, ag-grid wouldn't need to be loaded for them.

Am I correct in my understanding or am I missing something? If my assumption is correct, is there a way to solve this?

How about lazy loaded libraries? For instance an "admin" library which is only available to some users (with admin role) may need certain graphing packages, which wouldn't have to be loaded for all the users.

Thank you.

like image 559
Esfandiar Avatar asked Oct 11 '18 13:10

Esfandiar


People also ask

What is NRWL workspace?

The workspace plugin contains executors and generators that are useful for any Nx workspace. It should be present in every Nx workspace and other plugins build on it.

What is NRWL in Angular?

The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: Integration with libraries such as Storybook, Jest, Cypress, Karma, and Protractor.


1 Answers

One of the benefits of using nrwl/nx is the single package.json file. Using a single package.json is great because when you need to upgrade something like rxjs you only have to do it once and your entire codebase it running on the same set of dependencies.

It doesn't effect the size of the compiled code because an app will only include the code it uses thanks to webpack bundling and tree shaking. So there is no risk of D3 showing up in a bundle for an app that doesn't use it. In actuality you could have every npm package listed in your package.json and it wouldn't effect your bundle size.

nrwl/nx is 100% intended to use only one package.json file. Don't try to break it up if you are using nx.

like image 120
mgm87 Avatar answered Sep 28 '22 04:09

mgm87