我是一个长期LAMP开发人员,并且习惯在需要时使用autoloader加载类,但直到那时才开始,但现在正在学习Node.js。许多示例显示了加载所有文件的文件夹中的index.js文件。
例如:模型
--- CarModel.js
--- TruckModel.js
--- MotorcylceModel.js
--- index.js - this file includes all the models in the folder.
在我的代码中,我使用
const {CarModel} = require('./index');
这是首选方法吗?
如果是,为什么?
为什么不使用自动装载机,只在需要的时候加载文件呢?
我在网上搜索,但没有找到任何明确解释这一点的东西。如果你有一篇文章对你有帮助,我将不胜感激。
您不会使用自动装入器,因为没有自动装入器--这与PHP中完全不同。在PHP中,有一个全局符号表--一个类名意味着什么,不管它用在什么地方。因此,如果调用类CarModel,则可以全局引用该名称。当您通过名称引用它时,自动装入器可以定位该文件。这是由PSR-4(自动装入器)辅助的,它根据类文件的命名空间和名称指定在哪里找到类文件。
在JavaScript中,情况并非如此。有一个全局对象(node.js中的global
,浏览器中的window
),但结构--函数、类等--不是全局的,与它无关。例如,当require()
具有类实现的文件时,实际上是在创建一个包含该文件的exports
值的变量。所以:
还有一个相反的论点:如果可以预加载,为什么还要延迟加载文件呢?与PHP应用程序不同,Node.js进程通常是长时间运行的,因此启动阶段需要多少就需要多少--因为这样您就会一直使用已经加载的代码,而不是在用户尝试执行新操作时进行昂贵的文件系统调用。