Heroku: Как уменьшить размер слагов приложений.NET Core/ Angular?
Я получаю предупреждения Heroku о слишком большом размере пули:
-----> Compressing...
Done: 304.9M
-----> Launching...
! Warning: Your slug size exceeds our soft limit (304 MB) which may affect boot time.
Как я могу уменьшить размер своего слизняка? Это приложение.NET Core 2.1.401 и Angular 6, поэтому я использую следующие пакеты сборки:
Бег heroku run "du . -h --max-depth=3 --threshold=1M"
дает следующий результат:
2.5M ./App/obj
524M ./App/ClientApp/node_modules
16M ./App/ClientApp/dist
9.4M ./App/ClientApp/src
549M ./App/ClientApp
2.5M ./App/bin/Release
3.3M ./App/bin
556M ./App
16M ./heroku_output/ClientApp/dist
16M ./heroku_output/ClientApp
130M ./heroku_output
189M ./.heroku/dotnet/sdk
140M ./.heroku/dotnet/shared
329M ./.heroku/dotnet
27M ./.heroku/node/lib
3.0M ./.heroku/node/include
34M ./.heroku/node/bin
63M ./.heroku/node
391M ./.heroku
11M ./.apt/usr/lib
3.3M ./.apt/usr/include
15M ./.apt/usr
15M ./.apt
1.1G .
Основная масса находится в node_modules/
(524M), ./heroku/dotnet/
(329M) и ./heroku_output
(130М).
Я не думаю, что я могу использовать .slugignore
файл, потому что node_modules
папка требуется для процесса сборки, поэтому я попытался удалить node_modules/
папка после dotnet publish
используя эту запись в приложении .csproj
, но это не уменьшило размер пули.
<Target Name="CleanupNodeModules" AfterTargets="Publish">
<Exec WorkingDirectory="$(SpaRoot)" Command="rm -rf node_modules" Condition=" '$(OS)' != 'Windows_NT' " ConsoleToMSBuild="true" />
</Target>
Есть идеи?
1 ответ
Возможно, вы захотите использовать IL Linker для дальнейшего уменьшения размера.NET Core. По сути, он проверит наличие неиспользуемых зависимостей и удалит эти библиотеки классов с недоступным кодом. Я увидел сокращение размера на 30-50% в автономном консольном приложении.NET Core в macOS и Windows.
Я создал запрос на извлечение для создания проекта.NET Core как отдельного exe
и удалите.NET Core SDK впоследствии.
После этого я перешел с 304MB на 149MB!
Похоже node_modules
не имеет никакого эффекта...