首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“未登录的SyntaxError:导入未找到:默认”在一个模块中工作,而在另一个模块中不工作

“未登录的SyntaxError:导入未找到:默认”在一个模块中工作,而在另一个模块中不工作
EN

Stack Overflow用户
提问于 2021-03-15 23:16:37
回答 1查看 11.7K关注 0票数 6

我有两个javascript文件,它们都在同一个网页中使用,它们都使用第三个javascript文件的资源。

The服务器上的主JS文件Person6.js,at /FamilyTree/Person6.js:

代码语言:javascript
运行
复制
import HTTP from "../jscripts6/js20/http.js";
import {iframe, actMouseOverHelp, openFrame, openSignon, debug, args,
        getOffsetLeft, getOffsetTop, popupAlert, show,
        showHelp, hideHelp, helpElt, keyDown,
        eltMouseOver, eltMouseOut}
            from "../jscripts6/util.js";
import {capitalize} from "../jscripts6/CommonForm.js";
import Cookie from "../jscripts6/Cookie.js";

以及web服务器上的CommonForm.js,at /jscripts6/CommonForm.js,您可以看到它有一个由主脚本导入的方法。

代码语言:javascript
运行
复制
import HTTP from "../jscripts6/js20/http.js";
import {getOffsetLeft, getOffsetTop, popupAlert, 
        helpDiv, eltMouseOver, eltMouseOut, displayHelp}
            from "../jscripts6/util.js";

当我对每个文件单独运行eslint时,除了在脚本中声明的未定义资源外,没有报告任何问题,这些脚本通过标记合并到应用程序中:

代码语言:javascript
运行
复制
    <script src="/jscripts/tinymce/js/tinymce/tinymce.js" type="application/javascript">
    </script>
    <script src="/FamilyTree/Person6.js" type="module">
    </script>
    <script async defer src="https://maps.googleapis.com/maps/api/js?v=3.43&callback=initializeMaps&region=$GOOGLECC&key=$GOOGLEKEY" type="application/javascript"></script>

我收到了一个错误:

代码语言:javascript
运行
复制
Uncaught SyntaxError: import not found: default CommonForm.js:157:7.

第157行是从“./jscripts6/ is 20/http.js”导入HTTP;如上面所示。

为什么这条语句在嵌入到CommonForm.js中时是语法错误,而在主文件Person6.js中嵌入时却不是语法错误?在这两个文件中,除了注释之外,在导入之前没有任何东西。显然,由于导入文件中的这个错误,主文件从未被执行。我只是在进口之后发布了一个警告,但它没有爆开。

我正在尝试将我的代码从ES3迁移到ES6。如何修复此错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 04:29:44

代码语言:javascript
运行
复制
import HTTP from "../jscripts6/js20/http.js";

等于

代码语言:javascript
运行
复制
import { default as HTTP } from "../jscripts6/js20/http.js";

还有你的错误

代码语言:javascript
运行
复制
import not found: default

是说http.js没有default导出。在你发布的片段中,情况确实如此。

代码语言:javascript
运行
复制
export var HTTP; 
if (HTTP && (typeof HTTP != "object" || HTTP.NAME)) 
  throw new Error("Namespace 'HTTP' already exists"); // Create our namespace, and specify some meta-information 
window.HTTP = HTTP = {};

没有默认的导出,而是有一个HTTP导出,如果您的代码要按原样工作,则需要这样做。

代码语言:javascript
运行
复制
import { HTTP as HTTP } from "../jscripts6/js20/http.js";
// or shortened
import { HTTP } from "../jscripts6/js20/http.js";

值得注意的是,

代码语言:javascript
运行
复制
if (HTTP && (typeof HTTP != "object" || HTTP.NAME)) 

在这个上下文中,不会对true进行计算,也不会抛出,因为您没有在export var HTTP;声明中提供一个值,从而显式地将其声明为undefined

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66646969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档