Имена, разделяющие импорт JavaScript из собственных модулей

#javascript

#язык JavaScript

Вопрос:

Я переношу код, который раньше не использовал собственные модули JS.

 // File: form.js // `lc` is a global object I attach each file's functions to. let lc = window.lc || {} lc.form = {}; lc.form.add = function() {  // add a form }  

И тогда будет называться как lc.form.add() , что приятно, потому что у этого слова add есть контекст.

Однако теперь, когда я изменяю код для использования модулей JS:

 // File: form.mjs export function add() {  // add a form }  

И тогда будет называться как add() , что не имеет контекста. Теперь я понимаю, что мог бы сделать:

 import {add as formAdd} from '/form.mjs'  

Но это похоже на шаг назад, чтобы начать называть смурфом все импортируемые вещи.

Есть ли способ импортировать модуль, как в Python, а затем вызывать функции модулей. Например, используйте точечную и т. Д. нотацию для доступа к его функции, что-то вроде этого:

 import '/form.mjs' as form form.add()  

Ответ №1:

Вы ищете импорт пространства имен:

 import * as form from '/form.mjs'; form.add();  

Комментарии:

1. Это идеальный, удивительно приятный синтаксис от JS! Счастливых дней!

2. Странно, что export default это исключено из этого пути. * это не значит, что все, как можно было бы предположить, должно быть каким-то странным, попался с JS.

3. Так ли это? Я был почти уверен, что ты справишься form.default . Если вы это сделаете , он будет проигнорирован export * from … , потому что там у него будет высокая вероятность столкновений с другими экспортами по умолчанию.