Зависит ли это от версии javascript?
Нет, это зависит от поведения среды выполнения javascript, то есть от того, что выполняет ваш сценарий.
В node.js
с включенными модулями ES существует заранее определенный список расширений файлов, в которых производится поиск, если URL в import
не имеет расширения. Распознаются следующие расширения: ". Mjs", ".js", ".json", ".node" . Кроме того, если путь относится к каталогу, выполняется поиск в файле «index», также с различными расширениями.
В node.js
без включенных модулей ES в сценарии не может быть import
, когда он выполняется - сначала нужно перенести его в формат CommonJS, а затем сценарий должен использовать require
, который распознает аналогичный список расширений, но без "mjs".
В браузере, если он имеет встроенную поддержку модулей ES, браузер не будет добавлять какие-либо расширения к URL-адресу, который вы указали в import
- если ваш файл, например, имеет расширение .js
, вы должны написать import {x} from "./file.js"
. У браузеров нет полезного способа узнать, какие файлы с какими расширениями доступны на сервере.
В браузерах без встроенной поддержки модулей ES вам снова придется переносить любой сценарий, содержащий операторы import
, а затем использовать какой-либо пакет или загрузчик модулей для запуска скомпилированных сценариев в браузере.
Например, если бы в одном каталоге были файлы file.js и file.ts, как бы себя вел импорт {x} из "./file"?
Это зависит.
Когда вы переносите или компилируете свой скрипт, то, какие расширения распознаются, зависит от компилятора и настроек, которые вы предоставляете для компиляции.
Например, в веб-пакете есть предопределенный список поддерживаемых расширений - '. Wasm', '.mjs', '.js', '.json' , но его можно изменить с помощью resol.extension в вашем файле webpack.config.js
.
Если вы используете webpack
с плагином ts-loader , расширение .ts
также распознается, но загрузчик попытается сделать так, чтобы файл .ts
был скомпилирован в .js
файл и попытается использовать этот скомпилированный файл .js
при связывании.
Если вы используете простой компилятор сценариев для компиляции ваших сценариев, компилятор будет искать файл с расширением «.ts» для проверки типов, но он сгенерирует код, который будет искать файл с расширением «.js», когда Вы запустите сценарий. Кроме того, если файл с расширением «.ts» скомпилирован, компилятор запишет сгенерированный код в файл с расширением «.js» и может перезаписать ваш файл javascript, если он у вас есть, в зависимости от настройки, указывающей, куда выводить Файлы .js.