我知道我们可以使用,import {x} from "./file"
并且将从同一个目录中的file.js导入变量x。如果目录中存在具有相同扩展名的同名文件,该如何处理?
例如,如果在同一目录中有file.js和file.ts,将如何import {x} from "./file"
表现?它取决于javascript的版本吗?
它取决于javascript的版本吗?
不,这取决于JavaScript运行时的行为,即执行脚本的行为。
在支持ES模块(ESM)的浏览器中,不会将扩展名添加到您的URL中import
-如果您的文件具有.js
扩展名,则必须编写import {x} from "./file.js"
。浏览器没有有用的方法来查找服务器上可用扩展名的文件。
在不支持ESM的本机浏览器中,您必须将模块转换为可在浏览器中运行的捆绑格式。在这种情况下,这取决于您选择使用的特定捆绑软件的行为(请参见下文)。
在支持ESM的Node.js版本中,运行时不会搜索扩展名,但会node_modules
按名称解析模块。例如,import 'lodash'
可以解析为./node_modules/lodash/index.mjs
,而无需知道的扩展名index.mjs
。
在不支持ESM的Node.js版本中,您不能使用import
-您必须先将模块转换为CommonJS格式,最终将使用require
。require
有扩展名列表,它将在文件系统中搜索。
例如,如果在同一目录中有file.js和file.ts,将如何
import {x} from "./file"
表现?
这取决于。
当您转换或编译脚本时,可以识别哪些扩展名取决于编译器和您提供的用于编译的设置。
例如,在webpack中,存在预定义的受支持扩展名列表- '.wasm','。mjs','。js','。json',但可以通过在文件中使用resolve.extension设置进行更改webpack.config.js
。
如果webpack
与ts-loader插件一起使用,.ts
文件扩展名也可以识别,但是加载器将尝试将其扩展为将.ts
文件编译为.js
文件,并.js
在捆绑时尝试使用该已编译文件。
如果您使用普通的Typescript编译器来编译脚本,则编译器将查找扩展名为'.ts'的文件以执行类型检查,但是在运行时,它将生成将查找扩展名为'.js'的文件的代码。剧本。同样,如果编译了扩展名为“ .ts”的文件,则编译器将在扩展名为“ .js”的文件中写入生成的代码,如果有,则可能会覆盖您的javascript文件,具体取决于告诉其输出位置的设置'.js'文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句