Почему использование узлов не требует импорта?
Я изучаю node.js и мне интересно, почему он использует require
синтаксис, а не import
синтаксис, который использует React.
т.е.
const Validator = require("validator");
В.С.
import Validator from "validator";
я верил import
это es6, но я не думаю, что это объясняет, почему он не используется в узле.
4 ответа
import
а также default
являются более новыми функциями ES6, еще не использованными узлом. На самом деле Node уже внедряет новые функции в качестве эксперимента: --experimental-modules
флаг и только для файлов, сохраненных с .mjs
расширение.
Транспортеры, такие как babel, позволяют писать современный, одобренный спецификацией и / или экспериментальный ECMAScript. В экосистеме упаковщиков, таких как Webpack, с транспиляторами, такими как babel, становится легко писать поддерживаемый, ориентированный на будущее javascript, в то время как код остается широко поддерживаемым, поскольку он преобразован в commonjs
(формат, который вы видите узнаваемымrequire
(старая школа import
) а также module.exports
(старая школа export
).
Вероятно, по историческим причинам. node.js и chrome (v8 engine) старше, чем стандарт ES6.
С другой стороны, смотрите: Как я могу использовать импорт es6 в узле?
Вы также можете использовать импорт.
Я полагал, что импорт - это es6, но я не думаю, что это объясняет, почему он не используется в узле.
Точно так же, как NodeJS реализует всю свою библиотеку, которая содержит множество асинхронных функций, которые поддерживают только подход, основанный на обратном вызове. Подумав так, вы поймете, что рано или поздно инфраструктура NodeJS определенно будет поддерживать import
Синтаксис и обновить все эти асинхронные функции для поддержки на основе обещаний.
В Node.js require используется для загрузки модулей, а импорт используется в модулях ECMAScript (модулях ESM) для загрузки других модулей статически или динамически.
Основное различие между require и import заключается в том, что require автоматически сканирует node_modules для поиска модулей, а import , который поступает из ES6, этого не делает.
Большинство людей используют Babel для компиляции импорта и экспорта , что делает импорт таким же, как требуется .
- require — это скорее динамический анализ, а импорт — это скорее статический анализ.
- require выдает ошибку во время выполнения, а импорт выдает ошибку при синтаксическом анализе.
- require нелексический, а import лексический.