Rollup-plugin-typescript2: TS v3.4둜 맀우 느린 컴파일

에 λ§Œλ“  2019λ…„ 04μ›” 09일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: ezolenko/rollup-plugin-typescript2

무슨 일이 μΌμ–΄λ‚˜κ³  μ™œ 잘λͺ»λœ

TSλ₯Ό v3.4.2둜 μ—…κ·Έλ ˆμ΄λ“œν•˜λ©΄ 컴파일 μ‹œκ°„μ΄ 맀우 λŠλ¦½λ‹ˆλ‹€. TS v3.3을 μ‚¬μš©ν•˜λ©΄ λ‚΄ ν”„λ‘œμ νŠΈκ°€ ~ 20 μ΄ˆμ— λΉŒλ“œλ˜κ³  TS v3.4λ₯Ό μ‚¬μš©ν•˜λ©΄ ~ 5mn이 κ±Έλ¦½λ‹ˆλ‹€.

clean: true 둜 μ‹œλ„ν•˜κ³  typescript: require('typescript') 을 μΆ”κ°€ν•˜λ €κ³ ν–ˆκ³  rollup 및 λͺ¨λ“  κ΄€λ ¨ ν”ŒλŸ¬κ·ΈμΈμ„ μ—…κ·Έλ ˆμ΄λ“œν•˜λ €κ³ ν–ˆμŠ΅λ‹ˆλ‹€. 맀번 λ™μΌν•œ κ²°κ³Όλ₯Ό μ»΄νŒŒμΌν•˜λŠ” 데 λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ¦½λ‹ˆλ‹€. .

μ°Έκ³  : tsc -p tsconfig.prod.json 직접 μ‹€ν–‰ν•˜λ©΄ distλ₯Ό 좜λ ₯ν•˜λŠ” 데 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"

Verbosity 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 λŒ“κΈ€

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. TSλ₯Ό 3.3.4000 μ—μ„œ 3.4.3 λ²”ν”„ ν•  λ•Œ 24s μ—μ„œ 345s 3.4.3

λ‚˜λŠ” μž¬ν˜„μ„ μ‹œλ„ν–ˆκ³  μ²˜μŒμ—λŠ” 속도가 λŠλ €μ§€λŠ” 것을 λ³΄μ•˜μ§€λ§Œ clean: true ν•˜κ³  typescript 버전을 μ—¬λŸ¬ 번 μ•žλ’€λ‘œ μ΄λ™ν•˜λ©΄ μ§€κΈˆ 클린 λΉŒλ“œμ˜ 차이가 보이지 μ•ŠμŠ΅λ‹ˆλ‹€.

clean: true 을 μ„€μ •ν•˜κ³  rtp2λ₯Ό μ΅œμ‹  버전 (0.20.1 λ˜λŠ” λ§ˆμŠ€ν„°)으둜 μ—…λ°μ΄νŠΈν•˜κ³  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κ°€ 5 λ°° 더 빨라 μ‘Œλ‹€λŠ” 사싀은 그듀이 LanguageServer API둜 무언가λ₯Όν–ˆλ‹€κ³  μƒκ°ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€. 이것은 rpt2κ°€ 컴파일의 μΌλΆ€λ‘œ μ‚¬μš©ν•˜λŠ” API이며 IDE의 typecheckerκ°€ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ (이것이 WebStorm이 μ‹œκ°„ μ΄ˆκ³Όλ˜λŠ” μ΄μœ μž…λ‹ˆλ‹€).

ν”„λ‘œμ νŠΈμ—μ„œ 영ν–₯μ„λ°›λŠ” μœ ν˜• ꡬ쑰λ₯Ό λ‹€λ₯Έ κ³³μ—μ„œ μ‚¬μš©ν•˜κ³ μžˆμ„ 수 μžˆμœΌλ―€λ‘œ styled-components 고정해도 λ„μ›€μ΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ rpt2 자체λ₯Ό λΉŒλ“œ ν•  λ•Œ 큰 속도 μ €ν•˜κ°€ 보이지 μ•ŠλŠ” μ΄μœ μž…λ‹ˆλ‹€.

