#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 *
. Исходя из моего опыта прямо сейчас, я понимаю это как то, что файл для импорта не был найден.