我正在将使用的应用程序System.import
从traceur移植到Babel。我的简化HTML如下所示:
<script src="../node_modules/babel-core/browser.js"></script>
<script src="../node_modules/es6-module-loader/dist/es6-module-loader-dev.js"></script>
<script>
System.transpiler = 'babel';
System.import('./css');
</script>
这给了我
Uncaught (in promise) File not found: http://connect:8000/sam/css
Error loading http://connect:8000/sam/css
如果改为./css.js
使用.js
扩展名指定,则可以使用。但是,然后css.js
在表格的内部和整个系统中导入
import 'foo';
失败。
看来es6-module-loader需要.js
扩展。我注意到es6-module-loader中涉及演示页面的一些提交,该提交为.js
扩展名称添加了扩展名。在此页面上,我还看到了
默认情况下,也不再添加.js扩展名。这些更改是向新规范工作过渡的一部分。有关更多信息,请参见whatwg / loader#52上的讨论。如果需要,可以使用自定义钩子轻松添加回.js扩展名。
但是我不知道指的是哪种钩子,或如何编写它。
我知道,在浏览器中动态加载和转译可能不是理想的选择,也不是一种可靠的生产方法。但是,这个特定的应用程序会动态加载单个ES6文件,我暂时需要坚持这种方式。
我的问题是:es6-module-loader是否需要.js
扩展名,或者有没有办法告诉它.js
默认情况下查找文件?
locate
根据https://github.com/ModuleLoader/es6-module-loader/blob/master/docs/loader-extensions.md上的文档,我最终放弃了这个问题:
var systemLocate = System.locate;
System.locate = function(load) {
var System = this; // its good to ensure exact instance-binding
return Promise.resolve(systemLocate.call(this, load)).then(function(address) {
return address + '.js';
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句