javascript导入如何找到没有扩展名的模块?

好奇乔治

我知道我们可以使用,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格式,最终将使用requirerequire有扩展名列表,它将在文件系统中搜索。

例如,如果在同一目录中有file.js和file.ts,将如何import {x} from "./file"表现?

这取决于。

当您转换或编译脚本时,可以识别哪些扩展名取决于编译器和您提供的用于编译的设置。

例如,在webpack中,存在预定义的受支持扩展名列表- '.wasm','。mjs','。js','。json',但可以通过文件中使用resolve.extension设置进行更改webpack.config.js

如果webpackts-loader插件一起使用,.ts文件扩展名也可以识别,但是加载器将尝试将其扩展为将.ts文件编译为.js文件,并.js在捆绑时尝试使用该已编译文件。

如果您使用普通的Typescript编译器来编译脚本,则编译器将查找扩展名为'.ts'的文件以执行类型检查,但是在运行时,它将生成将查找扩展名为'.js'的文件的代码。剧本。同样,如果编译了扩展名为“ .ts”的文件,则编译器将在扩展名为“ .js”的文件中写入生成的代码,如果有,则可能会覆盖您的javascript文件,具体取决于告诉其输出位置的设置'.js'文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

es6-module-loader无法找到没有.js扩展名的模块

没有扩展名,Typescript无法导入文件

在没有文件扩展名的javascript中获取URL

如何查找没有扩展名的文件的扩展名

如何删除没有特定扩展名的文件?

如何查找没有扩展名的图像的MIME类型?

没有TLD扩展名的域如何存在

如何预览没有文件扩展名的Windows文件?

如何让 gulp 处理没有扩展名的文件

如何打开扩展名为.chk或没有扩展名的二进制文件?

导入不带.py扩展名的python模块

不提供文件扩展名就无法导入TypeScript模块

没有文件扩展名的网页

如何从上传的图片中获取文件扩展名,而文件名中没有扩展名

gulp没有注意到sass / compass扩展名导入/捆绑程序

如何从JavaScript获取扩展名?

如何在组合框中显示没有扩展名的文件名?

如何使用php获取没有扩展名的网站文件名和?id=someid

如何从没有扩展名的路径中获取特定文件名python

如何下载网址中没有文件名和文件扩展名的文件

如何只恢复没有路径和文件扩展名的文件名?

如何在 Bash 中找到包含某些文件扩展名的所有文件夹?

如何在文件夹层次结构中找到所有不同的文件扩展名?

glob语法以匹配具有任何扩展名或没有扩展名的文件

没有扩展名VBA的文件名

没有扩展名的文件名

AppleScript中没有扩展名的文件名

如何删除没有匹配的文件,具有不同扩展名的文件

在Javascript和PHP中没有文件扩展名的页面重定向