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

时间:2017-08-25 15:55:14

标签: node.js import ecmascript-6

在下面的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"

至少让它们成为这样的东西?

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

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你需要反转控制。

  

./模块/家/ index.js

 const homeModel1 = () => {
     //...
 }
 const homeModel2 = () => {
     //...
 }

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

1。将导出以下形状的对象:

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

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

  

./模块/ 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. 同样地,导出相同的形状对象,将所有模型组合在一起,将所有模型与它们结合起来。
  3.   

    其他地方

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

    加成: 为了澄清,Object.assign({}, obj1, obj2)创建了一个新对象,其原型设置为Object原型,并合并了obj1和obj2的属性和方法。在这个简单的形式中,它与const obj = {}基本相同。

    更高级,是Object.assign({}, { obj1, obj2 }),它在新对象上生成obj1和obj2属性。您可以进行一些简单的测试,以了解数据结构。

    我们也使用了一些解构。如果您在正确排列问题时遇到问题,则应该查看这些方面以及如何将它们导入文件。例如,import obj1 from './modules'将从./modules中引入整个对象,但import { obj1 } from './modules'将从它所引入的对象中解构obj1,因此obj1是对象的方法/属性。

    对控制和依赖注入的反演进行一些研究。