Синтаксис импорта JavaScript ES6?

#javascript #node.js #ecmascript-6 #import #es6-modules

#javascript #node.js #ecmascript-6 #импорт #es6-модули

Вопрос:

Я просто тестирую новый import синтаксис. Но я немного разочарован, поскольку синтаксис, который я должен использовать, похоже, не соответствует тому, что я читал. Почему приведенный ниже синтаксис работает (в Chrome, в расширении)?

 import * as lib from "./lib-file.js";
  

Какие существуют альтернативы для этого специального синтаксиса?


РЕДАКТИРОВАТЬ: Я думаю, я должен прояснить некоторые вещи. Я пытаюсь заставить это работать в расширении Chrome. Приведенный выше синтаксис работает в скрипте «popup» (в скрипте, загруженном из находящегося там html-файла). Я написал этот пост, потому что был удивлен, что мне понадобилось расширение «.js».

Однако затем обнаружилась новая проблема. Приведенный выше синтаксис не работает в скрипте «content». Ошибка, которую я получаю, такая же, как та, которую я получаю из всплывающего окна, когда в теге script в html-файле отсутствует type="module" . ( Uncaught SyntaxError: Unexpected token * ) Это похоже на ошибку при импорте в скрипт содержимого, но я совсем не уверен. Я что-то там упускаю?


ПРАВКА 2: я только что нашел эту статью, в которой, кажется, рассказывается, как исправить эти проблемы на данный момент:

Использование модулей импорта / экспорта JavaScript ES6 в расширениях Chrome https://medium.com/@martinnovk_22870/using-javascript-es6-import-export-modules-in-chrome-extensions-f63a3a0d2736


ПРАВКА 3: я только что получил указатель на эту утилиту. Я заметил, что они не используют импорт ES6 в предлагаемой ими настройке в браузере. mozilla / webextension-polyfill: облегченная библиотека polyfill для API-интерфейсов WebExtension на основе обещаний в Chromehttps://github.com/mozilla/webextension-polyfill

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

1. Это просто означает импортировать все экспортируемые модули с префиксом lib из данного файла. Существует множество вариантов импорта, и вариант использования зависит от импортируемого модуля.

2. @dvlden Спасибо, но я спрашиваю о синтаксисе, а не о семантике.

Ответ №1:

Вы можете использовать разные import вызовы — возможно, даже require , если ваш сервер является узловым:

 const lib = require("./lib-file");
import "./lib-file";
import libFile from "lib-file"; 
  

Обратите внимание, что в третьем вам нужно export libFile из вашего lib-file.js .

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

1. Спасибо, я знаю об этих вариантах, но они не совпадают с тем, о котором я спрашиваю. (Этого нет в Node.js .)

2. Тогда о каких из них вы спрашиваете @Leo?

3. Я думаю, что видел, например, этот вариант import * as lib from "lib-file" . И вариант с «./lib-file».

4. Я только что протестировал ваш второй и третий варианты. Я не могу заставить их работать. (Я использую «использовать строго».)

5. Хм, я виноват. Может быть, они работают. Я пропустил, что ошибка теперь была из «content.js » (файл, запущенный в контексте текущей вкладки). Импорт туда не работает с синтаксисом, который я использую (и, вероятно, не с другими синтаксисами тоже. Из «content.js «Я получаю ошибку Uncaught SyntaxError: Unexpected token * . Исходя из моего опыта прямо сейчас, я понимаю это как то, что файл для импорта не был найден.