Каково различие между “import from” и “var require”?

Каково различие между следующими кодами?

import page from 'page'; 

vs

var page = require('page');
6
задан 06.10.2016, 18:30
2 ответа

В Node.js была создана система модулей названных CommonJS, этот используется с: const я модулирую = require ('модуль'); В ES2015/6 я присоединяюсь в язык родная система модулей используя синтаксис: import я модулирую from 'модулирую'; Хотя главным образом кажется, что они делают то же самое, в действительности они функционируют формы, отличной на низком уровне.

CommonJS, когда ты загружаешь модуль, приносит тебе копию модуля для того, чтобы ты смог использовать это, в то время как ES2015 он приносит ссылку на этот модуль. Это означает, что, если у твоего модуля есть переменная и она экспортирует функцию, которая изменяет эту переменную, любая другая часть твоего приложения, которое использует вышеупомянутую переменную, окажется отраженным изменение, в то время как с CommonJS у каждого была бы Ваша копия переменной.

Podés читать объяснение наиболее (на английском) и больше завершает здесь

8
ответ дан 24.11.2019, 14:12

Различие между import и require он бездонный.

С одной стороны require - глобальная функция, введенная атмосферой выполнения в то время как import - новый синтаксис, добавленный под язык. В существо require функция как другой любой, возможно призывать в любой части кода. Позволяя, таким образом, динамический груз модулей. Это может быть хорошим или плохим в зависимости от, как он был использован, но делая вещи может приносить пользу тому, чтобы приложения инициализировались быстро. С другой стороны import одинокий синтаксис и следовательно не может быть распределенным в переменную, из-за того, что груз модулей остается определенным estaticamente. Второе также может быть плохим или хорошим, как он смотрелся. С одной стороны связь между модулями статика Ваш анализ может осуществляться существу так, что не выполняет код то, что позволяет лучшие программные средства разработки и с другой стороны у него есть невыгода того, чтобы быть чем-то очень жестким.

Чтобы иллюстрировать различие давайте брать как случай изучения книжный магазин sequelize. Этот книжный магазин предлагает возможность импортировать модуль javascript как модель. Это возможное, потому что в существо require такая любая функция как другая Ваш аргумент может быть любой стоимостью. Это не может осуществляться той же формы используя import.

У различия, на которое указывает Даниэль Эрнандес, наверху есть больше, что видеть с, как используется модуль и особенности Javascript как язык, чем с системой модуля, который был бы использован в если. Ты подпираешь утверждение CommonJS cuando cargas un módulo te trae una copia del módulo para que lo puedas usar, mientras que ES2015 trae una referencia a ese módulo. она полностью фальшивая. Видеть официальную документацию Nodejs для большего количества info по этому поводу. require только возврати ссылку на модуль, который является загруженным в закоулке модулей Node. import, вынеси существование локальных символов, которые указывали бы на объекты в других модулях в то время как require он только выносит, указывать в модуль как на все. Отсюда, который создавать локальный символ, который ссылается на переменную в другом модуле, должно перемещать из-за процесса ассигнования новой локальной переменной. Ввиду природы Javascript, если пере-распределяется эта локальная переменная только, меняется, куда он обозначается и следовательно не изменяется переменная в модуле, у которого просили Вашей начальной стоимости.

Пример:

// aquí x no es una variable local sino un símbolo, no puede ser reasignado por definición debido a la nueva sintaxis
import {x} from 'x';

// aquí y es una variable definida localmente que puede sufrir modificaciones
var y = require('x').x;

// aquí la variable local y se ha reasignado para que referencie el valor 35.
y = 35;

Пример наверху не подразумевает, что не было возможно изменять переменную x экспортируемая с модуля x в локальном коде. Но, когда локальная переменная используется, это эта переменная, которую мы изменяем. Следующий пример изменяет переменную x в модуле x используя систему модулей CommonJS.

var x = require('x');

x.x = 35;

Поскольку он может, поверните, когда локальная переменная не была использована, возможно изменять прямо стоимость признака x модуля x. Эта новая стоимость сейчас доступная с любого другого модуля, который требует в модуль 'x'.

1
ответ дан 24.11.2019, 14:12