为什么无法在Webpack节点8.1.0 AWS Lambda函数中访问导出的类的函数

时间:2019-05-10 14:47:05

标签: node.js amazon-web-services webpack aws-lambda webpack-4

我正在使用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>

1 个答案:

答案 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'

注意:我不建议将es6es5混合使用,而应坚持使用export xxxexports.xxx