Built with --stats-json and read the esbuild metafile instead of guessing. @angular/compiler was 495,831 bytes of a 1.5 MB main chunk - the JIT compiler, in an AOT production build, 33% of everything an anonymous visitor downloads. src/main.ts imported it deliberately, with a comment explaining that @marketplaces/auth shipped plain tsc output carrying no Ivy metadata, so Angular JIT-compiled its classes at runtime and bootstrap threw without it. That comment was stale. The package is 0.2.0, built with ng-packagr, module: dist/fesm2022/marketplaces-auth.mjs - proper Angular Package Format, partial-compiled (ɵɵngDeclareInjectable), linked at consumer build time. Nothing needs JIT. Verified against the production bundle served statically, not just a green build: the failure mode this guarded was a runtime throw, so a successful compile proves nothing. Angular 22.0.8 bootstrapped, the router resolved /ru, and the app rendered its own "server unavailable" screen - meaning DI, HttpClient and the full interceptor chain ran. That chain injects AuthService from @marketplaces/auth, the exact class the old comment named. Zero JIT or compiler errors; the only console output was the expected 404s from having no backend behind a static server. Initial bundle 1.55 MB -> 1.04 MB raw, 323.58 kB -> 215.45 kB transfer. Budget ratchet lowered 1.6MB -> 1.1MB, which is now also what stops the import being re-added. Next lever, deliberately not taken here: i18n/ru.ts is 290 kB, eager, while en/hy are already lazy. TranslateService has the loader plumbing and languageGuard already awaits a preload, so it is mechanically small - but it adds a round-trip before first paint for the majority language, which is a product tradeoff, not a cleanup. Roughly a 750 kB bundle once someone decides. 256 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
155 lines
4.4 KiB
JSON
155 lines
4.4 KiB
JSON
{
|
|
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
|
"version": 1,
|
|
"newProjectRoot": "projects",
|
|
"projects": {
|
|
"Dexarmarket": {
|
|
"projectType": "application",
|
|
"schematics": {
|
|
"@schematics/angular:component": {
|
|
"style": "scss"
|
|
}
|
|
},
|
|
"root": "",
|
|
"sourceRoot": "src",
|
|
"prefix": "app",
|
|
"architect": {
|
|
"build": {
|
|
"builder": "@angular/build:application",
|
|
"options": {
|
|
"outputPath": "dist/dexarmarket",
|
|
"browser": "src/main.ts",
|
|
"polyfills": [
|
|
"zone.js"
|
|
],
|
|
"tsConfig": "tsconfig.app.json",
|
|
"inlineStyleLanguage": "scss",
|
|
"assets": [
|
|
{
|
|
"glob": "**/*",
|
|
"input": "public"
|
|
},
|
|
{
|
|
"glob": "**/*",
|
|
"input": "src/assets",
|
|
"output": "assets"
|
|
}
|
|
],
|
|
"styles": [
|
|
"src/styles.scss"
|
|
]
|
|
},
|
|
"configurations": {
|
|
"production": {
|
|
"fileReplacements": [
|
|
{
|
|
"replace": "src/environments/environment.ts",
|
|
"with": "src/environments/environment.production.ts"
|
|
},
|
|
{
|
|
"replace": "src/app/interceptors/mock-data.interceptor.ts",
|
|
"with": "src/app/interceptors/mock-data.interceptor.production.ts"
|
|
},
|
|
{
|
|
"replace": "src/app/mock-gateway.providers.ts",
|
|
"with": "src/app/mock-gateway.providers.production.ts"
|
|
}
|
|
],
|
|
"styles": [
|
|
"src/styles.scss",
|
|
"src/styles/themes/dexar.theme.scss"
|
|
],
|
|
"budgets": [
|
|
{
|
|
"type": "initial",
|
|
"maximumWarning": "700kB",
|
|
"maximumError": "1.1MB"
|
|
},
|
|
{
|
|
"type": "anyComponentStyle",
|
|
"maximumWarning": "40kB",
|
|
"maximumError": "50kB"
|
|
}
|
|
],
|
|
"outputHashing": "all",
|
|
"optimization": {
|
|
"scripts": true,
|
|
"styles": {
|
|
"minify": true,
|
|
"inlineCritical": true
|
|
},
|
|
"fonts": {
|
|
"inline": true
|
|
}
|
|
},
|
|
"sourceMap": false,
|
|
"namedChunks": false,
|
|
"extractLicenses": true,
|
|
"serviceWorker": "ngsw-config.json"
|
|
},
|
|
"development": {
|
|
"styles": [
|
|
"src/styles.scss",
|
|
"src/styles/themes/dexar.theme.scss"
|
|
],
|
|
"optimization": false,
|
|
"extractLicenses": false,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
"defaultConfiguration": "production"
|
|
},
|
|
"serve": {
|
|
"options": {
|
|
"allowedHosts": [
|
|
"dexarmarket.ru",
|
|
"dexar.market",
|
|
"localhost"
|
|
]
|
|
},
|
|
"builder": "@angular/build:dev-server",
|
|
"configurations": {
|
|
"production": {
|
|
"buildTarget": "Dexarmarket:build:production"
|
|
},
|
|
"development": {
|
|
"proxyConfig": "proxy.conf.json",
|
|
"buildTarget": "Dexarmarket:build:development"
|
|
}
|
|
},
|
|
"defaultConfiguration": "development"
|
|
},
|
|
"extract-i18n": {
|
|
"builder": "@angular/build:extract-i18n"
|
|
},
|
|
"test": {
|
|
"builder": "@angular/build:karma",
|
|
"options": {
|
|
"polyfills": [
|
|
"zone.js",
|
|
"zone.js/testing"
|
|
],
|
|
"tsConfig": "tsconfig.spec.json",
|
|
"karmaConfig": "karma.conf.js",
|
|
"inlineStyleLanguage": "scss",
|
|
"assets": [
|
|
{
|
|
"glob": "**/*",
|
|
"input": "public"
|
|
},
|
|
{
|
|
"glob": "**/*",
|
|
"input": "src/assets",
|
|
"output": "assets"
|
|
}
|
|
],
|
|
"styles": [
|
|
"src/styles.scss"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|