Oi Igor! Há uma solução que talvez você goste. Você pode criar um bridge module. É assim que uso em projetos grandes, principalmente nos meus.
Primeiramente, ele não vai remover os ../../..
, mas evita que outros módulos usem o ../../..
.
Vou tentar explicar. Veja a estrutura desse projeto:
├── base
│ ├── index.js
│ └── views
│ ├── errors
│ │ ├── 404.marko
│ │ ├── 404.marko.js
│ │ └── 500.marko
│ ├── footer.marko
│ ├── footer.marko.js
│ ├── header.marko
│ ├── header.marko.js
│ ├── messages.marko
│ └── messages.marko.js
├── index.js
├── main.js
├── post
│ ├── index.js
│ ├── post-controller.js
│ ├── post-routes.js
│ ├── post-service.js
│ ├── post.js
│ └── views
│ ├── form.marko
│ ├── form.marko.js
│ ├── index.js
│ ├── notfound.marko
│ ├── notfound.marko.js
│ ├── post-view.marko
│ ├── post-view.marko.js
│ ├── posts.marko
│ └── posts.marko.js
└── user
├── index.js
└── user.js
Por exemplo, temos o módulo post
. Tudo que diz respeito a post
ficam dentro da pasta post
. Se você olhar dentro dele, há o arquivo index.js
. Todo módulo que possui index.js
pode ser importado apenas apontado para a pasta do módulo, por exemplo:
const module = require('./post');
Agora, que tal olharmos o arquivo index.js
de post
?
const model = require('./post');
const service = require('./post-service');
const routes = require('./post-routes');
module.exports = {
model,
service,
routes
};
Veja que em index.js
eu faço os requires (que poderiam ser com ../../..
, mas quem vai usar esses módulos, só os usa através do bridge. Veja que ele exporta model
, service
e routes
.
Então, quem for usar cada um desses artefatos basta importar:
const module = require('./post'); // ta lendo o index.js dentro de app/post
// module.post
// module.service
// module.routes
Pelo bridge você acessa de maneira elegante cada submodulo de post
.
Pena não ter um projeto público para compartilhar essa estrutura com você. Mas é muito usada nas empresas, principalmente no mundo corporativo.
Sucesso e bom estudo!
OBS: dependendo do template render que você usar, pode importá-los com require, ai fica mais organizado ainda.