μ΅œμ’… 3.5 릴리슀λ₯Ό 기닀릴 것 κ°™μŠ΅λ‹ˆλ‹€.

btw, check: false μ˜΅μ…˜μœΌλ‘œ λΉŒλ“œ ν•΄λ³΄μ„Έμš”.

이것이 3.5 릴리슀둜 μˆ˜μ •λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

@ tomasro27 λ‚˜λ„ μ•„λ‹ˆκ³  6 ( 3.6.0-dev.20190621 ). 3.3 미만이 μ—¬μ „νžˆ κ°€μž₯ λΉ λ₯Έ 것 κ°™μŠ΅λ‹ˆλ‹€.

3.5κ°€ 쑰금 더 λΉ λ₯Έ 것 κ°™μ§€λ§Œ μ—¬μ „νžˆ 더 쒋을 수 μžˆμŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? 아직도 TS에 μ˜ν•΄ 차단 된 것 κ°™μŠ΅λ‹ˆκΉŒ?

λ„€, 이μͺ½μ—μ„œ ν•  μˆ˜μžˆλŠ” 일이 μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λˆ„κ΅¬λ‚˜ μ‹œλ„ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ :)

+1
3.5.3은 μš°λ¦¬μ—κ²Œλ„ 맀우 λŠλ¦½λ‹ˆλ‹€.

check: false 이 (κ°€) 잘 μž‘λ™ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ¬Έμ œλŠ” 컴파일 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ (vscodeλ₯Ό μ‚¬μš©ν•˜λ©΄ 였λ₯˜κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€ πŸ˜„).

적어도 CSS μž‘μ—…μ„ ν•  λ•Œ check: false ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (JSμ—μ„œ). πŸ‘

@ezolenko μ •ν™•ν•œ typescript api 호좜둜 인해 λΉŒλ“œ 속도가 λŠλ €μ§€λŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ? :)

@ZainlessBrombie μ•„λ‹ˆ, λ‚΄κ°€ μ•„λŠ” λͺ¨λ“  것은이 μŠ€λ ˆλ“œμ— μžˆμŠ΅λ‹ˆλ‹€. μ—°κ²°λœ Typescript λ¬Έμ œλŠ” β€‹β€‹μ•„λ§ˆλ„ κ΄€λ ¨μ΄μžˆμ„ 수 μžˆμ§€λ§Œ 직접적인 원인은 μ•„λ‹™λ‹ˆλ‹€ (3.5+μ—μ„œ μˆ˜μ •λ˜μ–΄μ•Όν•œλ‹€κ³  λ§ν•˜κ³  λΆ„λͺ…νžˆ 그렇지 μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€).

ν”„λ‘œμ νŠΈμ— 느린 λΉŒλ“œκ°€μžˆλŠ” 경우 κ°€λŠ₯ν•œ 경우 ts 3.3이 μ‹€μ œλ‘œ 더 λΉ λ₯Έμ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. λ¬Έμ œλŠ” typescriptκ°€ μ•„λ‹ˆλΌ λ‹€λ₯Έ 것일 수 μžˆμŠ΅λ‹ˆλ‹€.

κ³ λ§ˆμ›Œμš”. λ‚΄κ°€ 그것에 μ ‘κ·Όν•˜λ©΄ 이것은 벽이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ :이 λ¬Έμ œλŠ” λ³΄μ΄λŠ”λŒ€λ‘œ μŠ€νƒ€μΌμ΄ μ§€μ •λœ ꡬ성 μš”μ†Œλ₯Ό κ°€μ Έ μ˜€λŠ” νŒŒμΌμ—μ„œλ§Œ λ°œμƒν•©λ‹ˆλ‹€.
λ˜ν•œ Typescript λ¬Έμ„œλŠ” λ”μ°ν•©λ‹ˆλ‹€.

