为什么我无法在 Webpack-ed 节点 8.1.0 AWS Lambda 函数中访问导出的 class 函数
Why can't I access exported class's function in Webpack-ed node 8.1.0 AWS Lambda function
我正在使用 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;
};
我的自定义-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 is不是函数
您正在尝试以 static
方式访问方法,但是该方法不是 static
。
使用new
关键字创建class的实例,然后就可以使用该方法了。
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
我正在使用 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;
};
我的自定义-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 is不是函数
您正在尝试以 static
方式访问方法,但是该方法不是 static
。
使用new
关键字创建class的实例,然后就可以使用该方法了。
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