Вопросы

Как собрать / скомпилировать облачные функции firebase с помощью webpack

Я использую webpack для создания своих облачных функций (несколько причин для этого, например, псевдонимы путей, машинописный текст и некоторые другие конфигурации)

У меня есть свой index.ts файл, а также src папка, содержащая отдельные файлы для каждой функции.

Мой index.ts файл затем экспортирует их вот так

import admin from 'firebase-admin';

admin.initializeApp();

export const func1 = require('./src/func1').default;
export const func2 = require('./src/func2').default;

Проблема с webpack по сравнению с чем-то вроде tsc заключается в том, что он требует весь код из требуемых файлов и объединяет его в индексный файл, что для облачных функций не идеально из-за производительности холодного запуска.

Каким будет правильный способ разбить эти файлы на отдельные и обеспечить хорошую производительность при холодном запуске (т.е. требуется только код для вызываемой функции).

Конфигурация моего веб-пакета для firebase выглядит так

const config = {
  entry: {
    index: path.resolve(__dirname, './index.ts')
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, './dist'),
    libraryTarget: 'commonjs'
  },
  mode: 'production',
  optimization: {
    nodeEnv: 'production',
    splitChunks: {
      chunks: 'all'
    },
    minimize: true,
    minimizer: [
      new ESBuildMinifyPlugin({
        target: 'es2020',
        minifyWhitespace: true,
        minifyIdentifiers: true,
        minifySyntax: true
      })
    ]
  },
  resolve: {
    alias: {
      $tools: path.resolve(__dirname, '../../tools'),
      $types: path.resolve(__dirname, '../../types')
    },
    extensions: ['.tsx', '.ts', '.js', '.mjs', '.json']
  },
  externals: ['firebase-functions', 'firebase-admin'],
  target: 'node',
  module: {
    rules: [
      {
        test: /\.(m?js|ts)$/u,
        exclude: /(node_modules)$/u,
        use: {
          loader: 'esbuild-loader',
          options: {
            loader: 'ts',
            target: 'es2020',
            tsconfigRaw: require('./tsconfig.json')
          }
        }
      }
    ]
  },
  plugins: [new CleanWebpackPlugin(), new ESBuildPlugin()]
};

Какая у вас конфигурация веб-пакета?   —  person Ilja    schedule 29.01.2021

Читать:
API-шлюз не возвращает ответ

@guillaumeblaquiere добавил это в вопрос   —  person Ilja    schedule 30.01.2021

Похожие записи

Массив не в массиве для запроса доктрины

admin

Сохраненное состояние Vuex не удаляет состояние после закрытия вкладки

admin

Выделение предопределенных частных IP-адресов при запуске EC2 с помощью Auto Scaling Group

admin

Ошибки импорта данных MongoDB и Google Maps geojson

admin

Забавные персонажи до и в конце журналов с помощью Google Cloud Winston Logging (Nodejs)

admin

Изменить цвет фона ScrollView SwiftUI

admin