Nano Hash - криптовалюты, майнинг, программирование

импорт javascript es6 ожидает ровно один аргумент

Я пытаюсь использовать модули es6, но получаю ошибку:

SyntaxError: Неожиданный идентификатор GameObject. вызов импорта ожидает ровно один аргумент.

Кстати, это в Safari 11 на macOS 10.13.

Вот мой модуль:

export class GameObject {
    //code
}

export class GameLoop {
    //code
}

соответствующий html:

<body>
    <script type="module" src="gameFoundation.js"></script>
    <script src="gameTest.js"></script>
</body>

и скрипт, который пытается использовать модуль, который выдает вышеупомянутую ошибку в строке 1:

import GameObject from "./gameFoundation.js"
import GameLoop from "./gameFoundation.js"

class Rect extends GameObject {
    //code
}

Я новичок в JavaScript, поэтому я думаю, что у меня что-то совершенно неправильное. Любая помощь приветствуется. ????


  • import { GameObject } from "./gameFoundation.js", иначе вы пытаетесь импортировать экспорт по умолчанию, который здесь не определен. 07.01.2018
  • @wostex import {GameObject} from ./gameFoundation.js import {GameLoop} from ./gameFoundation.js выдает ошибку: непредвиденный токен { 07.01.2018
  • Вы не можете использовать объявления import в обычном скрипте. Дайте ему type="module" тоже. 07.01.2018
  • OHH, я должен использовать type=module в скрипте, который импортирует модули? Это имеет смысл... Я думаю. Добавьте это как ответ, и я приму 07.01.2018
  • @PopKernel - я вернул ваше редактирование к вопросу обратно (Дэвид Моулз предупредил меня об этом в комментарии к моему ответу). Вопросы не должны редактироваться для включения ответов именно по той причине, на которую указал Дэвид, — это делает ответы бессмысленными. 06.07.2021

Ответы:


1

Ваши экспорты имеют имя, но вы используете синтаксис импорта по умолчанию. Вам нужно обернуть имена того, что вы импортируете, в {...}:

import { GameObject } from "./gameFoundation.js";
import { GameLoop } from "./gameFoundation.js";

Вы также можете сделать оба с одной декларацией импорта, если хотите:

import { GameObject, GameLoop } from "./gameFoundation.js";

Также обратите внимание, что import допустимо только в модуле, поэтому вам нужно изменить:

<script src="gameTest.js"></script>

to

<script type="module" src="gameTest.js"></script>
07.01.2018
  • Спасибо, но теперь я получаю сообщение об ошибке Неожиданный токен '{'. вызов импорта ожидает ровно один аргумент. любая идея, почему это может быть? Я обновлю вопрос, чтобы отразить ошибку. 07.01.2018
  • @PopKernel: Похоже, вы используете что-то другое, кроме модулей ES2015, потому что import не является вызовом. 07.01.2018
  • @ T.J.Crowder, может ли это быть из-за тега script внутри body? 07.01.2018
  • @TheReason: Нет, все в порядке. 07.01.2018
  • @PopKernel: Также убедитесь, что браузер, который вы используете, поддерживает модули (большинство из них еще не поддерживает, я не знаю о Safari 11, но Safari опережает график модулей) и что скрипт, в котором вы используете import имеет type="module", например. <script type="module" src="filename.js"></script> или <script type="module">/*code here*/</script>. Если вам нужно ориентироваться на браузеры, которые еще не поддерживают модули, вам понадобится сборщик, такой как Webpack или Browserify. 07.01.2018
  • Итак, я загрузил и протестировал в FireFox, у которого было другое описание для объявлений импорта ошибок, которые могут появляться только на верхнем уровне модуля, который... это верхний уровень модуля... 07.01.2018
  • @PopKernel: согласно вашему вопросу, это не так. <script src="gameTest.js"></script> отсутствует type="module", поэтому, хотя он и находится на верхнем уровне, он находится на верхнем уровне скрипта, а не модуля. См. мой комментарий выше, вы может использовать только import в модулях. (Я также обновил ответ, я пропустил эту часть вопроса.) 08.01.2018
  • Поскольку ОП отредактировал исходный вопрос, чтобы воспользоваться советом из первой части этого ответа, ответ теперь сбивает с толку — если вы уже используете синтаксис {}, реальной проблемой является отсутствие script type="module". @ T.J.Crowder, есть ли шанс, что вы могли бы отредактировать ответ, чтобы отразить изменения в вопросе? 05.07.2021
  • @DavidMoles - Спасибо, что отметили это. Я пошел другим путем: откатил вопрос назад. Вопросы не должны редактироваться для включения ответов именно по той причине, которую вы указали - это делает ответы бессмысленными. :-) 06.07.2021

  • 2

    Именованный экспорт будет работать на вас.

    Заменять

    import GameObject from "./gameFoundation.js"
    import GameLoop from "./gameFoundation.js"
    

    to

    import { GameObject, GameLoop } from "./gameFoundation.js"
    

    Вот хорошая статья обо всех импортах/экспортах ES6 . Вам будет полезно почитать.

    07.01.2018

    3

    Вы используете синтаксис ES6, который необходимо преобразовать в собственный простой старый синтаксис javascript для загрузки в браузер.

    Пожалуйста, перейдите по следующей ссылке: https://scotch.io/tutorials/javascript-transpilers-what-they-are-why-we-need-them

    Он расскажет вам о транспиляторе, который может решить вашу проблему.

    16.04.2018

    4

    В es6 сделать импорт так:

    import GameObject from "./gameFoundation.js"
    

    ваш экспорт должен выглядеть так:

    export default class GameObject { }
    

    в вашем случае вам нужно сделать свой импорт следующим образом:

    import { GameObject, GameLoop } from './gameFoundation.js'
    
    07.01.2018
  • Опечатка выше. Порядок должен быть export default class GameObject { } 16.12.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование