Rollup-plugin-typescript2: Kompilasi sangat lambat dengan TS v3.4

Dibuat pada 9 Apr 2019  ·  21Komentar  ·  Sumber: ezolenko/rollup-plugin-typescript2

Apa yang terjadi dan mengapa itu salah

Setelah saya mengupgrade TS ke v3.4.2, waktu kompilasi menjadi sangat lambat. Dengan TS v3.3 proyek saya dibangun di ~ 20s dan dengan TS v3.4 dibutuhkan ~ 5mn.

Saya mencoba dengan clean: true , saya mencoba menambahkan typescript: require('typescript') , saya mencoba memutakhirkan rollup dan semua plugin terkait .. Setiap kali, kompilasi hasil yang sama membutuhkan banyak waktu .

Catatan: ketika saya menjalankan tsc -p tsconfig.prod.json secara langsung, dibutuhkan kurang dari 10 detik untuk mengeluarkan dist.

Lingkungan Hidup

Versi

  • naskah ketikan: v3.4.2
  • singsingan: 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"

keluaran plugin dengan verbositas 3


Keluaran

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

Komentar yang paling membantu

@ezolenko Maaf atas balasan yang terlambat!

Saya menaruh clean: true dan meningkatkan rtp2 menjadi 0.20.1 . Berikut hasilnya:

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

Selain itu ada masalah ini pada repo TS yang tampaknya terkait tetapi saya memiliki @types/styled-components disematkan ke v4.1.4 sehingga tidak menutupi kasus saya.

Beri tahu saya jika Anda membutuhkan info lebih lanjut.


Untuk bersenang-senang saya juga mencoba membangun 3.5 :

TS 3.5.0-dev. 20190413

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

Semua 21 komentar

Saya mengalami masalah yang sama. Pergi dari 24s menjadi 345s ketika menabrak TS dari 3.3.4000 menjadi 3.4.3

Saya mencoba mereproduksi dan pada awalnya saya melihat perlambatan, tetapi menggunakan clean: true dan bolak-balik antara versi skrip beberapa kali, saya tidak melihat perbedaan pada build bersih sekarang ...

Bisakah Anda menyetel clean: true , memperbarui rtp2 ke yang terbaru (0.20.1 atau master) dan mengatur waktu build beberapa kali berturut-turut pada ts 3.3 dan ts 3.4?

@ezolenko Maaf atas balasan yang terlambat!

Saya menaruh clean: true dan meningkatkan rtp2 menjadi 0.20.1 . Berikut hasilnya:

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

Selain itu ada masalah ini pada repo TS yang tampaknya terkait tetapi saya memiliki @types/styled-components disematkan ke v4.1.4 sehingga tidak menutupi kasus saya.

Beri tahu saya jika Anda membutuhkan info lebih lanjut.


Untuk bersenang-senang saya juga mencoba membangun 3.5 :

TS 3.5.0-dev. 20190413

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

Masalah yang Anda temukan (https://github.com/Microsoft/TypeScript/issues/30663) dan fakta bahwa 3.5-dev menjadi 5 kali lebih cepat untuk Anda membuat saya berpikir mereka melakukan sesuatu dengan LanguageServer API. Ini adalah API rpt2 yang digunakan sebagai bagian dari kompilasi dan yang digunakan oleh pemeriksa ketik di IDE (itulah sebabnya WebStorm kehabisan waktu, dll.).

Proyek Anda mungkin menggunakan tipe struktur yang terpengaruh di tempat lain, itulah mengapa menyematkan styled-components tidak membantu. Dan itulah mengapa saya tidak melihat perlambatan besar saat membangun rpt2 itu sendiri misalnya.

Saya kira kita akan menunggu rilis 3.5 final.

btw, coba buat dengan opsi check: false

Adakah yang mengkonfirmasi jika ini diperbaiki dengan rilis 3.5?

@ tomasro27 Bukan untuk saya, atau dengan 6 ( 3.6.0-dev.20190621 ). Sepertinya <3,3 masih yang tercepat.

Sepertinya 3.5 sedikit lebih cepat tetapi masih bisa lebih baik

Apakah ada pembaruan tentang ini? Sepertinya masih diblokir oleh TS?

Ya, menurutku tidak ada yang bisa dilakukan dari sini. Siapapun dipersilakan untuk mencoba :)

+1
3.5.3 juga sangat lambat bagi kami

check: false bekerja dengan baik.

Tetapi masalahnya adalah itu tidak memberikan kesalahan kompilasi apa pun (jika Anda menggunakan vscode, itu akan meminta kesalahan 😄).

