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

lighter @nuxt/cli for use as direct dependency of nuxt #648

Open
1 of 3 tasks
danielroe opened this issue Jan 8, 2025 · 4 comments
Open
1 of 3 tasks

lighter @nuxt/cli for use as direct dependency of nuxt #648

danielroe opened this issue Jan 8, 2025 · 4 comments

Comments

@danielroe
Copy link
Member

danielroe commented Jan 8, 2025

currently nuxi is a single executable that inlines all its dependencies. this is great. makes a difference in speed when initialising a new app. (it also opens the door to future auto-updating of nuxi, etc.)

but there are also some problems.

  • performance: when added as a dependency of nuxt, which is the main use case for nuxi, this is totally duplicated content as nuxi shares its dependency set with nuxt
  • security: bug fixes in nuxi's dependencies require a new release in nuxi, and in some cases several releases. for example, a bug fix in lib-a might require a new release of lib-b (if it's inlining lib-a as well) and then nuxi would have to bump both dependencies and rerelease

I would like to experiment getting the best of both worlds, by reducing nuxi scope so it is smaller and leaner for the key features it needs, and creating an additional package that does not inline dependencies, which will be used within nuxt

here's the proposed strategy:

Tasks

Preview Give feedback

the last point would entail dropping subcommand dependencies from nuxi that rely on an installed nuxt instance, so e.g. dev command could call the @nuxt/cli installed within the nuxt project, much as we already load kit from that project

this would leave nuxi as a hyper-minimal cli for initialising a project, with its dependencies still inlined, but the nuxi binary that most users would end up using in their project would in fact be provided by @nuxt/cli with the corresponding benefits.

note:

  • users might have manually installed nuxi - they won't benefit from the reduced disk space usage, but there will be no breakage
  • nuxi and @nuxt/cli versions might be different so it will be important for (as much as possible) nuxi to defer to the installed @nuxt/cli for parsing args, etc.

I would welcome feedback from the team + community, in identifying possible issues and figuring out possible solutions for any unforeseen ones.

@danielroe danielroe self-assigned this Jan 8, 2025
@danielroe danielroe changed the title lighter nuxi for use as direct dependency of nuxt lighter @nuxt/cli for use as direct dependency of nuxt Jan 8, 2025
@danielroe danielroe pinned this issue Jan 15, 2025
@fabianwohlfart
Copy link

fabianwohlfart commented Jan 15, 2025

I am using this

const _pkg = 'nuxi';
const { runCommand } = await import(_pkg);

to be clear: I have to change it to const _pkg = '@nuxt/cli';?

@danielroe
Copy link
Member Author

@fabianwohlfart Yes. Or you can continue to import from nuxi - I assume you have it as a dependency of your project ...

@fabianwohlfart
Copy link

fabianwohlfart commented Jan 15, 2025

@fabianwohlfart Yes. Or you can continue to import from nuxi - I assume you have it as a dependency of your project ...

No I don't. Thought it comes with Nuxt anyways, so I never added it separately.

@danielroe
Copy link
Member Author

Even if it's a current dependency of nuxt, you should not rely on implicit dependencies.

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

No branches or pull requests

2 participants