var bar=require('myModule')和only require(#39;myModul

What is the difference between var bar = require('myModule') and only require('myModule')?

本文关键字:require only myModul bar var myModule      更新时间:2023-09-26

我看到在一些项目中,它使用了常见的

var myModule = require('myModule');

但在其他一些情况下,它被使用类似于:

require('myModule');

这两者有什么区别?

一个将模块分配给变量,另一个只需要它。两个都加载并运行脚本。

使用require('foo'),您需要模块并加载入口点脚本。当模块第一次加载时,这将评估该脚本中的任何静态代码。您无法访问任何导出,以后引用模块时也不需要再次引用。

var bar = require('foo')的行为类似,只是它保留了对导出的引用,并允许您以后使用它们。

当"模块"实际上是某种其他类型的资源(如CSS文件),并且require运行一些代码将该CSS加载到当前页面时,经常会看到无分配的require表单。在常见的JS模块中,在没有任何初始化代码的情况下,require without assign表单将预加载模块,但几乎不执行其他操作。

以这样的模块为例

let connection = new ServerConnection();
export default class Connection {
  static getConnection() {
    return connection;
  }
}

require without assign表单将加载脚本、运行脚本并创建连接。你将无法使用它,但它将存在。

带有assign表单的require将加载、运行、创建并提供引用。您将能够呼叫bar.getConnection()并访问该连接。

在上面的例子中,如果您在没有分配的情况下使用require,您将无法访问该连接,也永远无法关闭它,这可能是一个问题。