cli icon indicating copy to clipboard operation
cli copied to clipboard

manage project structure with CLI

Open pi0 opened this issue 3 years ago • 4 comments

This is a superset of nuxt/nuxt.js#13552 and a requirement of devtools vision.

Nuxt heavily depends on filesystem structure to configure project. As a result, we introduce filesystem entities such as pages, components, composables and plugins.

However, it is not easy to manage such entities. Creating a page, see what components are scanned, what plugins are available, what pages are there and mapped to which routes, etc.

The idea is to expose entity namespaces from nuxi cli to manage these. Some examples:

nuxi pages add <name>
nuxi pages show
nuxi pages update /blog/* --meta title="Blog:"

nuxi plugins add <name>
nuxi plugins show
nuxi plugins disable <name>

nuxi composables show

Related: nuxi module * (https://github.com/nuxt/framework/discussions/569)

By exposing this functionality from CLI (and later an API service), they can be used both for CLI lovers and also nuxt devtools to easily manage entities without duplicating logic.

Roadmap:

  • [ ] Scaffold shortcuts for nuxi add <template> <name> as nuxi <template> add <name>
  • [ ] Implement show for each
  • [ ] Update utilities - penging unjs template (@pi0) (meanwhile ideas welcome)
  • [ ] Wait for devtools to share vision and next steps

Entities we can start with:

  • [ ] component
  • [ ] composable
  • [ ] layout
  • [ ] middleware
  • [ ] page
  • [ ] plugin
  • [ ] api

pi0 avatar Mar 25 '22 14:03 pi0

One note for shortcuts: api and middleware won't take an s (nuxi middleware add auth).

I really like the idea, how and where would you see the implementation?

atinux avatar Mar 25 '22 15:03 atinux

One note for shortcuts: api and middleware won't take an s (nuxi middleware add auth).

indeed :) Update generic comment

how and where would you see the implementation?

Nothing is stopping to implement shortcuts for <entity> add and then <entity> show commands. We can have a new nuxi subcommand for each entity like nuxi/src/commands/pages.ts and a utility as nuxi/src/entity/pages.ts that holds implementation.

Next step, we need a proper utility from unjs, especially for modifications and properly test it before using it in cli. In the meantime, ideas more than welcome about what updates we could imagine. For me, could imagine adding static page meta and rename (apart from config modification. it is out of scope)

The rest needs a poc of devtools and CLI api service.

pi0 avatar Mar 25 '22 15:03 pi0

@pi0 @Atinux I'll begin working on the underlying implementation for entity shortcuts nuxi <entity> <add/show>

The unjs templating util will be an integral part of way forward ( ie: proper testing and extension ) so it'll be interesting to see how we can best construct a robust solution!

Diizzayy avatar Mar 25 '22 15:03 Diizzayy

Do you think it would be possible to add a custom template system? For example add this in the Nuxt config:

templates : {
  custom: {
    dir: <target dir>,
    file: <template file>  // or take a file with the same name in a new templates directory
  }
}

and then run nuxi add custom MyCustom

mlcsthor avatar Mar 27 '22 18:03 mlcsthor