Node.js中无法require文件夹问题求助(含generic-rest-api使用背景)
解决Node.js中require文件夹失败的问题
嘿,我太懂你这种困惑了——明明require('./cfg/config.js')能正常跑,换成require('./cfg')就直接报错,对吧?这其实是Node.js模块加载的规则在“搞事情”,我给你拆解明白:
Node.js加载文件夹模块的底层逻辑
当你用require引用一个文件夹时,Node.js会按这个顺序找入口:
- 先找文件夹里的
index.js(如果是ES模块的话会找index.mjs/index.cjs,取决于你的项目配置) - 要是没找到index文件,就去读文件夹里的
package.json,看里面main字段指定的是哪个文件 - 这俩都没有的话,就会抛出你碰到的加载失败错误
你的cfg文件夹里只有config.js,完全不符合上面的任一条件,Node.js根本不知道该加载哪个文件,可不就报错嘛!
针对你情况的3种解决方案
挑个顺手的用就行:
把文件重命名为index.js
直接把cfg/config.js改名为cfg/index.js,之后require('./cfg')就会自动加载这个文件,效果和你之前直接引用单个文件一模一样。给文件夹加个package.json指定入口
在cfg文件夹里新建一个package.json,内容就这么一行:{ "main": "config.js" }这样Node.js就明确知道,加载这个文件夹时要找
config.js了。继续直接引用单个文件(如果不纠结文件夹写法的话)
要是你只是临时用用,也可以接着写require('./cfg/config.js'),这个写法本身完全没问题,只是少了点“优雅感”而已。
补充下generic-rest-api示例的逻辑
你提到的generic-rest-api示例里能直接require文件夹,那说明这个包的文件夹里肯定有index.js,或者配置了package.json的main字段,所以才能直接用文件夹路径引用哒。
内容的提问来源于stack exchange,提问作者Martin Thompson
相关产品推荐
相关产品推荐

