Почему я не могу получить доступ к функции экспортируемого класса в узле Webpack 8.1.0 Функция лямбда AWS - PullRequest
0 голосов
/ 10 мая 2019

Я пишу функцию AWS Lambda, используя среду выполнения Node 8.1.0.Мой 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;
  }
}

Я подключаю следующую конфигурацию веб-пакета:

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не функция

1 Ответ

1 голос
/ 10 мая 2019

Вы пытаетесь получить доступ к методу 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

...