这种导出文件的方法是不是正确?

Posted

技术标签:

【中文标题】这种导出文件的方法是不是正确?【英文标题】:Is this method for exporting files is correct?这种导出文件的方法是否正确? 【发布时间】:2018-01-18 14:07:45 【问题描述】:

你好你怎么看这种方式,导入我所有以Handler.js结尾的文件(目录),然后全部导出

Screen of the folder where the files are

index.js:

const join = require('path')
const readdirSync, readFileSync, lstatSync = require('fs')

const handlersPath = readdirSync(__dirname)
  .filter(fileName => /Handler.(js)$/.test(fileName))
  .filter(fileName => !lstatSync(fileName).isDirectory())
  
for (const handlerPath of handlersPath)
	const handlerName = /^(.*?)\Handler.js/.exec(handlerPath)[1]
	exports[handlerName] = require(join(__dirname, handlerPath))

【问题讨论】:

但是为什么呢?我的意思是,你真的懒得不一一要求,就在需要的时候?但无论如何,这个问题太笼统了。如果它不产生错误,那么是的,它是正确的......?它会产生想要的行为吗?如果不是,请解释。 不,我一点也不懒 使用sync 函数是一种反模式。它阻止所有异步功能。 nodejs.org/en/docs/guides/blocking-vs-non-blocking index.js 文件是一次导入器,并且仅在启动时(服务器初始化) @Adam yer,但在这个用例中,这似乎是正确的做法。 【参考方案1】:

const join = require('path')
const readdir, lstat = require('fs')

readdir(__dirname, (error, files) => 

	if (error) throw error
	
	for (const fileName of files)
		
       if (!/Handler.(js)$/.test(fileName)) continue ;
	   
	   lstat(fileName, (error, stats) => 
         
   	     if (error) throw error
		 if (stats.isDirectory()) return ;
		 
		 const handlerName = /^(.*?)\Handler.js/.exec(fileName)[1]
		 exports[handlerName] = require(join(__dirname, fileName))
		 
	   )
	
)

像这样完全异步吗?

【讨论】:

最好是全部加载完毕再继续回调还是直接导入?

以上是关于这种导出文件的方法是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

PHP导入导出Excel方法小结

cksum可以判断文件是不是一致吗?

这种重新分配方法是不是正确[重复]

C++ - 导出 C++ 库公共部分的正确方法

共享内存实现上的 C++ 内存池:这种分配和释放方法是不是正确?

即使在 React 中正确导入后也不包含默认导出