Setidaknya saya bisa melakukan check: false saat saya mengerjakan CSS (di JS). 👍

@ezolenko, tahukah Anda apa persisnya panggilan api skrip ketikan yang menyebabkan build melambat? :)

@ZainlessBrombie tidak, semua yang saya tahu ada di utas ini. Masalah ketikan yang ditautkan mungkin terkait, tetapi bukan penyebab langsung (karena mereka mengatakan itu harus diperbaiki di 3.5+, dan ternyata tidak).

Jika Anda memiliki build yang lambat dalam proyek Anda, periksa apakah ts 3.3 sebenarnya lebih cepat jika memungkinkan, mungkin masalahnya bukan pada skrip ketikan, tetapi hal lain.

Baik terima kasih. Jika saya menyiasatinya, ini mungkin dinding yang ingin saya hantam sehingga untuk berbicara :)

Sunting: Masalah ini hanya terjadi untuk file yang mengimpor komponen bergaya seperti yang terlihat
Juga, dokumentasi Typecript sangat buruk

Skrip tipe profil mengungkapkan sumber masalah menjadi gabungan yang sangat besar yang dimiliki komponen bergaya ini. Satu-satunya tempat untuk memperbaikinya adalah skrip ketikan, kecuali ada cara untuk mendapatkan skrip ketikan ke resolusi modul cache (yang seharusnya).

Saya sebenarnya tidak menggunakan cache resolusi modul dalam panggilan nodeModuleNameResolver di sini: https://github.com/ezolenko/rollup-plugin-typescript2/blob/b7c7389dcdf168715669520128ca656d6e940111/src/index.ts#L148

Tidak yakin apakah itu membuat ts menggunakan default satu atau tidak menggunakan satu sama sekali.

Ya, saya melihat TODO itu :)
Sayangnya debugging cache resolusi modul ketika digunakan menunjukkan bahwa itu cache rebass tetapi bukan komponen bergaya karena beberapa alasan. Ini melewati cache internal untuk ...

Saat ini saya sedang dalam proses migrasi basis kode C # dari perpustakaan saya ke TypeScript dan saya menggunakan Rollup untuk bundling. (Saya memiliki toolchain C #> Haxe> JavaScript kustom sebelumnya). Sayangnya saya juga menderita cukup banyak pada kecepatan kompilasi basis kode TypeScript baru saya yang membuat pengembangan cukup sulit.

Jika memungkinkan, saya dengan senang hati memberikan beberapa laporan profil jika memungkinkan untuk membuatnya.

Berikut beberapa wawasan untuk proyek saya:

Biasanya saya menggunakan ttypescript untuk melakukan beberapa transformasi AST.
Baris Kode : ~ 50000

rollup -c rollup.config.ts : ~ 9-10sec
rollup -c rollup.config.ts -w (kompilasi awal) : ~ 9-10sec
rollup -c rollup.config.ts -w (menambahkan 1 peringatan dalam 1 file TS) : ~ 20sec
rollup -c rollup.config.ts -w (menghapus peringatan lagi) : ~ 20sec

tsc --versi : 3.8.3
tsc --project tsconfig.json : ~ 6-7sec
tsc --project tsconfig.json -w (kompilasi awal) : ~ 6-7sec
tsc --project tsconfig.json -w (menambahkan 1 peringatan dalam 1 file TS) : ~ 0.1-0.2sec
tsc --project tsconfig.json -w (menghapus peringatan lagi) : ~ 0.1-0.2sec

ttsc --version : 3.8.3
ttsc --project tsconfig.json : ~ 7-8sec
ttsc --project tsconfig.json -w (kompilasi awal) : ~ 6-7sec
ttsc --project tsconfig.json -w (menambahkan 1 peringatan dalam 1 file TS) : ~ 0.1-0.2sec
ttsc --project tsconfig.json -w (menghapus peringatan lagi) : ~ 0.1-0.2sec

Build inkremental aktif di tsconfig.

Menurut saya cukup tidak biasa bahwa build inkremental / jam tangan akan memakan waktu dua kali lebih banyak daripada build penuh.

Hal-hal tampaknya menjadi gila di lingkungan saya saat datang ke pengujian. Saya menghubungkan rollup dengan karma dan plugin skrip ini. Seperti yang mungkin Anda ketahui: setiap rangkaian pengujian mendapatkan bundelnya sendiri, yang berarti jumlah di atas menumpuk. Memori tumbuh hingga> 2GB dari waktu ke waktu; bahkan setelah beberapa menit uji coba tidak benar-benar dimulai. Ini terjadi pada setiap npm run test .

