Javascript 使用BabelJS导出默认变量
我正在使用Babel进行ES2015模块定义 我有一个文件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
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;
我错误地说它是无效输入——我更新了答案,以反映在您的情况下,它可能是运行时错误。我错误地说它是无效输入——我更新了答案,以反映在您的情况下,它可能是运行时错误。