Rollup-plugin-typescript2: التجميع بطيء جدًا مع TS v3.4

تم إنشاؤها على ٩ أبريل ٢٠١٩  ·  21تعليقات  ·  مصدر: ezolenko/rollup-plugin-typescript2

ماذا يحدث ولماذا هو خطأ

بمجرد ترقية TS إلى الإصدار 3.4.2 ، يصبح وقت التجميع بطيئًا جدًا. مع TS v3.3 ، فإن مشروعي المدمج في حوالي 20 ثانية ومع TS v3.4 يستغرق حوالي 5 ملايين.

حاولت باستخدام clean: true ، حاولت إضافة typescript: require('typescript') ، حاولت ترقية rollup وجميع الإضافات ذات الصلة .. في كل مرة ، نفس النتيجة تستغرق عملية التجميع الكثير من الوقت .

ملاحظة: عندما أقوم بتشغيل tsc -p tsconfig.prod.json مباشرة ، يستغرق إخراج التوزيع أقل من 10 ثوانٍ.

بيئة

إصدارات

  • مطبوعة: v3.4.2
  • تراكمي: v1.6.0
  • Rollup-plugin-typescript2: v0.19.2

rollup.config.js

  {
    input: 'src/index.ts',
    output: [
      { file: pkg.main, format: 'cjs' },
      { file: pkg.module, format: 'es' },
    ],
    plugins: [
      external({ includeDependencies: true }),
      resolve(),
      typescript({
        tsconfig: './tsconfig.prod.json',
        rollupCommonJSResolveHack: true,
      }),
      commonjs(),
      filesize(),
    ],
  }

tsconfig.json


tsconfig.json

{
  "compilerOptions": {
    "module": "esnext",
    "target": "es5",
    "jsx": "react",
    "esModuleInterop": true,
    "lib": ["dom", "es2017"],
    "moduleResolution": "node",
    "rootDir": "src",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": false,
    "downlevelIteration": true
  },
  "include": ["src/**/*", "types/**/*"]
}


tsconfig.prod.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./dist",
    "noUnusedLocals": true,
    "sourceMap": true,
    "declaration": true
  },
  "exclude": ["src/doc", "**/stories.tsx", "**/test.tsx", "**/fixture.ts"]
}

package.json

    "rollup": "^1.6.0",
    "rollup-plugin-commonjs": "^9.2.1",
    "rollup-plugin-filesize": "^6.0.1",
    "rollup-plugin-node-resolve": "^4.0.1",
    "rollup-plugin-peer-deps-external": "^2.2.0",
    "rollup-plugin-typescript2": "^0.19.2",
    "typescript": "^3.4.2"

إخراج البرنامج المساعد مع الإسهاب 3


انتاج |