Setelah mencapai area "Menghasilkan bundel untuk ..." pada pembuatan pengujian, saya melihat angka yang sangat tinggi:
File01.test.ts yang berisi 1 pengujian sederhana dari kelas parser membutuhkan waktu 15 detik
File02.test.ts yang berisi 11 tes penguraian XML membutuhkan waktu 2,5 menit
File03.test.ts bahkan tidak selesai setelah 5 menit.

Saya tidak tahu di mana masalah ini mungkin disebabkan dan apakah itu benar-benar karena modul skrip rollup tetapi ini tampaknya merupakan masalah yang paling mungkin terkait dengan saya.

Karena repo saya cukup besar dan rumit, saya tidak membagikan detail lebih lanjut tentang konfigurasi. Jika ada yang bisa memandu saya cara mengumpulkannya, saya akan dengan senang hati memberikan log / hasil pembuatan profil, dll. Saya akan mencoba menyiapkan repositori independen sederhana baru yang mencerminkan situasi proyek saya secara keseluruhan, tetapi saya tidak dapat menjanjikan bahwa masalah ini akan tetap ada.

@ Danielku15 Masalah utama Anda adalah bahwa Anda bermigrasi dari C # dan bukan dari C ++ :)

Plugin ini tidak secara eksplisit menggunakan build inkremental milik typescript (ini tidak ada saat dimulai).

Anda dapat mencoba @rollup/plugin-typescript (https://github.com/rollup/plugins/tree/master/packages/typescript), mereka menggunakan pendekatan yang berbeda menurut saya dan mungkin memberi Anda nomor yang berbeda.

Pilihan lainnya adalah melakukan kompilasi skrip skrip dari rantai rollup (sebagai langkah prebuild di npm atau semacamnya) dan memberi makan js yang dihasilkan ke rollup sebagai gantinya. Watch build akan menarik, meskipun saya pikir Anda dapat memulai tsc dan rollup dalam mode jam tangan dan jika proyek dikonfigurasi dengan benar, itu hanya akan berfungsi.

Masalah utama Anda adalah Anda bermigrasi dari C # dan bukan dari C ++

Off-Topic: Saya tidak yakin apakah saya ingin memigrasi framework / library C ++ ke TypeScript. Bergantung pada penggunaan makro dan templat (yang cenderung disukai pengembang C ++), hal-hal mungkin menjadi liar selama migrasi 😅 Untungnya basis kode C # saya selalu disesuaikan dengan gaya yang memungkinkan kompilasi silang ke bahasa lain sehingga hasilnya cukup dapat diterima dari struktur kode . Saya hanya perlu mencari tahu sedikit lebih baik bagaimana mengatur modul untuk mengurangi overhead. 😊

Plugin ini tidak secara eksplisit menggunakan build inkremental milik typescript (ini tidak ada saat dimulai).

Ini menarik, apakah plugin ini memiliki strategi build "tambahan" kustom sendiri? Ini bisa menjelaskan mengapa build full-clean mungkin membutuhkan waktu lebih lama daripada perubahan sumber saat menggunakan jam tangan. Kompilasi skrip kurang lebih stabil, sangat disayangkan plugin ini belum dapat memanfaatkan pembaruan tambahan, tetapi menurut saya waktu yang dihabiskan dalam kompiler skrip tipe stabil. Tetapi waktu yang dihabiskan untuk rollup tampaknya bervariasi. Hanya ini yang menjelaskan kepada saya bahwa build bersih lebih cepat daripada perubahan kode dengan mode jam tangan.

Anda dapat mencoba @ rollup / plugin-typescript ...

Terima kasih atas petunjuknya, saya akan mencobanya untuk melihat apakah itu membaik.

Pilihan lainnya adalah melakukan kompilasi skrip dari rantai rollup

Saya memiliki penyiapan seperti itu di awal, tetapi membatalkannya di tengah jalan agar "jam tangan" dibangun selama pengembangan. Saya akan mencobanya lagi jika saya dapat menghubungkan pipa dengan dua alat "menonton" secara independen. 👍

Pembaruan 1: Saya dapat mengatur seluruh kompilasi dan lingkungan pengujian saya sekarang dengan memanggil tsc yang dirantai dengan rollup. Saya perlu membuat plugin rollup saya sendiri untuk menyelesaikan jalur tsconfig dengan benar tetapi setelah itu berfungsi dengan baik.

Kompilasi bersih: 9 detik, Tonton kompilasi: 0,5-1 detik dan pengujian melalui Karma + Rollup juga berjalan (kompilasi memerlukan waktu sedikit lebih lama karena menghasilkan bundel untuk setiap rangkaian pengujian).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat