我正在使用Node 8.1.0运行时编写一个AWS Lambda函数。我的index.js看起来像这样:
import MyCustomClass from 'my-custom-class';
exports.handler = async(event) => {
console.log('MyCustomClass.getDummy()', MyCustomClass.getDummy());
return null;
};
我的my-custom-class.js看起来像这样:
export default class MyCustomClass {
constructor() {
this.dummy = 'Hello World'
}
getDummy() {
return this.dummy;
}
}
我与以下Webpack配置捆绑在一起:
var path = require('path');
module.exports = {
mode: 'development',
entry: [
path.join(__dirname, 'src/index.js')
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
libraryTarget: 'commonjs'
},
target: 'node',
resolve: {
modules: [path.resolve(__dirname, 'src'), 'node_modules']
}
};
当我捆绑函数时,我没有得到任何错误,并且在结果bundle.js中看到的内容看起来不错,但是在AWS中却收到以下错误:TypeError:my_custom_class__WEBPACK_IMPORTED_MODULE_0 __。default.getDummy不是函数< / p>
答案 0 :(得分:1)
您正尝试以static
的方式访问方法,但是该方法不是static
。
使用new
关键字创建该类的实例,然后即可使用该方法。
exports.handler = async(event) => {
let myCustomClass = new MyCustomClass;
console.log('MyCustomClass.getDummy()', myCustomClass.getDummy());
return null;
};
另一种选择是使方法静态化,但是您还需要使方法引用的属性也静态化。
exports.handler = async(event) => {
console.log('MyCustomClass.getDummy()', MyCustomClass.getDummy());
return null;
}
export default class MyCustomClass {
static getDummy() {
return this.dummy;
}
}
MyCustomClass.dummy = 'Hello World'
注意:我不建议将es6
与es5
混合使用,而应坚持使用export xxx
或exports.xxx