rpt2: typescript version: 3.4.2
rpt2: tslib version: 1.9.3
rpt2: rollup-plugin-typescript2 version: 0.19.2
rpt2: plugin options:
{
    "tsconfig": "./tsconfig.prod.json",
    "rollupCommonJSResolveHack": true,
    "clean": true,
    "verbosity": 3,
    "typescript": "version 3.4.2",
    "check": true,
    "cacheRoot": "/Users/yannpringault/git/PayFit/components/.rpt2_cache",
    "include": [
        "*.ts+(|x)",
        "**/*.ts+(|x)"
    ],
    "exclude": [
        "*.d.ts",
        "**/*.d.ts"
    ],
    "abortOnError": true,
    "useTsconfigDeclarationDir": false,
    "tsconfigOverride": {},
    "transformers": [],
    "tsconfigDefaults": {},
    "objectHashIgnoreUnknownHack": false
}
rpt2: rollup config:
{
    "chunkGroupingSize": 5000,
    "experimentalCacheExpiry": 10,
    "inlineDynamicImports": false,
    "input": "src/index.ts",
    "perf": false,
    "plugins": [
        {
            "name": "peer-deps-external"
        },
        {
            "name": "node-resolve"
        },
        {
            "name": "rpt2"
        },
        {
            "name": "commonjs"
        },
        {
            "name": "filesize"
        }
    ]
}
rpt2: built-in options overrides: {
    "noEmitHelpers": false,
    "importHelpers": true,
    "noResolve": false,
    "noEmit": false,
    "inlineSourceMap": false,
    "outDir": "/Users/yannpringault/git/PayFit/components/.rpt2_cache/placeholder",
    "moduleResolution": 2,
    "allowNonTsExtensions": true,
    "declarationDir": "/Users/yannpringault/git/PayFit/components"
}
rpt2: parsed tsconfig: {
    "options": {
        "module": 6,
        "target": 1,
        "jsx": 2,
        "esModuleInterop": true,
        "lib": [
            "lib.dom.d.ts",
            "lib.es2017.d.ts"
        ],
        "moduleResolution": 2,
        "rootDir": "/Users/yannpringault/git/PayFit/components/src",
        "forceConsistentCasingInFileNames": true,
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noImplicitAny": true,
        "strictNullChecks": true,
        "suppressImplicitAnyIndexErrors": true,
        "noUnusedLocals": true,
        "downlevelIteration": true,
        "outDir": "/Users/yannpringault/git/PayFit/components/.rpt2_cache/placeholder",
        "sourceMap": true,
        "declaration": true,
        "configFilePath": "/Users/yannpringault/git/PayFit/components/./tsconfig.prod.json",
        "noEmitHelpers": false,
        "importHelpers": true,
        "noResolve": false,
        "noEmit": false,
        "inlineSourceMap": false,
        "allowNonTsExtensions": true,
        "declarationDir": "/Users/yannpringault/git/PayFit/components"
    },
    "fileNames": [
        "/Users/yannpringault/git/PayFit/components/src/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/Alert/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Alert/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Avatar/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Avatar/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/AvatarGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/AvatarGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Badge/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Badge/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Button/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Button/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Checkbox/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Checkbox/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/CheckboxGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/CheckboxGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/DatePicker/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/DatePicker/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/DatePicker/Popin/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/MenuContext.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/DropdownItem/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/DropdownItem/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Field/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Field/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Icon/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Icon/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Input/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Input/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Layout/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Legend/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Legend/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Loader/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Loader/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressBar/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressBar/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressCircle/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressCircle/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/RadioGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/RadioGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Select/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Select/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Steps/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Steps/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Body.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Cell.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Footer.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Header.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/HeaderCell.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/HeaderRow.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Limit.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Row.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/TableGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/TableGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tag/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tag/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Text/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Toggle/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Toggle/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tooltip/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tooltip/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/colors.test.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/colors.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/react.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/string.test.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/string.ts",
        "/Users/yannpringault/git/PayFit/components/src/primitives/_helpers.tsx",
        "/Users/yannpringault/git/PayFit/components/src/primitives/box.tsx",
        "/Users/yannpringault/git/PayFit/components/src/primitives/text.tsx",
        "/Users/yannpringault/git/PayFit/components/src/utils/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/colors/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/shadows/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/shadows/test.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/zIndex/index.ts",
        "/Users/yannpringault/git/PayFit/components/types/index.d.ts",
        "/Users/yannpringault/git/PayFit/components/types/modules.d.ts"
    ],
    "typeAcquisition": {
        "enable": false,
        "include": [],
        "exclude": []
    },
    "raw": {
        "extends": "./tsconfig.json",
        "compilerOptions": {
            "outDir": "./dist",
            "noUnusedLocals": true,
            "sourceMap": true,
            "declaration": true
        },
        "exclude": [
            "src/doc",
            "**/stories.tsx",
            "**/test.tsx",
            "**/fixture.ts"
        ],
        "compileOnSave": false,
        "include": [
            "src/**/*",
            "types/**/*"
        ]
    },
    "errors": [],
    "wildcardDirectories": {
        "/users/yannpringault/git/payfit/components/src": 1,
        "/users/yannpringault/git/payfit/components/types": 1
    },
    "compileOnSave": false,
    "configFileSpecs": {
        "includeSpecs": [
            "src/**/*",
            "types/**/*"
        ],
        "excludeSpecs": [
            "src/doc",
            "**/stories.tsx",
            "**/test.tsx",
            "**/fixture.ts"
        ],
        "validatedIncludeSpecs": [
            "src/**/*",
            "types/**/*"
        ],
        "validatedExcludeSpecs": [
            "src/doc",
            "**/stories.tsx",
            "**/test.tsx",
            "**/fixture.ts"
        ],
        "wildcardDirectories": {
            "/users/yannpringault/git/payfit/components/src": 1,
            "/users/yannpringault/git/payfit/components/types": 1
        }
    }
}
rpt2: included:
'[
    "*.ts+(|x)",
    "**/*.ts+(|x)"
]'
rpt2: excluded:
'[
    "*.d.ts",
    "**/*.d.ts"
]'

