我正在学习节点.js并且想知道为什么它使用require
语法而不是React使用的import
语法。
即
const Validator = require("validator");
与
import Validator from "validator";
我相信import
是 es6,但我认为这并不能解释为什么它不在节点中使用。
import
和default
是较新的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来编译导入和导出,这使得导入行为与要求相同。
- 需求更多的是动态分析,导入更多的是静态分析。 在运行时需要抛出错误
- ,在解析时导入抛出错误。
- 要求是非词汇的,导入是词法的。