ES6 импортный эквивалент require () без экспорта

Используя require(./filename), я могу включить и выполнить код внутри filename без какого-либо экспорта, определенного внутри самого filename.

Что эквивалентно в ES6 с использованием import?

Спасибо


person crash    schedule 16.12.2016    source источник


Ответы (1)


Эквивалент просто:

import "./filename";

Вот некоторые из возможных вариантов синтаксиса:

import defaultMember from "module-name";  

import * as name from "module-name";  

import { member } from "module-name";  

import { member as alias } from "module-name";  

import { member1 , member2 } from "module-name";  

import { member1 , member2 as alias2 , [...] } from "module-name";  

import defaultMember, { member [ , [...] ] } from "module-name";  

import defaultMember, * as name from "module-name";  

import "module-name";

ИСТОЧНИК: MDN

person CodingIntrigue    schedule 16.12.2016
comment
На самом деле это кажется неверным в соответствии с тем же страница, на которую вы ссылались в своем ответе. Такой импорт выполнит код, но не сохранит никаких ссылок на определенные переменные (я также подтвердил это поведение в своем проекте). - person intcreator; 30.03.2018
comment
@brandaemon, можете ли вы показать пример того, что вы подразумеваете под «хранением переменных»? Как вы их сравниваете? Нативные модули против NodeJS или транспиляция с помощью Babel? - person CodingIntrigue; 30.03.2018
comment
Например, если у меня есть файл с именем code.js, где у меня const foo = 1; console.log(foo);, и я говорю import "code.js" в main.js, у меня не будет доступа к foo внутри main.js. Однако 1 будет выведен на консоль, поскольку код внутри code.js будет выполнен. Если это немного сложно понять, вот StackBlitz, демонстрирующий то, что я 'я делаю. - person intcreator; 30.03.2018
comment
@brandaemon Именно так работает NodeJS & require. Дело не в том, что он не хранит ссылки, но эти переменные имеют блочную область видимости, поэтому вы не можете получить к ним доступ в вызывающем модуле. Если бы вы поместили foo либо в окно (браузер), либо в глобальное (узел), это будет вести себя так, как вы ожидаете - person CodingIntrigue; 30.03.2018
comment
Ах хорошо. Значит, нет возможности включить ссылки с заданной областью без явных exports? Я думаю о поведении, которое вы получаете, когда у вас есть несколько тегов сценария в файле HTML. - person intcreator; 30.03.2018
comment
@brandaemon Нет, нет. Я понимаю, как вы думаете, что это будет работать так же! - person CodingIntrigue; 30.03.2018
comment
Вероятно, что если у вас возникла эта проблема, вам также придется изменить способ экспорта из модулей. module.exorts = SomeObj для экспорта SomeObj по умолчанию - person Leo; 08.06.2021