blocked help wanted

التعليق الأكثر فائدة

ezolenko آسف على الرد المتأخر!

وضعت clean: true وقمت بترقية rtp2 إلى 0.20.1 . ها هي النتائج:

TS 3.3.3333

build -> 18s
tsc   -> 14.39s

TS 3.3.4000

build -> 17.3s
tsc   -> 14.39s

TS 3.4.1

build -> 5m 25.1s
tsc   -> 21.26s

TS 3.4.3

build -> 5m 52.7s
tsc   -> 21.57s

بالإضافة إلى ذلك ، توجد هذه المشكلة في TS repo والتي تبدو ذات صلة ولكن لديّ @types/styled-components مثبت في v4.1.4 لذلك لا يغطي حالتي.

اسمحوا لي أن أعرف إذا كنت بحاجة إلى مزيد من المعلومات.


من أجل المتعة ، جربت أيضًا أحدث إصدار من 3.5 :

TS 3.5.0-dev.20190413

build -> 1m 23.5s
tsc   -> 18.84s

ال 21 كومينتر

لدي نفس المشكلة. انتقل من 24s إلى 345s عند ارتطام TS من 3.3.4000 إلى 3.4.3

حاولت التكاثر وفي البداية رأيت تباطؤًا ، ولكن باستخدام clean: true والذهاب ذهابًا وإيابًا بين الإصدارات المطبوعة عدة مرات ، لا أرى الفرق في الإنشاء النظيف الآن ...

هل يمكنك تعيين clean: true ، وتحديث rtp2 إلى الأحدث (0.20.1 أو Master) ووقت الإنشاء عدة مرات متتالية على ts 3.3 و ts 3.4؟

ezolenko آسف على الرد المتأخر!

وضعت clean: true وقمت بترقية rtp2 إلى 0.20.1 . ها هي النتائج:

TS 3.3.3333

build -> 18s
tsc   -> 14.39s

TS 3.3.4000

build -> 17.3s
tsc   -> 14.39s

TS 3.4.1

build -> 5m 25.1s
tsc   -> 21.26s

TS 3.4.3

build -> 5m 52.7s
tsc   -> 21.57s

بالإضافة إلى ذلك ، توجد هذه المشكلة في TS repo والتي تبدو ذات صلة ولكن لديّ @types/styled-components مثبت في v4.1.4 لذلك لا يغطي حالتي.

اسمحوا لي أن أعرف إذا كنت بحاجة إلى مزيد من المعلومات.


من أجل المتعة ، جربت أيضًا أحدث إصدار من 3.5 :

TS 3.5.0-dev.20190413

build -> 1m 23.5s
tsc   -> 18.84s

