Javascript 如何在浏览器中使用已编译的ES6到ES5文件?

Javascript 如何在浏览器中使用已编译的ES6到ES5文件?,javascript,ecmascript-6,Javascript,Ecmascript 6,我在ES6中有两个模块: //mycalss.js class MyClass { } export {MyClass}; //main.js import {MyClass} from './../src/myclass'; 我正在使用Laravel mix来处理编译和捆绑过程 最后我得到了一个main.js 我用html链接这个文件 <script type="text/javascript" src="main.js"></script> 但是抛出了一个未捕获

我在ES6中有两个模块:

//mycalss.js
class MyClass {
}
export {MyClass};

//main.js
import {MyClass} from './../src/myclass';
我正在使用Laravel mix来处理编译和捆绑过程

最后我得到了一个main.js

我用html链接这个文件

<script type="text/javascript" src="main.js"></script>
但是抛出了一个未捕获的引用错误:MyClass未定义

那么,如何在html中使用从es6编译到es5的类呢?

您可以在浏览器中将JavaScript从es6编译到es5

通常,您必须使用来自动执行此操作,并在HTML中插入脚本

您可以使用在浏览器中编译从ES6到ES5的JavaScript


通常,您必须使用来自动执行此操作,并在HTML中插入脚本

ES6模块具有模块范围。这可以防止它们将变量泄漏到全局范围。这正是模块化的目的

为了使用ES6模块中的项,这同样适用于在全局范围内实现模块模式的CommonJS模块或IIFE,它们必须定义为全局。对于客户端脚本,这意味着它们应定义为捆绑应用程序中的窗口属性:

window.MyClass = MyClass;

这表明存在潜在的XY问题。一个更好的选择是重新考虑为什么它应该在全球范围内可用。如果已经有捆绑的ES6应用程序,它应该从内联运行代码。。。也是。

ES6模块具有模块范围。这可以防止它们将变量泄漏到全局范围。这正是模块化的目的

为了使用ES6模块中的项,这同样适用于在全局范围内实现模块模式的CommonJS模块或IIFE,它们必须定义为全局。对于客户端脚本,这意味着它们应定义为捆绑应用程序中的窗口属性:

window.MyClass = MyClass;

这表明存在潜在的XY问题。一个更好的选择是重新考虑为什么它应该在全球范围内可用。如果已经有捆绑的ES6应用程序,它应该从内联运行代码。。。也是。

你不能。捆绑的JS文件可能位于函数范围内,并且不可能公开变量/对象。也许您可以显式公开要重用的对象?在main.js中,您可以执行类似于window.MyClass=MyClass的操作,然后它将对不属于包的任何其他脚本可见。当然,这是假设您首先确实需要这样做……您不能也不应该这样做。使用MyClass的代码应该在main.js中,而不是在内联脚本中。这就是ES6模块的目的。@evolutionxbox您是对的。检查编译后的文件后,我注意到类声明在一个函数范围内。@HuguesMoreau我使用window.MyClass=MyClass,它按预期工作。我知道这是不推荐的,但我需要在内联脚本中使用编译后的文件。谢谢你不能。捆绑的JS文件可能位于函数范围内,并且不可能公开变量/对象。也许您可以显式公开要重用的对象?在main.js中,您可以执行类似于window.MyClass=MyClass的操作,然后它将对不属于包的任何其他脚本可见。当然,这是假设您首先确实需要这样做……您不能也不应该这样做。使用MyClass的代码应该在main.js中,而不是在内联脚本中。这就是ES6模块的目的。@evolutionxbox您是对的。检查编译后的文件后,我注意到类声明在一个函数范围内。@HuguesMoreau我使用window.MyClass=MyClass,它按预期工作。我知道这是不推荐的,但我需要在内联脚本中使用编译后的文件。谢谢