Raz*_*zor 8 javascript ecmascript-6 traceur
我正在使用ES6模块转换为带有traceur的 ES5 .
通过grunt + grunt-traceur进行脱毛
Traceur允许您选择要使用的模块处理程序:它自己的,AMD,commonJS或内联.
我尝试了大部分,但似乎没有一个工作.为什么?
TestClass.js
export default class TestClass {
constructor() {
alert('test');
}
}
Run Code Online (Sandbox Code Playgroud)
Main.js
import TestClass from './TestClass';
var test = new TestClass();
Run Code Online (Sandbox Code Playgroud)
Gruntfile.js(摘录)
traceur: {
options: {
experimental: true,
blockBinding: true,
modules: 'amd'
}
}
Run Code Online (Sandbox Code Playgroud)
index.html(提取)
<script src="js/vendor/traceur-runtime.js"></script>
<script src="js/vendor/require.js"></script>
<script defer async src="js/compiled/Main.js"></script>
Run Code Online (Sandbox Code Playgroud)
给出错误
未捕获的错误:匿名的define()模块不匹配:函数($ __ 0){
似乎grunt插件存在问题,但即使使用旧版本似乎也没有帮助.
代码改编自一篇文章.
看来我有非常相似的问题(并用谷歌搜索你的问题试图找到解决方案)。
我没有看到你提供的错误,无论如何在这里发布我的实现,也许它对你有帮助。
首先,您需要使用 treceur 运行时加载两个 js 脚本。像这样:
<script src="js/vendor/traceur-runtime.js"></script>
<script defer async src="js/compiled/TestClass.js" type="module"></script>
<script defer async src="js/compiled/Main.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)
请注意,您必须在属性中指定您的脚本为module-s type。
比你必须加载初始化模块:
<script>
System.get('public_js/init');
// pass your init module name as a parameter
// you can see it in private __moduleName variable in compiled init.js
</script>
Run Code Online (Sandbox Code Playgroud)
这种实现对我来说效果很好。我使用 0.2.9 版本的 grunt-traceur 和 0.0.72 版本的 treceur 运行时。希望这对您有帮助。