هذه المشكلة التي وجدتها (https://github.com/Microsoft/TypeScript/issues/30663) وحقيقة أن 3.5-dev أصبح أسرع بخمس مرات بالنسبة لك تجعلني أعتقد أنهم فعلوا شيئًا باستخدام LanguageServer API. هذا هو API rpt2 الذي يستخدم كجزء من التجميع وما تستخدمه أدوات التحقق من الكتابة في IDEs (وهذا هو سبب انتهاء مهلة WebStorm وما إلى ذلك).

ربما يستخدم مشروعك هياكل من النوع المتأثر في مكان آخر ، ولهذا السبب لا يساعد تثبيت styled-components . ولهذا السبب لا أرى تباطؤًا كبيرًا عند بناء rpt2 نفسها على سبيل المثال.

أعتقد أننا سننتظر الإصدار 3.5 النهائي.

راجع للشغل ، حاول البناء باستخدام خيار check: false

هل أكد أي شخص ما إذا كان هذا ثابتًا مع الإصدار 3.5؟

@ tomasro27 ليس لي ولا مع 6 ( 3.6.0-dev.20190621 ). يبدو <3.3 لا يزال الأسرع.

يبدو أن الإصدار 3.5 أسرع قليلاً ولكن لا يزال من الممكن أن يكون أفضل

هل هناك أي تحديث على ذلك؟ يبدو أنه لا يزال محظورًا بواسطة TS؟

نعم ، لا أعتقد أنه يمكن فعل أي شيء من هذه النهاية. نرحب بأي شخص للمحاولة على الرغم من :)

+1
3.5.3 أيضًا بطيئة جدًا بالنسبة لنا

check: false يعمل بشكل رائع.

لكن المشكلة تكمن في أنه لا يعطي أي خطأ في التجميع (إذا كنت تستخدم vscode ، فسيؤدي ذلك إلى ظهور الأخطاء 😄).

يمكنني على الأقل عمل check: false عندما أعمل على CSS (في JS). 👍

ezolenko هل تعرف ما هي مكالمة api

ZinBrombie لا ، كل ما أعرفه موجود في هذا الموضوع. من المحتمل أن تكون مشكلة الطباعة المرتبطة مرتبطة ، ولكنها ليست سببًا مباشرًا (لأنهم يقولون إنه يجب إصلاحها في 3.5+ ، ومن الواضح أنها ليست كذلك).

إذا كان لديك تصميمات بطيئة في مشروعك ، فتحقق مما إذا كانت ts 3.3 هي في الواقع أسرع إن أمكن ، فربما لا تكون المشكلة مطبوعة ، ولكنها شيء آخر.

تمام شكرا. إذا تمكنت من الالتفاف حوله ، فقد يكون هذا جدارًا ، فأنا على استعداد لضرب رأسي ضده إذا جاز التعبير :)

تحرير: تحدث هذه المشكلة فقط للملفات التي تستورد المكونات ذات الأنماط كما تبدو
أيضا ، التوثيق المطبوع هو أمر فظيع

يكشف التنميط المطبوع على الحروف أن مصدر المشكلة هو هذه النقابات الكبيرة للغاية التي تحتوي عليها المكونات المصممة. المكان الوحيد لإصلاح هذا هو الكتابة المطبوعة ، ما لم تكن هناك طريقة للحصول على نسخة مطبوعة على دقة وحدة التخزين المؤقت (وهو ما ينبغي).

أنا في الواقع لا أستخدم ذاكرة التخزين المؤقت لدقة الوحدة النمطية في استدعاء nodeModuleNameResolver هنا: https://github.com/ezolenko/rollup-plugin-typescript2/blob/b7c7389dcdf168715669520128ca656d6e940111/src/index.ts#L148

لست متأكدًا مما إذا كان ذلك يجعل ts يستخدم واحدًا افتراضيًا أم لا يستخدم واحدًا على الإطلاق.

نعم رأيت أن TODO :)
لسوء الحظ ، يظهر تصحيح أخطاء ذاكرة التخزين المؤقت لدقة الوحدة النمطية عند استخدامها أنه يخزن rebass ولكن ليس المكونات المصممة لسبب ما. يمرر ذاكرة تخزين مؤقت داخلية لهؤلاء ...

أنا حاليًا بصدد ترحيل C # codebase الخاص بي من مكتبتي إلى TypeScript وأنا أستخدم Rollup للتجميع. (كان لدي سلسلة أدوات C #> Haxe> JavaScript مخصصة من قبل). لسوء الحظ ، أعاني أيضًا كثيرًا من سرعة الترجمة لقاعدة كود TypeScript الجديدة الخاصة بي مما يجعل التطوير صعبًا للغاية.