μœ ν˜• 슀크립트λ₯Ό ν”„λ‘œνŒŒμΌ λ§ν•˜λ©΄ μŠ€νƒ€μΌμ΄ μ§€μ •λœ ꡬ성 μš”μ†Œμ—μžˆλŠ” μ΄λŸ¬ν•œ 맀우 큰 결합이 문제의 원인을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό κ³ μΉ  μˆ˜μžˆλŠ” μœ μΌν•œ μž₯μ†ŒλŠ” typescriptλ₯Ό μΊμ‹œ λͺ¨λ“ˆ ν•΄μƒλ„λ‘œ κ°€μ Έμ˜¬ μˆ˜μžˆλŠ” λ°©λ²•μ΄μ—†λŠ” ν•œ typescriptμž…λ‹ˆλ‹€.

μ‹€μ œλ‘œ nodeModuleNameResolver ν˜ΈμΆœμ—μ„œ λͺ¨λ“ˆ 확인 μΊμ‹œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€ : https://github.com/ezolenko/rollup-plugin-typescript2/blob/b7c7389dcdf168715669520128ca656d6e940111/src/index.ts#L148

그것이 tsκ°€ 기본값을 μ‚¬μš©ν•˜λŠ”μ§€ λ˜λŠ” μ „ν˜€ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ„€ TODOλ₯Ό λ΄€μ–΄μš” :)
λΆˆν–‰νžˆλ„ λͺ¨λ“ˆ 해상도 μΊμ‹œλ₯Ό μ‚¬μš©ν•  λ•Œ λ””λ²„κΉ…ν•˜λ©΄ μ–΄λ–€ 이유둜 λ“  rebassλ₯Ό μΊμ‹œν•˜μ§€λ§Œ μŠ€νƒ€μΌμ΄ μ§€μ •λœ ꡬ성 μš”μ†Œκ°€ μ•„λ‹Œ κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€. 그것은 그듀을 μœ„ν•΄ λ‚΄λΆ€ μΊμ‹œλ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€ ...

ν˜„μž¬ 라이브러리의 C # μ½”λ“œλ² μ΄μŠ€λ₯Ό TypeScript둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” 쀑이며 λ²ˆλ“€λ§μ„ μœ„ν•΄ Rollup을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. (이전에 μ‚¬μš©μž 지정 C #> Haxe> JavaScript 도ꡬ λͺ¨μŒμ΄μžˆμ—ˆμŠ΅λ‹ˆλ‹€). λΆˆν–‰νžˆλ„ λ‚˜λŠ” κ°œλ°œμ„ μƒλ‹Ήνžˆ μ–΄λ ΅κ²Œ λ§Œλ“œλŠ” μƒˆλ‘œμš΄ TypeScript μ½”λ“œλ² μ΄μŠ€μ˜ 컴파일 μ†λ„λ‘œ 인해 λ§Žμ€ 어렀움을 κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€.

κ°€λŠ₯ν•˜λ‹€λ©΄ ν”„λ‘œνŒŒμΌ 링 λ³΄κ³ μ„œλ₯Ό 생성 ν•  수 μžˆλ‹€λ©΄ 기꺼이 μ œκ³΅ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ‚΄ ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λͺ‡ 가지 톡찰λ ₯ :

일반적으둜 AST λ³€ν™˜μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ttypescriptλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
μ½”λ“œ 쀄 : ~ 50000

rollup -c rollup.config.ts : ~ 9-10 초
rollup -c rollup.config.ts -w (초기 컴파일) : ~ 9-10 초
rollup -c rollup.config.ts -w (1 개의 TS νŒŒμΌμ— 1 개의 κ²½κ³  μΆ”κ°€) : ~ 20 초
rollup -c rollup.config.ts -w (κ²½κ³  λ‹€μ‹œ 제거) : ~ 20 초

tsc-버전 : 3.8.3
tsc --project tsconfig.json : ~ 6-7 초
tsc --project tsconfig.json -w (초기 컴파일) : ~ 6-7sec
tsc --project tsconfig.json -w (1 개의 TS νŒŒμΌμ— 1 개의 κ²½κ³  μΆ”κ°€) : ~ 0.1-0.2 초
tsc --project tsconfig.json -w (μ•Œλ¦Ό λ‹€μ‹œ 제거) : ~ 0.1-0.2 초

