1

В настоящее время я тестирую покрытие ES2015 в Safari Developer Preview (который утверждает, что поддерживает 100% ES2015, включая модули).Импорт модуля ES2015 в Safari DP требует расширения файла

Я провел простой тест, используя тот же синтаксис, который я регулярно использовал при разработке кода ES2015 (наряду с Babel.JS для пересылки и Browserify для комплектации).

Неожиданно мой код не будет работать без включения расширения .js в операторе импорта. Это стандартное поведение? Я думал, ты можешь это пропустить.

/* filename: scripts/alert.js */ 
 
export default class Alert { 
 
    constructor(message) { 
 
     this.message = message; 
 
    } 
 
    
 
    show() { 
 
     alert(this.message); 
 
    } 
 
} 
 

 
// Another file 
 

 

 
/* filename: scripts/index.js */ 
 
import Alert from "./alert.js"; // this won't work if I change it to 'import Alert from "./alert";' 
 

 
(new Alert("Hello, World!")).show();
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="UTF-8" /> 
 
    <title>ES2015 Modules</title> 
 
</head> 
 
<body> 
 
    <h1>ES2015 Modules</h1> 
 
    <script async="async" type="module" src"scripts/index.js"> 
 
    </script> 
 
</body> 
 
</html>

+1

* ModuleSpecifier * используется средой для загрузки модуля. Это не то, о чем говорит язык, поэтому среда может или не требует расширения '.js'. – CodingIntrigue

+0

Я этого не знал. Я думаю, мне придется всегда ставить расширение '.js' просто, чтобы быть уверенным, как хорошая практика во время разработки (даже с транспиляцией и комплектом) – Zorgatone

ответ

2

Неожиданно мой код не будет работать без включения .js расширения в операторе импорта. Это стандартное поведение? Я думал, ты можешь это пропустить.

Это не задача браузера, чтобы догадаться, что означает этот спецификатор ресурса для сервера. Вы можете настроить свой сервер для ответа на GET без .js, отправив соответствующий файл с .js, но это конфигурация сервера.

В этом отношении, вероятно, будет эволюция. Например, прямо сейчас the spec требует, чтобы спецификатор ресурса модуля начинался с / или ./. Это особенно так, что ...

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

+0

Я действительно думал, что при импорте модуля браузер попытается загрузить его с помощью расширение '.js' в запросе get. Мой автозапуск редактора кода предлагает импорт без расширения '.js'. Я действительно не должен опускать эту часть, затем – Zorgatone

+1

@ Zorgatone: навсегда потребовалось, чтобы это получилось даже пригвожденным, как есть. :-) Я думаю, что мы начинаем с «держать это просто», а затем развиваться оттуда. –

+0

Я знаю: действительно! Вот почему я был немного удивлен и взволнован, чтобы попробовать это – Zorgatone