Javascript 使用BabelJS导出默认变量

Javascript 使用BabelJS导出默认变量,javascript,babeljs,Javascript,Babeljs,我正在使用Babel进行ES2015模块定义 我有一个文件a.js: require('babel-core/register')({presets: ['es2015']}) require('./b') 它需要一个文件b.js export default b = () => true 巴贝尔将此编译为 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.d

我正在使用Babel进行ES2015模块定义

我有一个文件
a.js

require('babel-core/register')({presets: ['es2015']})
require('./b')
它需要一个文件
b.js

export default b = () => true
巴贝尔将此编译为

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

exports.default = b = function Main() {
  return true;
};
但随后抛出一个错误:

ReferenceError: b is not defined
  at Object.<anonymous> (b.js:1:16)
ReferenceError:b未定义
反对。(b.js:1:16)

如果这是整个模块,并且没有全局
b
,则这是一个运行时错误,因此可能是第一个问题:

导出默认值b=()=>true

如果这是整个模块,并且没有全局
b
,则这是一个运行时错误,因此可能是第一个问题:

导出默认值b=()=>true

我认为问题来自babel添加的
严格模式
,因为您正在引用一个未声明的变量。将其更改为:

const b = () => true
export default b;

为我修复了它。

我相信问题来自babel添加了
严格模式,因为您正在引用一个未声明的变量。将其更改为:

const b = () => true
export default b;


为我修复了它。

编译后的输出是否有use strict指令?(应该是这样的。)您能详细说明一下直接运行编译代码的意思吗?您试图为本地绑定/导出实现什么?您是否需要将导出的内容作为默认内容进行本地绑定?您显示的是
b.js
的全部内容还是摘录?啊,您的意思是,Babel只在编译后向我显示错误行,而不是第一行,应该是
“use strict”?这可能是,是的。我只是复制了它显示给我的行,并尝试使用node运行,这很有效,但如果是严格模式,它可能不会运行。。。无论如何,我想用babel创建一个匿名函数(更好的语法,不返回等等),但要有一个名称(babel编译
a=()=>
a=function a(){}
@K我不知道你说的第二行是什么意思,但是输出应该有一个use strict指令,你不能在没有use strict指令的情况下运行部分代码并期望它执行相同的操作。你指的是箭头函数,而不是匿名函数。你编译的输出有use strict指令吗?(应该有。)你能详细说明一下直接运行编译后的代码是什么意思吗?对于本地绑定/导出,你想做什么?你需要将导出的东西作为默认值进行本地绑定吗?你显示的是
b.js
的全部内容还是摘录?啊,你的意思是,巴贝尔只向我显示了er编译后的ror行,但不是第一行,应该是
“use strict”
?这可能是,是的。我只是复制了它显示给我的行,并尝试使用node运行它,这很有效,但如果是strict模式,可能不会……无论如何,我想使用babel创建一个匿名函数(更好的语法,无返回等)但是有一个名字(巴贝尔编译
a=()=>
a=函数a(){}
@K我不确定你对后面这行的意思是什么,但是输出应该有一个use strict指令,你不能在没有use strict指令的情况下运行部分代码并期望它执行相同的操作。你是说一个arrow函数,而不是匿名函数。是的,似乎是。因此,如果我想要一个arrow函数的名称,我必须从函数定义之前到之后导出默认值似乎是这样。或者,您可以使用
export default()=>true
然后
import b from“/b”
@K.:
export default b=()=>true
module.exports=(b=()=>true)基本相同。这可能会使发生的事情更清楚。你也可以预先声明变量(<代码>让B;<代码>),但是我不认为这是好的风格。声明它是重要的一部分,你也可以做<代码>让B;导出默认b=()。=>true;
Yes,似乎是。因此,如果我想要箭头函数的名称,我必须将
export default
从函数定义的前面移到后面?似乎是这样。或者,您可以使用
export default()=>true
然后
从“/b”
@K导入b.:
export default b=()= true >代码>基本上与<代码>模块。导出=(b=())= true)< /代码>。这可能使正在发生的事情更清楚。您也可以预先声明变量(<代码>让B;<代码>),但是我不认为这是好的样式。声明它是重要的一部分,也可以做<代码>让B;导出默认b=()。=>true;
我错误地说它是无效输入——我更新了答案,以反映在您的情况下,它可能是运行时错误。我错误地说它是无效输入——我更新了答案,以反映在您的情况下,它可能是运行时错误。