es6可以导入commonjs模块吗?

ino*_*nik 8 javascript typescript es6-modules

我有一个 commonjs 模块,它是由 Typescript 3.3.3 生成的。

是否可以将它与 es6 导入语句一起使用?这是我尝试过的。

生成的模块在文件末尾像这样导出 CountUp:

exports.CountUp = CountUp;
Run Code Online (Sandbox Code Playgroud)

在我的 main.js 中:

import { CountUp } from './js/countUp.js';
Run Code Online (Sandbox Code Playgroud)

在 index.html 中:

  <script src="./js/countUp.js"></script>
  <script src="./main.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)

但我得到

countUp.js:13 未捕获的 ReferenceError:在 countUp.js:13 处未定义导出

(注意:countUp.js 现在作为 es6 模块分发)

Get*_*awn 5

简短回答:否


使用 es6 时,需要导出 usingexport而不是exports. exports是一个 commonjs 功能,主要用于 node 而不是 web 浏览器。

如果你想用commonjs你需要使用第三方库像requirejs,但这种用途require()和不importexports,而不是export。然后,您将能够使用带有打字稿的导入/导出来编写代码,但它将使用编译requirerequirejs处理其余部分。

因此,要在浏览器中正确使用它,您可以这样做:

测试.js

export function Test() {
  console.log('hello')
}
Run Code Online (Sandbox Code Playgroud)

索引.js

import { Test } from './test.js'
Test()
Run Code Online (Sandbox Code Playgroud)

然后当你在你的 html 中加载文件时,函数 test 将执行。

<script src="index.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)

  • 我想你的答案是否定的。也许你可以改写它。因为问题的全部目的是使用 commonjs。我无法更改它的导出方式。 (2认同)