3
I am working on a nuxt/Vue.js project and applying the Atomic design methodology, so I will have many components, in different folders, example:
├── components
│ ├── quarks
│ │ └── ...
│ ├── bosons
│ │ └── GridLayout.vue
│ │ └── ...
│ ├── atoms
│ │ └── ButtonStyle.vue
│ │ └── InputStyle.vue
│ │ └── ...
│ ├── molecules
│ │ └── ...
│ ├── organisms
│ │ └── ...
│ ├── templates
│ │ └── ...
└─────
i would like to make named imports, example:
import { ButtonStyle, InputStyle } from '@/components/atoms/'
but for this to work I would need to have an index.js inside each folder exporting component by component, for example
├── components
│ ├── atoms
│ │ └── ButtonStyle.vue
│ │ └── InputStyle.vue
│ │ └── index.js
└─────
and in the index.js
export { default as ButtonStyled } from './ButtonStyled.vue'
export { default as InputStyle } from './InputStyle.vue'
then everything works!
But doing this job manually can be a very tiring task... Every time you create, delete, rename a component, you would have to update the index.js
of your respective folder.
So I think about doing this export dynamically.
I thought of creating a Webpack Plugin and using the Hooks to run some script at each build (que acontece quando um arquivo é alterado)
do this job of sweeping folders inside components
and generate a index.js
pra cada pasta
exporting the components.
But I have no idea how to make this script..
someone could help me?
Thank you in advance!
Why don’t you stop creating this file
index
? Just import directly from the file... If you are losing productivity, I see no reason to bother doing something like this. PS: My opinion.– Luiz Felipe
@Luizfelipe, I intend to improve in Atomic Design, for this type of architecture that has many components and many imports, it would be interesting a syntax lean at the time of making imports, because it would imports grouped by type of Component, the objective is refactoring and legibility.
– Yung Silva
I think what you want is an CLI type of Angular, there you have the command
ng g c
which creates a component and has an option where you can specify a template package (by default it uses Angular’s own, but you can put yours), do not know if Vue has a CLI, if not, can do a– Costamilam