【问题标题】:Node.js module require dependency issueNode.js 模块需要依赖问题
【发布时间】:2016-07-20 17:04:26
【问题描述】:

我有一个简单的 Node.js 驱动的自定义静态站点生成器设置,我向它传递了两个选项,一个简单的模板和一些用于站点数据的 JSON。我有以下数据文件:

// collections.js

var collection = require('./collection');

module.exports = [
  collection
]


// collection.js

var product = require('./product');

module.exports = {
  "id": 1,
  "title": "Collection",
  "products": [
    product
  ]
}


// product.js

var collections = require('./collections');

module.exports = {
  "id": 4759071046,
  "title": "Product",
  "collections": collections,
  "price": 2000,
  "content": "This is a test product."
};

编辑:这不是一个包含多个module.exports 的大文件,它们是单独的文件;当你看到// collections.js时,这表示它是一个名为collections.js的单独文件,当你看到// collection.js时,这表示它是一个名为collection.js的单独文件,当你看到// product.js时,这表示它是一个名为 product.js 的单独文件

我对通过​​require() 加载模块很陌生,所以我认为我在某处发生了某种依赖循环错误,但我没有收到任何错误,只是当我console.log() 数据时数据结构不正确:

// collections.js

[  
   {  
      "id": 1,
      "title": "Collection",
      "products": [  
         {  

         }
      ]
   }
]


// collection.js

{  
  "id": 1,
  "title": "Collection",
  "products": [  
     {  

     }
  ]
}


// product.js

{  
   "id": 4759071046,
   "title": "Product",
   "collections": [  
      {  
         "id": 1,
         "title": "Collection",
         "products": [  
            {  

            }
         ]
      }
   ],
   "price": 2000,
   "content": "This is a test product."
}

注意到空的products 对象数组了吗?我不知道为什么会这样,任何帮助将不胜感激!

【问题讨论】:

  • 是的,这里肯定有循环依赖。为什么要使用这种奇怪的对象布局?
  • 这里有一个循环依赖。产品需要集合,集合需要集合,集合需要产品等等。弄清楚你的顶级对象应该是什么,然后它应该包含什么。

标签: javascript node.js object require javascript-objects


【解决方案1】:

如果您从命令行运行“节点集合”,这将执行 collections.js 文件中的代码。 (假设你在同一个目录中)

当 node 看到类似 var collection = require('./someFile') 的东西时,它会执行 someFile 中的代码。如果 someFile 有 require 语句,node 将执行包含在该文件中的代码,该文件在该 require 语句中传递。

如下所述,对于每个需要的文件,此过程都会发生一次,因此即使您不使用导入的对象,也要考虑到这一点。

【讨论】:

  • 它不会永远持续下去,因为node只需要每个模块一次,但它也不会返回预期值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 2015-11-25
  • 2012-04-01
  • 1970-01-01
  • 2018-09-24
  • 2019-09-17
相关资源
最近更新 更多