为什么节点使用不需要导入?



我正在学习节点.js并且想知道为什么它使用require语法而不是React使用的import语法。

const Validator = require("validator");

import Validator from "validator";

我相信import是 es6,但我认为这并不能解释为什么它不在节点中使用。

importdefault是较新的ES6功能,尚未被node使用。Node实际上已经实现了新功能作为实验:使用--experimental-modules标志,并且仅适用于以扩展名保存的文件.mjs

像 babel 这样的转译器使得编写现代的、规范批准的和/或实验性的 ECMAScript 成为可能。在像 Webpack 这样的捆绑器生态系统中,像 babel 这样的转译器,编写可维护的、面向未来的 JavaScript 变得很容易,而代码仍然被广泛支持,因为它被转换为commonjs(你看到的格式require(老派import(和module.exports(老派export(。

可能是出于历史原因。 node.js和Chrome(V8引擎(比ES6标准旧。

另一方面,请参阅: 如何在节点中使用 es6 导入?

您也可以使用导入。

我相信

导入是 es6,但我认为这不能解释为什么它不是 在节点中使用。

就像 NodeJS 实现其整个库的方式一样,其中大量异步函数仅支持基于回调的方法。这样想,你会意识到,NodeJS框架迟早会支持import语法,并升级所有这些异步函数以支持基于承诺的函数。

在 Node.js 中,require用于加载模块,而import用于 ECMAScript 模块(ESM 模块(中用于静态或动态加载其他模块。

require和导入之间的主要区别在于require会自动扫描node_modules以查找模块,但来自ES6的导入不会。

大多数人使用Babel来编译导入和导出,这使得导入行为与要求相同。

  1. 需求更多的是动态分析,导入更多的是静态分析。
  2. 在运行时需要抛出错误
  3. ,在解析时导入抛出错误。
  4. 要求是非词汇的,导入是词法的。

最新更新