我收到这个错误:Syntax Error: ambiguous indirect export
在Firefox中。遗憾的是,在谷歌上找不到任何东西。。。
- 这是我的导入:
<script type="module">
import {someFunctionINeed} from "./js/functions.js";
...
</script>
- 这是我的导出:
export function someFunctionINeed(cname) { ... }
- 我的
tsconfig.json
中的compilerOptions:
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": true,
"watch": true,
"removeComments": true
}
- 以及可能与
package.json
相关的内容:
"type": "module"
我错过了什么?
好的,我找到了解决方案:在tsconfig.json
:中设置这些属性很重要
"module": "ESNext",
"target": "esnext",
否则它就不会"编译";我需要它来支持函数的导入/导出。
我遇到了同样的问题,通过在package.json文件中包含"type": "module"
来修复它。
(我知道这不是你问题的答案,但有人可能会觉得它很有用,因为谷歌上没有太多关于这个错误的信息(
我也有同样的错误,但原因不同。对我来说,问题是package.json
中的name
与我导入的文件名相同。
解决方案:更改文件名和导入路径
使用Vite 4.9.3、TypeScript 4.9.3和Firefox 109进行观察。
这似乎是一个热门话题,因为我最近几次遇到这个错误,我想我也应该给出我的解决方案(显然,有很多不同的原因导致了令人震惊的间接导出错误,IMHO大多数时候这与导入文件中的语法错误有关。我必须承认,我不能100%确定require和import的差异及其实际范围(显然,import更多地用于服务器端/模块上下文,而require似乎与"经典"js文件有关,但这并不总是正确的,我认为这将是一个谜,直到一些超级程序员弄清楚它,并最终为Web汇编环境编写transpiler
在我的例子中,我试图将.jsx中的{x,y,z}包含在.js文件中,这就是错误所说的令人震惊的地方。我将module.exports={}更改为导出默认值{},但错误仍然存在。事实证明,在这个.js文件中,我需要("./yet/other/jsx/file"(,但没有定义require。该错误是在我删除默认关键字后打印的,因此总结如下:
- 从具有单个";导出默认值">
- 导出js文件中的~不带默认值~对象以及
- 从jsx文件中的.js文件导入
为我解决了这个问题。尝试删除默认语句并坚持导入(至少在前端,我正在使用vite构建一个preast应用程序(似乎可以节省一些调试时间。我希望如此。祝各位程序员好运,愿Web汇编器问世,让javascript能够安息<3
从ChatGPT:添加
"导入";以及";要求";用于JavaScript中的模块加载"导入";在ES6+中用于前端和后端;要求";在CommonJS中用于后端。为了避免不明确的错误,请使用一致的导入/导出语法,避免循环依赖关系,并始终指定文件扩展名。
抱歉收到垃圾邮件。我相信是时候最终伪造这个bs了。
如果您输入的标识符错误,也可能发生这种情况,例如:
// In the export file:
export function someFunctionINeed(cname) { ... }
// In the import file:
// This identifier is the wrong case, the "S" should be lowercase
import { SomeFunctionINeed } from "./js/functions.js";
我也面临同样的问题,显然我忘记在导出的末尾添加逗号