Я использую 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
@guillaumeblaquiere добавил это в вопрос — person Ilja schedule 30.01.2021