ttsc-버전 : 3.8.3
ttsc --project tsconfig.json : ~ 7-8 초
ttsc --project tsconfig.json -w (초기 컴파일) : ~ 6-7 초
ttsc --project tsconfig.json -w (1 개의 TS νŒŒμΌμ— 1 개의 κ²½κ³  μΆ”κ°€) : ~ 0.1-0.2 초
ttsc --project tsconfig.json -w (μ•Œλ¦Ό λ‹€μ‹œ 제거) : ~ 0.1-0.2 초

증뢄 λΉŒλ“œλŠ” tsconfigμ—μ„œ ν™œμ„±ν™”λ©λ‹ˆλ‹€.

증뢄 / κ°μ‹œ λΉŒλ“œκ°€ 전체 λΉŒλ“œλ³΄λ‹€ 두 λ°°λ‚˜ λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ˜λŠ” 것은 맀우 λ“œλ¬Έ 것 κ°™μŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈμ— κ΄€ν•΄μ„œλŠ” λ‚΄ ν™˜κ²½μ—μ„œ 상황이 λ―Έμ³κ°€λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” karma와이 typescript ν”ŒλŸ¬κ·ΈμΈκ³Ό ν•¨κ»˜ 둀업을 μ—°κ²°ν–ˆλ‹€. μ•„μ‹œλ‹€μ‹œν”Ό : 각 ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈλŠ” 자체 λ²ˆλ“€μ„ μ–»μŠ΅λ‹ˆλ‹€. μ΄λŠ” μœ„μ˜ μˆ«μžκ°€ μŒ“μ΄λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬λŠ” μ‹œκ°„μ΄ 지남에 따라> 2GBκΉŒμ§€ μ¦κ°€ν•©λ‹ˆλ‹€. λͺ‡ λΆ„ 후에도 ν…ŒμŠ€νŠΈ 싀행이 μ‹€μ œλ‘œ μ‹œμž‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 각 npm run test ν•©λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ μ„ΈλŒ€μ˜ "Generating bundle for ..."μ˜μ—­μ— λ„λ‹¬ν•˜λ©΄ μ—„μ²­λ‚˜κ²Œ 높은 숫자λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
νŒŒμ„œ 클래슀의 κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ 1 개λ₯Ό ν¬ν•¨ν•˜λŠ” File01.test.tsλŠ” 15 μ΄ˆκ°€ κ±Έλ¦½λ‹ˆλ‹€.
11 개의 XML ꡬ문 뢄석 ν…ŒμŠ€νŠΈλ₯Ό ν¬ν•¨ν•˜λŠ” File02.test.tsμ—λŠ” 2.5 뢄이 μ†Œμš”λ©λ‹ˆλ‹€.
File03.test.tsλŠ” 5 λΆ„ 후에도 μ™„λ£Œλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œκ°€ μ–΄λ””μ—μ„œ λ°œμƒν•  수 μžˆλŠ”μ§€ 그리고 그것이 μ‹€μ œλ‘œ λ‘€μ—…μ˜ typescript λͺ¨λ“ˆλ‘œ μΈν•œ 것인지 μ „ν˜€ μ•Œμ§€ λͺ»ν•˜μ§€λ§Œ 이것이 λ‚΄κ°€ κ΄€λ ¨λœ κ°€μž₯ κ°€λŠ₯성이 높은 문제인 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚΄ μ €μž₯μ†Œκ°€ 맀우 크고 λ³΅μž‘ν•˜κΈ° λ•Œλ¬Έμ— ꡬ성에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ„ κ³΅μœ ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λˆ„κ΅¬λ“ μ§€ μˆ˜μ§‘ 방법을 μ•ˆλ‚΄ν•΄ μ£Όμ‹œλ©΄ 둜그 / ν”„λ‘œνŒŒμΌ 링 κ²°κ³Ό 등을 μ œκ³΅ν•˜κ²Œλ˜μ–΄ κΈ°μ©λ‹ˆλ‹€. 전체 ν”„λ‘œμ νŠΈ 상황을 λ°˜μ˜ν•˜μ—¬ μƒˆλ‘­κ³  κ°„λ‹¨ν•œ 독립 μ €μž₯μ†Œλ₯Ό μ„€μ •ν•˜λ €κ³ ν•˜μ§€λ§Œ λ¬Έμ œκ°€ 지속될 것이라고 약속 ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

