如何解决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 })
- 模型被解构出来,然后作为方法导出到一个新的对象上。
- 同样,相同的形状对象与所有你的模型一起培养出来,带来他们所有的依赖。
别的地方
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的反演做一些研究。