我无法获得基本的ES6导入功能

时间:2018-01-11 18:06:27

标签: javascript import ecmascript-6 export

抱歉,但是我做错了什么基本的蠢事?我关注this example code.我是否需要一种特殊的代码服务方式? (我使用的是http-server)

Chrome抱怨

  • "意外的令牌{"或
  • "意外的标识符"分别

最小代码如下:

mini.js

import {doSomething2} from "mini2";
// import doSomething2 from "mini2";  also fails
// also tried ... from "./mini2"

function doSomething1(url, opts) {
   return "mini1 " + doSomething2(url);
}

mini2.js

export function doSomething2(url, opts) {
   return ("mini2 " + url);
}

mini.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset=utf-8>
    <title>Test</title>
    <script src="mini.js"></script>
</head>

<body onload="console.log(doSomething1('hi there'))">

<header>
</header>
<main>
<h1> Test </h1>     
</main>
</body>

</html>

更新:我没有使用任何转发器或捆绑器。在@MohammedWaleed建议之后,如果.html文件使用type = "module"并且mini.js导入带有详细路径import {doSomething2} from './mini2.js';的mini2.js,那么事情或多或少都有效。我可以从mini.js运行内联代码,该代码调用mini2.js。问题是mini.js中的函数,例如dosomething1(),似乎是看不见的。

更新2 @loganfsmyth评论有效。看起来如果您的脚本类型为&#34; module&#34;,您必须手动设置全局变量。有点尴尬,但很好。为了避免过多地污染窗口全局空间,可能最好使用窗口属性,这里我只使用&#34; mini&#34;:

window.mini = {
  doSomething1 :function doSomething1(url) {
     return "mini " + doSomething2(url);
  }
  anotherFunction: blah blah...
}

1 个答案:

答案 0 :(得分:1)

你试过吗

import {doSomething2} from "mini2.js";

因为我注意到它包含在以下链接的文件中,无论哪种方式你应该检查链接它会帮助你

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

编辑: 我发现这篇文章介绍它会帮助你

https://medium.com/dev-channel/es6-modules-in-chrome-canary-m60-ba588dfb8ab7