@ Danielku15 μ£Όμš” λ¬Έμ œλŠ” C ++κ°€ μ•„λ‹Œ C #μ—μ„œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. :)

이 ν”ŒλŸ¬κ·ΈμΈμ€ typescript의 자체 증뢄 λΉŒλ“œλ₯Ό λͺ…μ‹œ 적으둜 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ‹œμž‘ λ‹Ήμ‹œ μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜ 음).

@rollup/plugin-typescript (https://github.com/rollup/plugins/tree/master/packages/typescript)λ₯Ό μ‹œλ„ν•΄ λ³Ό 수 있으며, 제 생각에 λ‹€λ₯Έ μ ‘κ·Ό 방식을 μ‚¬μš©ν•˜κ³  λ‹€λ₯Έ 숫자λ₯Ό 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

또 λ‹€λ₯Έ μ˜΅μ…˜μ€ λ‘€μ—… 체인 (npm λ“±μ˜ 사전 λΉŒλ“œ 단계)μ—μ„œ typescript μ»΄νŒŒμΌμ„ μˆ˜ν–‰ν•˜κ³  κ²°κ³Ό jsλ₯Ό λŒ€μ‹  둀업에 κ³΅κΈ‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ‹œκ³„ λΉŒλ“œλŠ” ν₯미둜울 κ²ƒμž…λ‹ˆλ‹€.ν•˜μ§€λ§Œ μ‹œκ³„ λͺ¨λ“œμ—μ„œ tsc와 둀업을 μ‹œμž‘ν•  수 있고 ν”„λ‘œμ νŠΈκ°€ μ˜¬λ°”λ₯΄κ²Œ κ΅¬μ„±λ˜μ–΄ 있으면 μž‘λ™ν•©λ‹ˆλ‹€.

μ£Όμš” λ¬Έμ œλŠ” C ++κ°€ μ•„λ‹Œ C #μ—μ„œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

Off-Topic : C ++ ν”„λ ˆμž„ μ›Œν¬ / 라이브러리λ₯Ό TypeScript둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κ³  싢은지 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 맀크둜 및 ν…œν”Œλ¦Ώ (C ++ κ°œλ°œμžκ°€ μ’‹μ•„ν•˜λŠ” κ²½ν–₯μ΄μžˆλŠ”)의 μ‚¬μš©μ— 따라 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 쀑에 상황이 κ±°μΉ μ–΄ 질 수 μžˆμŠ΅λ‹ˆλ‹€. πŸ˜… λ‹€ν–‰νžˆλ„ 제 C # μ½”λ“œλ² μ΄μŠ€λŠ” 항상 λ‹€λ₯Έ μ–Έμ–΄λ‘œμ˜ 크둜슀 μ»΄νŒŒμΌμ„ ν—ˆμš©ν•˜λŠ” μŠ€νƒ€μΌλ‘œ μ‘°μ •λ˜μ—ˆμœΌλ―€λ‘œ κ²°κ³ΌλŠ” μ½”λ“œ κ΅¬μ‘°μ—μ„œ μƒλ‹Ήνžˆ ν—ˆμš©λ©λ‹ˆλ‹€. . μ˜€λ²„ ν—€λ“œλ₯Ό 쀄이기 μœ„ν•΄ λͺ¨λ“ˆμ„ κ΅¬μ„±ν•˜λŠ” 방법을 μ’€ 더 잘 μ•Œμ•„ λ‚΄λ©΄λ©λ‹ˆλ‹€. 😊

이 ν”ŒλŸ¬κ·ΈμΈμ€ typescript의 자체 증뢄 λΉŒλ“œλ₯Ό λͺ…μ‹œ 적으둜 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ‹œμž‘ λ‹Ήμ‹œ μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜ 음).

