Когда я делаю эти два изменения в ваших файлах с Chrome 62 без установленных экспериментальных флагов, я получаю предупреждение.

сь выяснить, почему systemjs не нашел пользовательскую библиотеку, которую я установил (это может быть последующим вопросом), я застрял при попытке сделать что-то «вручную».

Итак, у меня есть простая система, которая состоит из 3 файлов:

index.htmlhi.jshi2.js

индекс просто:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Test</title>
</head>

<body>
<script src="hi.js"></script>
</body>
</html>

hi.js:

import * as hi from "hi2.js";

hi.myFunction();

hi2.js:

function myFunction() {
  alert('hi')
}
export { myFunction };

Теперь, когда я запускаю (используя webstorm и chrome 62) приведенный выше код, я получаю следующую ошибку, сообщаемую отладчиком (chrome): «Uncaught SyntaxError: Неожиданный импорт токена»

Что тут происходит? Я проверил на соответствие JavaScriptна мдн и он говорит мне, что импорт поддерживается Chrome 61 и новее. - Я использую Chrome 62 для тестирования этого.

Итак, что происходит и как заставить это работать?

вРекомендации для Я также изменил строку HTML на<script type="module" src="hi.js"></script>, Это не помогло, та же ошибка.

 T.J. Crowder08 нояб. 2017 г., 15:39
@ paul23: я ненавижу, когда я это делаю (и делаю это чаще, чем хотелось бы).
 T.J. Crowder08 нояб. 2017 г., 15:28
Когда вы добавилиtype="module"вместо неожиданной ошибки токена вы должны были получитьUncaught TypeError: Failed to resolve module specifier 'hi2.js', (Я сделал, на Chrome 62.)
 paul2308 нояб. 2017 г., 15:31
@ T.J.Crowder: действительно, я недостаточно углубился, не запустил «модуль» в режиме отладки и просто увидел, что он не работает, думая, что ошибка была бы такой же; нужно подождать, прежде чем принимать.
 JLRishe08 нояб. 2017 г., 15:31
Вот plnkr с вашими файлами. Я проверил это, работая в Chrome 61 после внесения исправления, чтобы добавить./.

Ответы на вопрос(1)

Решение Вопроса

Вы правы, что вам нужноtype="module" на вашем теге сценария:

<script src="hi.js" type="module"></script>
<!-- ---------------^^^^^^^^^^^^^       -->

Вам также нужно./ префикс вашего спецификатора модуля:

import * as hi from "./hi2.js";
// ------------------^^

Это значит оставить дверь открытой для спецификатора без какого-либо пути, чтобы он имел особое значение на каком-то этапе развития событий. Изспецификация WHAT-WG:

Это ограничение(что относительный спецификатор URL должен начинаться с/, ./, или же../- Т.Дж.) на месте, так что в будущем мы можем позволить загрузчикам пользовательских модулей придавать особое значение «пустым» спецификаторам импорта, таким какimport "jquery" или жеimport "web/crypto", На данный момент любой такой импорт не будет выполнен, вместо того, чтобы рассматриваться как относительные URL-адреса.

Когда я делаю эти два изменения в ваших файлах с Chrome 62 без установленных экспериментальных флагов, я получаю предупреждение.

Ваш ответ на вопрос