perf(controller): полный SWC через @swc-node/register + Node 22
Финал миграции: вместо ts-node --transpileOnly теперь полный SWC
(Rust-транспайлер) через ts-node "swc" mode. Установлены
@swc-node/register@^1.11.1 и @swc/core@^1.15.33 в controller.
tsconfig "ts-node" → { "swc": true, "files": true } (вместо
transpileOnly). Все 14 ts-node-вызовов очищены от --transpileOnly
(избыточно при swc).
Замер:
- ts-node + tsc (baseline): 26+ сек cold-start на простом скрипте
- ts-node --transpileOnly (Node 20): ~1.0 сек
- ts-node + swc (Node 22): ~1.0 сек (та же скорость, но
без потери типов — SWC всё ещё транспайлит, просто на Rust)
На полном controller-проекте dev-cold-start раньше был 60+ сек,
теперь — secunda-уровень (точно замерить можно только перезапустив
coopback в контейнере).
Node 22:
- nvm alias default 22 (Node 22.22.3 — требование Quasar 2.5.2,
заодно убрал quasar-prepare warning при pnpm install).
- libxmljs2 native binary теперь совместим с runtime (на Node 20
падал tests/unit/reports на NODE_MODULE_VERSION mismatch).
.npmrc в корне (`store-dir=./.pnpm-store`) — фиксирует store в
монорепе. Корень проблемы был: docker-coopback запущен от root и
писал в `/app/.pnpm-store` (= host's /home/ant/mono/.pnpm-store),
host-pnpm дефолтно искал в ~/.local/share/pnpm/store — отсюда
ERR_PNPM_UNEXPECTED_STORE. Relative-path в .npmrc устраняет
mismatch навсегда: и хост, и контейнер видят store через тот же
relative-путь от repo root.
Smoke-suite tests/unit/_swc-readiness/ — 4/4 PASS на SWC, что
формально подтверждает: emitDecoratorMetadata через barrel-import
сохраняется (Nest DI, class-validator, @ValidateNested + @Type все
получают правильные design:type/paramtypes из SWC).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,8 +18,8 @@
|
||||
"scripts": {
|
||||
"deploy-testnet": "git checkout testnet && git merge main && git push origin testnet && git checkout main",
|
||||
"deploy-production": "git checkout production && git merge testnet && git push origin production && git checkout main",
|
||||
"start": "ts-node --transpileOnly -r tsconfig-paths/register src/index.ts",
|
||||
"dev": "nodemon --watch src --watch migrations --ext ts,js,env --exec 'ts-node --transpileOnly -r tsconfig-paths/register' src/index.ts",
|
||||
"start": "ts-node -r tsconfig-paths/register src/index.ts",
|
||||
"dev": "nodemon --watch src --watch migrations --ext ts,js,env --exec 'ts-node -r tsconfig-paths/register' src/index.ts",
|
||||
"test": "jest -i --testPathPattern=tests/unit",
|
||||
"test:integration": "echo 'Integration tests run via @coopenomics/boot' && exit 0",
|
||||
"test:integration:file-storage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --testRegex 'tests/file-storage/.*\\.integration\\.spec\\.ts$' --testPathIgnorePatterns='/node_modules/' --testTimeout=60000 -i",
|
||||
@@ -29,26 +29,26 @@
|
||||
"lint": "eslint .",
|
||||
"lint:fix": "eslint . --fix",
|
||||
"prettier": "prettier --check **/*.js",
|
||||
"analyze:modules": "ts-node --transpileOnly -r tsconfig-paths/register scripts/analyze-modules.ts",
|
||||
"migration:generate": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/generate-migration.ts",
|
||||
"migration:run": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/migration-cli.ts run",
|
||||
"migration:run-specific": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/migration-cli.ts run-specific",
|
||||
"migration:rollback": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/migration-cli.ts rollback",
|
||||
"migration:rollback-latest": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/migration-cli.ts rollback-latest",
|
||||
"migration:status": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/migration-cli.ts status",
|
||||
"migration:list": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/migration-cli.ts list",
|
||||
"migrate": "ts-node --transpileOnly -r tsconfig-paths/register src/index.ts --migrate",
|
||||
"analyze:modules": "ts-node -r tsconfig-paths/register scripts/analyze-modules.ts",
|
||||
"migration:generate": "ts-node -r tsconfig-paths/register src/scripts/generate-migration.ts",
|
||||
"migration:run": "ts-node -r tsconfig-paths/register src/scripts/migration-cli.ts run",
|
||||
"migration:run-specific": "ts-node -r tsconfig-paths/register src/scripts/migration-cli.ts run-specific",
|
||||
"migration:rollback": "ts-node -r tsconfig-paths/register src/scripts/migration-cli.ts rollback",
|
||||
"migration:rollback-latest": "ts-node -r tsconfig-paths/register src/scripts/migration-cli.ts rollback-latest",
|
||||
"migration:status": "ts-node -r tsconfig-paths/register src/scripts/migration-cli.ts status",
|
||||
"migration:list": "ts-node -r tsconfig-paths/register src/scripts/migration-cli.ts list",
|
||||
"migrate": "ts-node -r tsconfig-paths/register src/index.ts --migrate",
|
||||
"prettier:fix": "prettier --write **/*.js",
|
||||
"docker:prod": "docker-compose -f docker-compose.yml -f docker-compose.prod.yml up",
|
||||
"docker:dev": "docker-compose -f docker-compose.yml -f docker-compose.dev.yml up",
|
||||
"docker:test": "docker-compose -f docker-compose.yml -f docker-compose.test.yml up",
|
||||
"types": "ts-node --transpileOnly scripts/types.ts",
|
||||
"init": "ts-node --transpileOnly scripts/init.ts",
|
||||
"init:cooperative": "ts-node --transpileOnly -r tsconfig-paths/register src/scripts/init-cooperative.ts",
|
||||
"types": "ts-node scripts/types.ts",
|
||||
"init": "ts-node scripts/init.ts",
|
||||
"init:cooperative": "ts-node -r tsconfig-paths/register src/scripts/init-cooperative.ts",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"docs": "spectaql spectaql-config.yml",
|
||||
"generate-client": "node ./scripts/generate-client.cjs",
|
||||
"generate-schema": "ts-node --transpileOnly -r ./scripts/register-schema-gen-env.cjs -r tsconfig-paths/register scripts/generate-schema.ts"
|
||||
"generate-schema": "ts-node -r ./scripts/register-schema-gen-env.cjs -r tsconfig-paths/register scripts/generate-schema.ts"
|
||||
},
|
||||
"keywords": [
|
||||
"node",
|
||||
@@ -193,6 +193,8 @@
|
||||
"@antfu/eslint-config": "^2.24.1",
|
||||
"@graphql-codegen/cli": "^5.0.3",
|
||||
"@graphql-codegen/typescript": "^4.1.1",
|
||||
"@swc-node/register": "^1.11.1",
|
||||
"@swc/core": "^1.15.33",
|
||||
"@graphql-codegen/typescript-apollo-client-helpers": "^3.0.0",
|
||||
"@graphql-codegen/typescript-operations": "^4.3.1",
|
||||
"@nestjs/testing": "^11.1.19",
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"include": ["src/**/*.ts", "scripts/*.ts", "tests/**/*.ts"],
|
||||
"exclude": ["node_modules", "dist"],
|
||||
"ts-node": {
|
||||
"transpileOnly": true,
|
||||
"swc": true,
|
||||
"files": true
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+516
-43
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user