为什么我无法在 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'

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