如何解决require(“../../../../../../../”)挫折在NodeJS中?

在node.js中解决这类问题有什么更好的方法?

import foo from "../../../modules/home/models/index.js" import bar from "../../../modules/about/models/index.js" import baz from "../../../modules/contact/models/index.js" 

至less把它们变成这样的东西?

 import foo from "/home/models/index.js" import bar from "/about/models/index.js" import baz from "/contact/models/index.js" 

有任何想法吗?

你需要反转控制。

./modules/home/index.js

  const homeModel1 = () => { //... } const homeModel2 = () => { //... } module.exports = Object.assign({}, { homeModel1, homeModel2 }) 

1.一个对象将被导出为如下形状:

  { homeModel1: () => {}, homeModel2: () => {} } 

2.添加新模型时,只需将其添加或导入到该文件,然后将其添加到导出对象。

./modules/index.js

  import { homeModels } from './modules/home' import { aboutModels } from './modules/about' import { contactModels } from './modules/contact' module.exports = Object.assign({}, { homeModels, aboutModels, contactModels }) 
  1. 模型被解构出来,然后作为方法导出到一个新的对象上。
  2. 同样,相同的形状对象与所有你的模型一起培养出来,带来他们所有的依赖。

别的地方

  import modules from './modules' const query = modules.homeModels.homeModel1() 

奖金:为了说明, Object.assign({}, obj1, obj2)创build了一个新的对象,原型设置为Object原型,并合并了obj1和obj2的属性和方法。 在这个简单的forms中,它基本上与const obj = {}

更高级的是Object.assign({}, { obj1, obj2 }) ,它使新的对象上的obj1和obj2属性。 你可以做一些简单的testing来感受数据结构。

我们也使用了一些解构。 如果您遇到问题需要排队,那么您应该查看这些方面以及如何将它们导入到文件中。 例如, import obj1 from './modules'会将整个对象从./modules中取出,但是import { obj1 } from './modules'取入的对象中解构obj1,所以obj1是一个方法/物体的属性。

对控制和dependency injection的反演做一些研究。