إذا أمكن ، يسعدني تقديم بعض تقارير التنميط إذا كان من الممكن إنشاؤها.

إليك بعض الأفكار حول مشروعي:

عادةً ما أستخدم ttypescript للقيام ببعض تحويل AST.
أسطر الكود : ~ 50000

Rollup -c rollup.config.ts : ~ 9-10sec
Rollup -c rollup.config.ts -w (ترجمة أولية) : ~ 9-10sec
rollup -c rollup.config.ts -w (إضافة تنبيه واحد في ملف TS واحد) : حوالي 20 ثانية
Rollup -c rollup.config.ts -w (إزالة التنبيه مرة أخرى) : ~ 20

tsc - الإصدار : 3.8.3
tsc - مشروع tsconfig.json : ~ 6-7sec
tsc --project tsconfig.json -w (ترجمة أولية) : ~ 6-7sec
tsc --project tsconfig.json -w (إضافة تنبيه واحد في ملف TS واحد) : ~ 0.1-0.2 ثانية
tsc --project tsconfig.json -w (إزالة التنبيه مرة أخرى) : ~ 0.1-0.2sec

ttsc - الإصدار :
ttsc - مشروع tsconfig.json : ~ 7-8sec
ttsc - مشروع tsconfig.json -w (ترجمة أولية) : ~ 6-7sec
ttsc - مشروع tsconfig.json -w (إضافة تنبيه واحد في ملف TS واحد) : ~ 0.1-0.2 ثانية
ttsc - مشروع tsconfig.json -w (إزالة التنبيه مرة أخرى) : ~ 0.1-0.2 ثانية

عمليات البناء الإضافية نشطة في tsconfig.

يبدو لي أنه من غير المعتاد أن يستغرق البناء الإضافي / الساعة ضعف ما يتطلبه التصميم الكامل.

يبدو أن الأمور تسير بشكل جنوني في بيئتي عندما يتعلق الأمر بالاختبار. لقد قمت بتوصيل تراكمي مع الكارما وهذا البرنامج المساعد المطبوع. كما تعلم: تحصل كل مجموعة اختبار على الحزمة الخاصة بها ، مما يعني أن الأرقام المذكورة أعلاه تتراكم. تنمو الذاكرة إلى> 2 غيغابايت بمرور الوقت ؛ حتى بعد دقائق ، لا يبدأ التشغيل التجريبي فعليًا. يحدث هذا في كل npm run test .

بمجرد وصولها إلى منطقة "Generating bundle for ..." في جيل الاختبار ، أرى أرقامًا عالية سخيفة:
يستغرق File01.test.ts الذي يحتوي على اختبار بسيط لفئة المحلل اللغوي 15 ثانية
يحتاج File02.test.ts الذي يحتوي على 11 اختبارًا لتحليل XML إلى 2.5 دقيقة
File03.test.ts لم يكتمل حتى بعد 5 دقائق.

ليس لدي أي فكرة عن مكان حدوث هذه المشكلة وما إذا كان ذلك حقًا بسبب وحدة الكتابة المطبوعة من مجموعة التحديثات ولكن يبدو أن هذه هي المشكلة الأكثر احتمالاً التي أتعلق بها.

نظرًا لأن الريبو الخاص بي كبير جدًا ومعقد ، لم أشارك المزيد من التفاصيل حول التكوينات. إذا كان بإمكان أي شخص أن يرشدني إلى كيفية جمعها ، فسأكون سعيدًا بتقديم السجلات / نتائج التوصيف وما إلى ذلك. وسأحاول إعداد مستودع مستقل بسيط جديد يعكس الوضع العام لمشروعي ، لكن لا يمكنني أن أعد بأن المشكلة ستستمر.

@ Danielku15 مشكلتك الرئيسية هي أنك تهاجر من C # وليس من C ++ :)

