Почему использование узлов не требует импорта?

Я изучаю 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 для компиляции импорта и экспорта , что делает импорт таким же, как требуется .

  1. require — это скорее динамический анализ, а импорт — это скорее статический анализ.
  2. require выдает ошибку во время выполнения, а импорт выдает ошибку при синтаксическом анализе.
  3. require нелексический, а import лексический.
Другие вопросы по тегам