【发布时间】:2018-05-04 13:33:46
【问题描述】:
我正在使用Chrome v65 玩一些ES6 功能
我有以下文件:
base.js:
export function consoleLogger(message) {
console.log(message);
}
main.js
import { consoleLogger } from './base.js';
consoleLogger('Some message');
utils.js
function sayMyName(name) {
console.log(name);
}
imports.html
<!DOCTYPE html>
<html>
<head>
<script src='./main.js' type='module'></script>
<script src='./utils.js'></script>
</head>
<body>
<script>
sayMyName('Cool name');
</script>
</body>
</html>
像这样使用一切似乎都很好,在控制台中我得到了
酷名 utils.js:2
一些消息base.js:2
但是,让我们想象一下我需要一些额外数据才能为consoleLogger 方法编写消息的场景。然后我想在 main.js
function logToConsole(msg) {
consoleLogger(msg);
}
在 imports.html
中<script>
sayMyName('Cool name');
logToConsole('Send from log to console');
</script>
然后对于我在控制台中的html 文件中的logToConsole('Send from log to console'); 调用,我得到:
未捕获的 ReferenceError:未定义 logToConsole 在imports.html:10
所以从base.js导入consoleLogger并直接在main.js中调用没有问题,包含另一个.js文件(utils.js)并从那里调用方法没有问题,但是如果我尝试调用在main.js 中声明的方法,该方法在内部调用导入的方法,我从上面得到了错误。看来main.js 中的方法是否引用导入的方法似乎并不重要。我只是评论了所有内容,只留下了一个简单的方法
main.js
import { consoleLogger } from './base.js';
/*function logToConsole(msg) {
consoleLogger(msg);
}
consoleLogger('Some message');*/
function randomStuff() {
console.log('random stuff');
}
在控制台中我收到了这个错误:
imports.html:11 Uncaught ReferenceError: randomStuff is not defined 在imports.html:11
有人可以解释一下这种行为的原因吗?
【问题讨论】:
-
由于文档是自上而下解析的(默认直接执行JS),可能问题是你的文件被包含的顺序。
-
@Seblor 这对我来说似乎不太可能,因为参考树是
Imports.html->main.js->base.js。在 html 文件中,我只包含main.js内部正在导入base.js我不知道是否可以更改此顺序。
标签: javascript import ecmascript-6