لا يستخدم هذا المكون الإضافي بشكل صريح البنيات المتزايدة الخاصة بالنسخة المطبوعة (لم يكن هذا موجودًا عند بدء تشغيله).

يمكنك تجربة @rollup/plugin-typescript (https://github.com/rollup/plugins/tree/master/packages/typescript) ، فهم يستخدمون أسلوبًا مختلفًا على ما أعتقد وقد يعطونك أرقامًا مختلفة.

خيار آخر هو القيام بترجمة مطبوعة من سلسلة التجميع (كخطوة ما قبل البناء في npm أو شيء من هذا القبيل) وتغذية js الناتجة للتجميع بدلاً من ذلك. سيكون إنشاء الساعة ممتعًا ، على الرغم من أنني أعتقد أنه يمكنك بدء tsc والتجميع في وضع المراقبة وإذا تم تكوين المشروع بشكل صحيح ، فسيعمل فقط.

مشكلتك الرئيسية هي أنك تهاجر من C # وليس من C ++

خارج الموضوع: لست متأكدًا مما إذا كنت أرغب في ترحيل إطار / مكتبة C ++ إلى TypeScript. اعتمادًا على استخدام وحدات الماكرو والقوالب (التي يميل مطورو C ++ إلى حبها) ، قد تصبح الأشياء متوحشة أثناء الترحيل 😅 لحسن الحظ ، تم تصميم قاعدة كود C # الخاصة بي دائمًا لنمط يسمح بالتجميع المتقاطع مع لغات أخرى ، وبالتالي فإن النتيجة مقبولة تمامًا من بنية التعليمات البرمجية . أنا فقط بحاجة إلى معرفة كيفية تنظيم الوحدات بشكل أفضل قليلاً لتقليل بعض النفقات العامة. 😊

لا يستخدم هذا المكون الإضافي بشكل صريح البنيات المتزايدة الخاصة بالنسخة المطبوعة (لم يكن هذا موجودًا عند بدء تشغيله).

هذا مثير للاهتمام ، هل يحتوي هذا البرنامج المساعد على إستراتيجية بناء "تزايدية" مخصصة؟ قد يفسر هذا سبب استغراق التصميم النظيف الكامل وقتًا أطول من تغيير المصدر عند استخدام الساعة. يعتبر التجميع المطبوع عليه مستقرًا إلى حد ما ، ومن المؤسف أن هذا البرنامج المساعد لا يمكنه الاستفادة من التحديثات الإضافية حتى الآن ، لكنني أعتقد أن الوقت الذي يقضيه في برنامج التحويل البرمجي للنوع مستقر. لكن يبدو أن الوقت الذي يقضيه في التراكمي متفاوت. هذا فقط يشرح لي أن البناء النظيف أسرع من تغيير الكود مع وضع الساعة.

يمكنك تجربة @ rollup / plugin-typescript ...

شكرًا على التلميح الذي سأجربه لمعرفة ما إذا كان يتحسن.

خيار آخر هو القيام بترجمة مطبوعة من سلسلة التجميع

كان لدي مثل هذا الإعداد في البداية ولكني تركته في منتصف الطريق للحصول على "مشاهدة" أثناء التطوير. سأعطيها مرة أخرى فرصة إذا كان بإمكاني توصيل خط أنابيب بالأداتين "المشاهدة" بشكل مستقل. 👍

التحديث 1: لقد تمكنت من إعداد بيئة الترجمة والاختبار بالكامل الآن من خلال استدعاء tsc المربوطة بالسلاسل. كنت بحاجة إلى إنشاء مكون إضافي خاص بي من أجل حل مسارات tsconfig بشكل صحيح ولكن بعد ذلك كان يعمل بشكل جيد.

التجميع النظيف: 9 ثوانٍ ، تجميع الساعة: 0.5-1 ثانية والاختبارات عبر Karma + Rollup قيد التشغيل أيضًا (يستغرق التجميع هناك وقتًا أطول قليلاً لأنه ينشئ حزمة لكل مجموعة اختبار).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات