我一直在学习一些React,并且我一直在使用ES6类编写基于类的组件。我正在开发一个Node小型项目,但该语法均无效。
esm
此语法有什么问题?它不在Node中运行吗?我必须安装alp_customer.first, alp_customer.last, alp_customer.email
才能使导入/导出语法正确运行,但是仍然无法编译。
答案 0 :(得分:2)
Class Fields仍处于提案阶段(已进入第3阶段,因此它们将很快成为该语言的一部分)。这意味着某些运行时可能已经支持它们,但是还不需要。要在今天可靠地使用投标,您必须将其与BabelJS一起移植下来。
这会将您的代码转换为以下ES6:
class Handler {
constructor() {
this.handleReq = () => {
this.ctx = ctx;
};
this.testFunc = async () => {
};
}
}
因此,这些方法实际上仅存在于构造后的实例上,而不存在于Handler.prototype
上。
答案 1 :(得分:0)
正如其他人指出的那样,如果不进行编译,则类字段还不是ES6语法的一部分。如果要避免构建步骤,则等效的节点语法为:
// import someImport from './some-import' is invalid, instead use:
const someImport = require('./some-import');
class Handler {
constructor() {
this.handleReq = this.handleReq.bind(this);
this.testFunc = this.testFunc.bind(this);
}
handleReq() {
this.ctx = ctx; // Where is ctx coming from?
}
async testFunc() {
}
}
// export default Handler.prototype.handleReq is invalid, instead use:
module.exports = Handler.prototype.handleReq;