Ошибка разрешения пути модулей ES6

Я пытаюсь использовать новые функции ES6 в Chrome 60 (включив Экспериментальную веб-платформу). Это структура моего проекта:

myproject
├── src
|   ├── mymodule.js
|   ├── dep1.js
|   ├── dep2.js
|   ├── dep3.js
├── pages
    ├── example
        ├── example1.html

Это моя страница example1.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>E6 6 experiments</title>
    <script type="module" src="../../src/mymodule.js"></script>
</head>
<body>
</body>
</html>

Я настроил Http-Server:

http-server /Users/myuser/myproject

Так что у меня есть сервер, работающий и обслуживающий вещи (чтобы избежать проблем с CORS, связанных с использованием протокола file:///). Когда я запускаю Chrome и набираю в адресной строке: localhost://pages/example/example1.html, я получаю эту ошибку:

[Error] GET http://localhost:8080/src/dep1 
[Error] GET http://localhost:8080/src/dep2 
[Error] GET http://localhost:8080/src/dep3 

Зависимости не загружены

Окно Developer Tools показывает, что mymodule.js загружается корректно, а его зависимости нет, путь неверный. Файл mymodule.js имеет эти 3 строки в начале:

import * as dep1 from "./dep1";
import * as dep2 from "./dep2";
import * as dep3 from "./dep3";

Помните, что dep1.js, dep2.js и dep3.js находятся в том же месте, что и mymodule.js.

Я думаю, что mymodule.js загружает ресурсы нормально, в противном случае, если это зависит от того, где у сервера есть корень, это становится сложно. Что я здесь делаю неправильно?


person Andry    schedule 21.08.2017    source источник
comment
Хм ... Сам не пробовал, но мне интересно, действительно ли импорт по какой-то причине относится к документу (как в html)? Что произойдет, если вы измените свой импорт на import * as dep1 from "/src/dep1"?   -  person Quangdao Nguyen    schedule 22.08.2017
comment
Нет, джк. Ошибки сервера 404 говорят об обратном.   -  person Quangdao Nguyen    schedule 22.08.2017
comment
@QuangdaoNguyen То же самое, те же самые ошибки   -  person Andry    schedule 22.08.2017
comment
Вы можете получить доступ к этим файлам прямо из браузера?   -  person Quangdao Nguyen    schedule 22.08.2017
comment
@QuangdaoNguyen Я могу их получить, браузер правильно извлекает файлы javascript, поэтому они доступны с точки зрения HTTP-сервера.   -  person Andry    schedule 22.08.2017


Ответы (1)


Как видно в логе, относительный путь разрешен правильно, папка ожидаемая. Проблема в том, что ваши файлы называются dep1.js, а не dep1 (и т. д.). Добавьте расширение файла:

import * as dep1 from "./dep1.js";
import * as dep2 from "./dep2.js";
import * as dep3 from "./dep3.js";

В качестве альтернативы вы можете настроить свой сервер для автоматического разрешения этих проблем.

person Bergi    schedule 22.08.2017
comment
@Andry А где спецификация говорит об этом? - person Bergi; 23.08.2017
comment
@AndryAndry Это не спецификация. Также он говорит только модуль, идентифицируемый my-module, часто my-module.js. Возможно, им следует прояснить, что то, как идентифицируется работа, зависит от загрузчика модуля, а нативные модули (пока?) автоматически не угадывают расширение. - person Bergi; 23.08.2017
comment
Плохо, я на самом деле хотел связать другую статью, фактическую спецификацию, но, взглянув еще раз, я понял, что это так, как вы сказали! Большое спасибо за Вашу помощь - person Andry; 23.08.2017