Я пытаюсь использовать Sharp на пару AWS lambda@edge. Идея состоит в том, чтобы изменить размер и кэшировать изображение при запросе ( см. ).
I ' Я также использую serverless с serverless-webpack для развертывания лямбд.
Я могу развернуть лямбды и все будет хорошо, если я протестирую их в AWS консоли.
Однако это lamda@edge, и они будут использоваться в качестве триггеров запроса / ответа в облачном хранилище. Следовательно, максимальный размер лямбды составляет 1 МБ.
Моя проблема в том, что я не могу приблизиться к этому размеру, лучшее, что я смог достичь - 11,6 Мб. И, кажется, это возможно, как видно из этой первой ссылки.
Это конфигурация без сервера, которая приводит к лямбде 34.7Mb:
custom:
webpack:
includeModules:
forceExclude:
- aws-sdk
packagerOptions:
scripts:
- rm -rf node_modules/sharp && docker run -v "$PWD":/var/task lambci/lambda:build-nodejs10.x npm install sharp
package:
exclude:
- .env
- .git/**
- .gitlab-ci.yml
- tests*
excludeDevDependencies: true
individually: true
И с этим я получил 11.6Mb:
custom:
webpack:
includeModules:
forceExclude:
- aws-sdk
packagerOptions:
scripts:
- npm rebuild sharp --target=10.15.0 --target_arch=x64 --target_platform=linux
package:
exclude:
- .env
- .git/**
- .gitlab-ci.yml
- tests*
excludeDevDependencies: true
individually: true
Я также поэкспериментировал с package.exclude, но не повезло:
- node_modules/**
- '!node_modules/sharp/**'
и это мой конфиг веб-пакета:
const path = require('path');
const slsw = require('serverless-webpack');
const nodeExternals = require('webpack-node-externals');
const entries = {};
Object.keys(slsw.lib.entries).forEach(key => (entries[key] = ['./source-map-install.js', slsw.lib.entries[key]]));
module.exports = {
mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
entry: slsw.lib.entries,
devtool: 'source-map',
resolve: {
extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
},
// externals: ['sharp'], #tried that too
externals: [nodeExternals()],
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, '.webpack'),
filename: '[name].js',
},
target: 'node',
module: {
rules: [
// all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
{ test: /\.ts?$/, loader: 'ts-loader', options: { happyPackMode: true } },
],
},
};
Когда работает локально, я вижу, что он упаковывает ... папка node_modules имеет острые и ее зависимости, кажется. Но самая большая папка острая.
Я подозреваю, что упаковываю вещи в острую папку, которая мне не нужна ... но я не могу понять, что.
Любая помощь?
Спасибо
ОБНОВЛЕНИЕ: Читая более внимательно, кажется, что функция, в которой мне нужен четкий (размер-ответ) предел размера, составляет 5 МБ. Мне просто нужно найти способ упаковать резкие только для этой функции. Кажется, Webpack помещает его в оба, хотя мне не нужно это для другой функции (запрос средства просмотра). Любая помощь в этом?