이 ν”ŒλŸ¬κ·ΈμΈμ΄ μ‚¬μš©μž 지정 "증뢄"λΉŒλ“œ μ „λž΅μ„ 가지고 μžˆμŠ΅λ‹ˆκΉŒ? μ‹œκ³„λ₯Ό μ‚¬μš©ν•  λ•Œ μ™„μ „ 정리 λΉŒλ“œκ°€ μ†ŒμŠ€ 변경보닀 였래 κ±Έλ¦¬λŠ” 이유λ₯Ό μ„€λͺ… ν•  수 μžˆμŠ΅λ‹ˆλ‹€. typescript μ»΄νŒŒμΌμ€ λ‹€μ†Œ μ•ˆμ •μ μ΄λ©°μ΄ ν”ŒλŸ¬κ·ΈμΈμ΄ 아직 증뢄 μ—…λ°μ΄νŠΈλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€λŠ” 것은 μœ κ°μ΄μ§€λ§Œ μœ ν˜• 슀크립트 μ»΄νŒŒμΌλŸ¬μ— μ†Œμš”λ˜λŠ” μ‹œκ°„μ€ μ•ˆμ •μ μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 둀업에 μ†Œμš”λ˜λŠ” μ‹œκ°„μ€ λ‹€μ–‘ν•©λ‹ˆλ‹€. 이것은 κΉ¨λ—ν•œ λΉŒλ“œκ°€ κ°μ‹œ λͺ¨λ“œλ‘œ μ½”λ“œλ₯Ό λ³€κ²½ν•˜λŠ” 것보닀 λΉ λ₯΄λ‹€λŠ” 것을 μ„€λͺ…ν•©λ‹ˆλ‹€.

@ rollup / plugin-typescriptλ₯Ό μ‹œλ„ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ ...

힌트λ₯Ό 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. κ°œμ„ λ˜λŠ”μ§€ 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.

또 λ‹€λ₯Έ μ˜΅μ…˜μ€ λ‘€μ—… μ²΄μΈμ—μ„œ typescript μ»΄νŒŒμΌμ„ μˆ˜ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ²˜μŒμ—λŠ” 그런 섀정이 μžˆμ—ˆμ§€λ§Œ 개발 쀑에 "κ°μ‹œ"λΉŒλ“œλ₯Ό 갖도둝 절반 정도 λ–¨μ–΄ 뜨 λ ΈμŠ΅λ‹ˆλ‹€. λ…λ¦½μ μœΌλ‘œ "κ°μ‹œ"ν•˜λŠ” 두 가지 λ„κ΅¬λ‘œ νŒŒμ΄ν”„ 라인을 μ—°κ²°ν•  수 μžˆλ‹€λ©΄ λ‹€μ‹œ ν•œ 번 μ‹œλ„ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. πŸ‘

μ—…λ°μ΄νŠΈ 1 : λ‘€μ—…μœΌλ‘œ μ—°κ²°λœ tscλ₯Ό ν˜ΈμΆœν•˜μ—¬ 전체 컴파일 및 ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ μ„€μ •ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. tsconfig 경둜λ₯Ό μ˜¬λ°”λ₯΄κ²Œ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚΄ λ‘€μ—… ν”ŒλŸ¬κ·ΈμΈμ„ λ§Œλ“€μ–΄μ•Όν–ˆμ§€λ§Œ κ·Έ ν›„μ—λŠ” μ œλŒ€λ‘œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

클린 컴파일 : 9 초, κ°μ‹œ 컴파일 : 0.5-1 초 및 Karma + Rollup을 ν†΅ν•œ ν…ŒμŠ€νŠΈλ„ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€ (μ»΄νŒŒμΌμ€ 각 ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈμ— λŒ€ν•΄ λ²ˆλ“€μ„ μƒμ„±ν•˜λ―€λ‘œ μ‹œκ°„μ΄ 쑰금 더 κ±Έλ¦½λ‹ˆλ‹€).

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