在Babel 5.x中,我可以编写以下代码:
app.js
export default function (){}
index.js
require('babel/register');
require('./app')();
然后,我可以node index.js
没有错误地运行。但是,使用Babel 6.x,运行以下代码
index.es6.js
require('babel-core/register');
require('./app')();
导致错误
require(…)不是函数
我想知道为什么吗?
TL; DR
你必须用
require('./app').default();
说明
Babel 5曾经具有以下兼容性问题export default
:如果一个模块仅包含一个导出,并且它是默认导出,则将其分配给module.exports
。因此,例如,您的模块 app.js
export default function () {}
将被翻译成这个
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
这样做 纯粹是 为了与require
-ing
Babel转换的模块兼容(就像您所做的那样)。这也不一致。如果模块同时包含命名和默认导出,则不能使用require
-d。
实际上,根据ES6模块规范,默认导出与名称为的命名导出 没有区别default
。它只是语法糖,可以在编译时静态解析,因此
import something from './app';
与此相同
import { default as something } from './app';
话虽如此,Babel 6似乎决定在转译模块时放弃对互操作性的攻击。现在,您的模块 app.js 被编译为
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
如您所见,不再分配到module.exports
。对于require
这个模块,你需要做
require('./app').default();
我有一个VUE2项目,我编写了一个简单的函数来翻译日期中的月份,我想将它导入到我的一个组件中,但是我得到了一个错误: 在“@/utils/date-translation”中找不到导出“default”(导入为“translate date”) src文件夹中的相对文件路径是正确的,我导出的函数如下所示: 然后我将其导入到组件中,如下所示: 我做错了什么?
做。 错误是:
问题内容: 除了* 使用如下所示的反射检查 之外 ,是否有任何方法 要求 类具有默认(无参数)构造函数?(以下方法可以工作,但是很hacky,反射速度很慢) * 问题答案: 您可以为此构建一个注释处理器。注释处理器是在编译时运行的编译器插件。它们的错误显示为编译器错误,甚至可能停止构建。 这是一个示例代码(尽管我没有运行它): 如果引入注释(例如RequiresDefaultAnnotation)
问题内容: 如果要创建组件,似乎可以用很多不同的方式创建类。这些有什么区别?我怎么知道要使用哪个? 我只是假设他们做不同的事情,还是只是语法不同? 如果有人可以给我快速的解释或链接,我将不胜感激。我不想从一个新的框架开始,不知道到底有什么区别。 问题答案: 嗨,欢迎来到React! 我认为您在这里遇到的问题并不是与React特定的,而是与新的ES2015模块语法有关。在创建React类组件时,出于
问题内容: 档案:SafeString.js 我从未见过。是否有任何等效的东西更容易理解? 问题答案: 它是ES6模块系统的一部分,该文档中还有一个有用的示例: 如果模块定义了默认导出: 那么您可以通过省略花括号来导入默认导出: 更新: 自2015年6月,该模块系统中定义§15.2和在特定语法中定义§15.2.3ECMAScript的2015规范的。
文件:safeString.js 我以前从未见过。对于,是否有更容易理解的等效内容?