Javascript ES6导入/导出是否需要;。js";分机?
我安装了chrome beta版60.0.3112.24(官方版本)beta版(64位) 在chrome://flags/ 我启用了“实验性Web平台功能”(请参阅) 然后我试着:Javascript ES6导入/导出是否需要;。js";分机?,javascript,es6-modules,Javascript,Es6 Modules,我安装了chrome beta版60.0.3112.24(官方版本)beta版(64位) 在chrome://flags/ 我启用了“实验性Web平台功能”(请参阅) 然后我试着: <script type="module" src='bla/src/index.js'></script> 这是指现有文件drawImage.js 我在控制台中得到的是错误 GET http://localhost/bla/src/drawImage 如果我更改导出并添加“.js”扩展
<script type="module" src='bla/src/index.js'></script>
这是指现有文件drawImage.js
我在控制台中得到的是错误
GET http://localhost/bla/src/drawImage
如果我更改导出并添加“.js”扩展名,它可以正常工作
这是一个chrome bug还是ES6在这种情况下需要扩展
而且webpack没有扩展就可以很好地构建它 扩展名是文件名的一部分。你必须把它放进去 作为证明,请尝试以下内容:
- 将文件重命名为
drawImage.test
- 编辑
以包含index.js
'./drawImage.test'
js
或test
完全是任意的,只要您在导出中指定它即可
显然,在测试之后,恢复到正确的/更好的js
扩展。否,模块不关心扩展。它只需要是一个解析为源文件的名称
在您的情况下,http://localhost/bla/src/drawImage
不是文件,而http://localhost/bla/src/drawImage.js
是,所以这就是错误的来源。例如,您可以在所有导入语句中添加.js
,或者将服务器配置为忽略扩展名。Webpack也有同样的功能。ES6导入/导出需要“.js”扩展名。
节点文档中有明确的说明:
相对说明符,如“/startup.js”或“../config.mjs”。它们指的是相对于导入文件位置的路径。对于这些文件,文件扩展名始终是必需的
此行为与导入在浏览器环境中的行为相匹配,假定为典型配置的服务器
thx!我很困惑,因为导入似乎不需要扩展?此外,网页包没有扩展也可以正常工作!我从未尝试过这些实验性功能,但在node.js中使用了commonJS
机制。我遇到过类似的问题,解决方法是避免让加载程序猜测扩展。此外,如果您有两个文件,那么这两个文件都可能是可行的,例如data.js
和data.json
。我认为最好是直言不讳,但这只是我的观点。@pid是的,最好是直言不讳,完全同意。如果您的环境允许使用其他内容,那么很好,但是模块或模块系统没有理由猜测这是不正确的:“模块不关心扩展”。Webpack可能能够在没有.js
的情况下解析文件,但浏览器目前无法解析url路径,但它们对扩展没有任何魔力,因为它们不知道您的Web服务器上存在哪些资源。他们只是获取解析的url。如果您的服务器实际上在无扩展的url上有一个模块,那么它也可以正常工作。“ES6导入/导出需要”.js“extension”不是真的。请参阅已接受的答案或您的第一点。
GET http://localhost/bla/src/drawImage