μλ ,
μΉν©μμ λΌμ΄λΈλ¬λ¦¬ λ‘€μ μΌλ‘ μ΄λνλ €κ³ νλλ° μ μΈμ΄ μ¬λ°λ₯΄κ² μλνλλ‘ νλ λ° λ¬Έμ κ° μμ΅λλ€.
μΈν°νμ΄μ€ μ μΈμ΄ λ΄λ³΄λ΄μ§μ§ μμ κ² κ°μ΅λλ€. λ€μκ³Ό κ°μ κ²½μ°μ λ¬Έμ κ° λ©λλ€.
import { RenderedCell } from "../RenderedCell";
export default class MergedCell implements RenderedCell {
// ...
}
RenderedCellμ μ°Ύμ μ μλ€λ μ€λ₯κ° λ°μν©λλ€.
λλ webpackμμ μΌνκ³ μ΄κ²μ κΉ¨λ¨λ¦° ꡬμ±μ μ°¨μ΄μ μ μ΄ν΄ν μ μμ΅λλ€. κ·Έλ¬λ Rollupμμλ κ·Έκ²μ΄ μ μμ΄λΌλ κ²μ μ΄ν΄νλ κ² κ°μ΅λλ€.
μ©. μ΅μ λ‘€μ , rollup-plugin-typescript2 λ° rollup-plugin-uglifyλ₯Ό μ¬μ©νκ³ μμ΅λλ€. νμν κ²½μ° κ΅¬μ±μ κ²μν μ μμ΅λλ€.
μ΄κ²μ λ°νμ μ€λ₯μ
λκΉ, μλλ©΄ typescript μ€λ₯μ
λκΉ? RenderedCell
μ체μμ μΈν°νμ΄μ€λ₯Ό λ΄λ³΄λ΄λ λ°©λ²μ κ²μν μ μμ΅λκΉ?
λ¬Έμ λ νμΌμ΄ μ ν μμ±λμ§ μκ³ λ€λ₯Έ νλ‘μ νΈμμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν λ μ€ν¨νλ€λ κ²μ λλ€.
μ κΉ, RenderedCell
μΈν°νμ΄μ€κ° μμ±λ κ²μΌλ‘ μμνμλκΉ? typescriptλ₯Ό κ²μν μ½λμμ RenderedCell.ts
λΌλ νμΌμ΄ νμ¬ νμΌ μμ ν λλ ν 리μ μ‘΄μ¬ν κ²μΌλ‘ μμνκ³ λ€μκ³Ό κ°μ λ΄μ©μ ν¬ν¨ν΄μΌ ν©λλ€.
export interface RenderedCell
{
// ...
}
νλ‘μ νΈ κ΅¬μ‘°μ λν΄ λ μμΈν μ€λͺ ν΄ μ£Όμκ² μ΅λκΉ? (νμΌ νΈλ¦¬, tsconfig, λ‘€μ κ΅¬μ± λ±)
μ, μμ±λκΈ°λ₯Ό κΈ°λν©λλ€.
λ΄ κ΅¬μ±μ λ€μκ³Ό κ°μ΅λλ€.
λΉλ μ€ν: rollup -c -f es -n sq-web-component-table -o dist/sq-web-component-table.es.min.js
κ½€ ν° λΌμ΄λΈλ¬λ¦¬μ΄κ³ μ νΈλ³΄λ€ λ Έμ΄μ¦κ° λ§κΈ° λλ¬Έμ μ 체 νΈλ¦¬λ₯Ό λ£μ§ μμμ΅λλ€. κ·Έλ¬λ μ΄λ―Έ distμ μμ±λμ§ μμ νμΌμ΄ λ§λ€λ κ²μ μ μ μμ΅λλ€.
λ‘€μ
.config.ts
import typescript from 'rollup-plugin-typescript2';
import uglify from 'rollup-plugin-uglify';
import { minify } from 'uglify-es';
export default {
entry: './src/index.ts',
dest: 'dist/sq-web-component-table.min.js',
sourceMap: true,
plugins: [
typescript(),
uglify({}, minify)
]
}
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"declaration": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"outDir": "dist"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"dist",
"node_modules",
"**/*-test.ts"
]
}
RenderedCell.ts
import {RenderedElement} from "./RenderedElement";
import {RenderedRow} from "./RenderedRow";
export interface RenderedCell extends RenderedElement {
isMergedCell(): boolean;
getColspan(): number;
setColspan(colspan: number): void;
getParent(): RenderedRow;
}
νμΌ νΈλ¦¬
.
βββ src
βΒ Β βββ index.ts
βΒ Β βββ table
βΒ Β βββ extensions
βΒ Β βΒ Β βββ base
βΒ Β βΒ Β βΒ Β βββ FirstTableExtension.ts
βΒ Β βΒ Β βΒ Β βββ LastTableExtension.ts
βΒ Β βΒ Β βΒ Β βββ SectionDispatcher.ts
βΒ Β βΒ Β βΒ Β βββ SectionManager.ts
βΒ Β βΒ Β βΒ Β βββ SizeChangeMonitor.ts
βΒ Β βΒ Β βββ InvalidateEvent.ts
βΒ Β βΒ Β βββ InvalidateSizesEvent.ts
βΒ Β βΒ Β βββ RenderedCell.ts
βΒ Β βΒ Β βββ RenderedElement.ts
βΒ Β βΒ Β βββ RenderedRow.ts
βΒ Β βΒ Β βββ RenderedSection.ts
βΒ Β βΒ Β βββ RenderedTable.ts
βΒ Β βΒ Β βββ SectionClickedEvent.ts
βΒ Β βΒ Β βββ support
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ TableAttributes.ts
βΒ Β βΒ Β βββ TableExtensionChain.ts
βΒ Β βΒ Β βββ TableExtensionList.ts
βΒ Β βΒ Β βββ TableExtension.ts
βΒ Β βββ model
βΒ Β βΒ Β βββ ...
βΒ Β βββ TableRenderingOptions.ts
βΒ Β βββ Table.ts
βΒ Β βββ util
βΒ Β βΒ Β βββ ...
βΒ Β βββ view
βΒ Β βββ ...
βββ dist
βΒ Β βββ index.d.ts
βΒ Β βββ sq-web-component-table.es.min.js
βΒ Β βββ sq-web-component-table.es.min.js.map
βΒ Β βββ sq-web-component-table.min.js
βΒ Β βββ sq-web-component-table.min.js.map
βΒ Β βββ table
βΒ Β βββ extensions
βΒ Β βΒ Β βββ base
βΒ Β βΒ Β βΒ Β βββ FirstTableExtension.d.ts
βΒ Β βΒ Β βΒ Β βββ LastTableExtension.d.ts
βΒ Β βΒ Β βΒ Β βββ SectionDispatcher.d.ts
βΒ Β βΒ Β βΒ Β βββ SectionManager.d.ts
βΒ Β βΒ Β βΒ Β βββ SizeChangeMonitor.d.ts
βΒ Β βΒ Β βββ InvalidateEvent.d.ts
βΒ Β βΒ Β βββ InvalidateSizesEvent.d.ts
βΒ Β βΒ Β βββ RenderedRow.d.ts
βΒ Β βΒ Β βββ SectionClickedEvent.d.ts
βΒ Β βΒ Β βββ support
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ TableAttributes.d.ts
βΒ Β βΒ Β βββ TableExtensionList.d.ts
βΒ Β βββ model
βΒ Β βΒ Β βββ ...
βΒ Β βββ Table.d.ts
βΒ Β βββ util
βΒ Β βΒ Β βββ ...
βΒ Β βββ view
βΒ Β βββ ...
βββ node_modules
βΒ Β βββ ...
βββ __tests__
βΒ Β βββ ...
βββ package.json
βββ rollup.config.js
βββ tsconfig.json
μ, μκ² μ΅λλ€. νΉμ libκ° μ€ν μμ€μ λκΉ?
λ€μ μ΅μ μΌλ‘ λΉλν΄ λ³΄μΈμ.
typescript({ verbosity: 2, clean: true }),
μμν λͺ¨λ νμΌμ΄ μ²λ¦¬λκ³ μλμ§ νμΈνμμμ€. μ μΈμ΄ κ°μκΈ° μμ±λκΈ° μμνλ©΄ μ΄λκ°μ μΊμ λ¬Έμ κ° μλ κ²μ λλ€.
RenderedCell.tsκ° μΆλ ₯( rpt2: transpiling '...'
)μ μΈκΈλμ§ μμ κ²½μ° μμΈλλ₯Ό 3μΌλ‘ λλ¦¬κ³ κ°μ Έμ€κΈ°λ‘ λμ΄ μλ νμΌμ΄ κ·Έλ κ² νκ³ μλμ§ νμΈν©λλ€. λΉμ μ λ€μκ³Ό κ°μ κ²μ보μμΌν©λλ€
rpt2: resolving '../RenderedCell'
rpt2: to '...'
λ¬Έμ κ° λͺ ννμ§ μμ κ²½μ° μ΄λκ°μ λ‘κΉ μ λ μΆκ°νκ² μ΅λλ€.
νκ³ μΆμ΅λλ€. μλ§λ λ―Έλμ μμ κ²μ λλ€ :)
νΈλ¦ κ°μ¬ν©λλ€. μμμΌμ μλν΄ λ³΄κ² μ΅λλ€.
tsconfigμ compilerOptions μΉμ
μμ declaration: false
λ₯Ό μ€μ νκ³ λ€μ μ»΄νμΌνλ©΄ λ¬Έμ κ° ν΄κ²°λ©λκΉ? κ·Έλ λ€λ©΄ TSCμμ λ³΄κ³ ν μ€λ₯κ° dist λλ ν 리 λ΄μ νμΌ μ€ νλμ κ΄λ ¨λμ΄ μμ΅λκΉ? λ λ€ μλΌκ³ λ΅ν κ²½μ° κ°λ¨ν ν¨μ λ΄λ³΄λ΄κΈ°μ κ°μ΄ RenderedCell
νμΌμ΄ ν¬ν¨λ νμΌμ μ νμ΄ μλ λ
Όλ¦¬λ₯Ό λμ
νλ©΄ μ€λ₯κ° μ¬λΌμ§λκΉ? κ·Έλ λ€λ©΄ κ·Έ μ΄μ λ RenderedCell
κ° ν¬ν¨λ νμΌμ΄ μ¬μ©λμ§ μμ κ²μΌλ‘ κ°μ£Όλκ³ Typescriptκ° μ΄μ λν μ μΈμ μ€λΉνμ§ μκΈ° λλ¬Έμ
λλ€.
μ΄ λͺ¨λ κ²μ΄ κ·νμκ² μ μ©λλ κ²½μ° 2κ°μ§ μ΅μ μ΄ νμλ©λλ€.
μλ ,
μ€λ μ§μ°μ λν΄ μ£μ‘ν©λλ€. κ·νμ νκ³Ό νΈλ¦μ μλνμ§λ§ μ¬μ ν μμ±λ μΈν°νμ΄μ€μ λν μ ν μ μλ₯Ό μ»μ μ μμ΅λλ€.
ꡬμ±μ typescript({ verbosity: 3, clean: true })
.
μμ±λ λΉλμ μΆλ ₯μλ RenderedCell
μΈν°νμ΄μ€μ λν μΈκΈμ΄ μμ΅λλ€.
λΌμ΄λΈλ¬λ¦¬μ index.d.ts
κ° μ§μ νμνκ³ μΈν°νμ΄μ€λ₯Ό μ μΈν λͺ¨λ νμΌμ΄ μμ±λμ§λ§ μΈν°νμ΄μ€λ μ¬μ ν index.d.ts
μ κ°μ Έμ€κΈ°μ μμΌλ―λ‘ μ΄ νμΌμ΄ νμνλ€κ³ 100% νμ ν©λλ€. νμΌ.
ν΄λΉ νμΌμ΄ μμ±λμ§ μλ νΉλ³ν μ΄μ κ° μλμ§ μμ보기 μν΄ μ½λλ₯Ό μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
@wessberg λ΄ λ²λ€μ λν μ μΈ μμ± μ€μ§λ TypeScriptλ‘ μμ±λ λ ν° νλ‘μ νΈμ μΌλΆμΈ λΌμ΄λΈλ¬λ¦¬μ΄λ―λ‘ μ΅μ μ΄ μλλλ€. λ°λΌμ νμ΄νμ΄ μμΌλ©΄ μλνμ§ μμ΅λλ€.
κ·Έλμ λͺ κ°μ§ μ‘°μ¬λ₯Ό νκ³ μ΅μνμ κ΅¬μ± μΈνΈλ‘ μ μ¬λ‘λ₯Ό μ¬ννλ 리ν¬μ§ν 리λ₯Ό λ§λ€μμ΅λλ€. https://github.com/onigoetz/typescript-rollup-experiment
λν μΉν©μ΄ μλνλ λ°©μμ λΉκ΅νκΈ° μν΄ μΉν© ꡬμ±μ ν¬ν¨νμ΅λλ€.
λ¬Έμ μ λν λμ μ΄ν΄λ rollup-plugin-typescript2κ° νμΌμ μ»΄νμΌλ λ²μ μ μꡬν λ(index.tsλΌκ³ νμ) Typescriptλ μ»΄νμΌλ νμΌκ³Ό κ°μ Έμ€κΈ°λ₯Ό λ°ννμ§λ§ κ°μ Έμ€κΈ°μ μΈν°νμ΄μ€κ° μλ€λ κ²μ λλ€.
μ΄κ²μ΄ λ‘€μ μ΄ μμ±νμ§ μλ μ΄μ μ λλ€. λ‘€μ μ μ‘΄μ¬λ₯Ό μΈμνμ§ λͺ»ν©λλ€.
μ μ₯μλ₯Ό μ€ννλ €λ©΄ λλ ν 리 λ΄μμ npm install && npm run build
λ₯Ό μννμμμ€.
μΆκ°νλ κ²½μ°:
import "./SomeInterface";
index.ts
νμΌμ import "./SomeInterface";
(μ νν κ·Έμ κ°μ΄ - λͺ
λͺ
λ λ°μΈλ© μμ΄)λ₯Ό μΆκ°νλ©΄ μλν΄μΌ ν©λλ€. ν©λκΉ?
λΆννλ, λ‘€μ μ μ ν μ μΈλ§ ν¬ν¨νλ νμΌκ³Ό κ°μ μ μΈ μ μ© νμΌμ λν νλ¬κ·ΈμΈμ λ³ν νΈλ€λ¬λ₯Ό νΈμΆνμ§ μμ΅λλ€. μμ μμ μ Rollupμ΄ νμΌμ νκ°νλλ‘ νκΈ° λλ¬Έμ μλν΄μΌ ν©λλ€. μ΄ λ¬Έμ : https://github.com/rollup/rollup-plugin-typescript/issues/28μμ μ΄ λ¬Έμ κ° λ°μνλ λ°©λ²κ³Ό μ΄μ λ₯Ό μ€λͺ ν©λλ€. μ΄λ‘ μ μΌλ‘ μ§μ μ μμ μ ν리μΌμ΄μ μ λͺ¨λ μ’ μμ±μ μλμΌλ‘ ν΄κ²°νκ³ μ ν μ μΈλ§ ν¬ν¨νλ μ’ μμ±μ κ²°μ ν μ μμ§λ§ λ‘€μ μ΄ λ³ν νν¬λ₯Ό νΈμΆνλλ‘ κ°μ ν λ°©λ²μ μμ΅λλ€(λ§μ μΆκ° λΉλ λ¨κ³ 볡μ‘μ±κ³Ό κ°μ λ€λ₯Έ λͺ λ°±ν λ¨μ μ μΈ). ).
λ‘€μ μ체λ₯Ό λ³κ²½νμ§ μκ³ λ μ΄μ λν΄ λ§μ μμ μ μνν μ μμ΅λλ€. μ§κΈ μ λ΄κ° μ€λͺ ν "ν΄νΉ" ν΄μΌ ν©λλ€.
λ€, λ°©κΈ νμΈνμ΅λλ€. ν
μ€νΈ μ μ₯μμ import "./SomeInterface";
λ₯Ό μΆκ°νλ©΄ λ¬Έμ κ° ν΄κ²°λ©λλ€.
μ νλ§ κ°μ Έμ¬ λ typescriptλ js μΆλ ₯μμ ββimport λ¬Έμ μλ΅νκ³ λ‘€μ μ ν΄λΉ νμΌμ λ³΄μ§ μμΌλ―λ‘ νΈλμ€νμΌμ μν΄ λ³΄λ΄μ§ μμ΅λλ€.
λμ€ν¬μμ μμ²ν νμΌ μ ν λ νΈλμ€νμΌμ μν΄ λ³΄λΈ νμΌ λ‘€μ μ μμ΄κ³ λͺ¨λν°λ§νλ €κ³ ν©λλ€. μ μ μ μ© νλκ·Έλ₯Ό μ¬μ©νμ¬ μ°¨μ΄μ μ κ°μ λ³νν μ μμ΄μΌ ν©λλ€. μ΄λ‘ μΈν΄ μ΄λ€ κ²½μ°μλ λ무 λ§μ d.t νμΌμ΄ μμ±λ μ μμ΅λλ€(μλ₯Ό λ€μ΄ λ‘€μ μ΄ νΈλ¦¬μμ ν©λ²μ μΌλ‘ νλ€λ¦° κ²½μ°).
μ‘°μ¬ν΄ μ£Όμ μ κ°μ¬ν©λλ€. μ΄μ λν΄ κΈ°μ¬ν μ μλμ§λ νμΈνκ² μ΅λλ€.
@onigoetz , μ’μ, λ§μ€ν°μ ν¨κ» νλ‘μ νΈλ₯Ό μλνμμμ€. μ¬λ°λ₯Έ μ μΈμ΄ μμ±λμλμ§ νμΈνλ μκΈ°μΉ μμ μ μΈμ΄ μλμ§ νμΈνμΈμ. :)
κ΅μ₯ν©λλ€, λΉμ μ λ΄κ° μκ³ μλ λμ κ·Έκ²μ μμ ν κ³ μ³€μ΅λλ€ :)
λλ κ·Έκ²μ ν μ€νΈνκ³ κ±°μ μ μλν©λλ€.
μ½κ°μ λ¬Έμ κ° μμ§λ§ μ°λ¦¬κ° ν μ μλ μΌμ΄λΌκ³ μκ°ν©λλ€. μΉν© λ‘λκ° μ νν λμΌν μμ μ μννκ³ νμΌ λͺ©λ‘μ TypeScript μ체μμ μμ±λ©λλ€.
μλ‘μ; λ΄ μ μ₯μμ μΈ κ°μ νμΌμ΄ μλ κ²½μ°:
index.ts
μμ
SomeInterface.ts
SomeInterface.ts
nongenerated.ts
μμ
SomeInterface.ts
nongenerated.ts
λ μ°Έμ‘°λμ§ μμ§λ§ ν΄λΉ μ νμ μ΄μ¨λ μμ±λ©λλ€.
λ©μ§, ν μ€νΈ μ£Όμ μ κ°μ¬ν©λλ€. μ‘°κΈ μλ€κ° λ€λ₯Έ λ¬Έμ κ° νμΈλλ©΄ 곡κ°νκ² μ΅λλ€.
λ€, λ‘€μ
μ μ°νν λ μ°λ¦¬κ° ν μ μλ μΌμ λ§μ§ μμ΅λλ€. exclude
μ΅μ
μμ ν΄λΉ νμΌμ μλμΌλ‘ μ μΈν μ μμ΄μΌ νμ§λ§ μ΄λ μ’μ§ μμ ν΄κ²° λ°©λ²μ
λλ€.
μ’μ, μ§κΈ 0.5.1μμ
μ μλν©λλ€. tsconfig.jsonμ ꡬμ±νμμμ€.
{
"compilerOptions": {
"module": "es2015",
"target": "es5",
"declaration":true,
"declarationDir": "lib",
"typeRoots": [
"node_modules/@six006",
"node_modules/@types"
],
"lib": [
"es2015",
"es2017",
"es5"
],
},
"include": [
"src/index.ts",
"src/module/**/*.ts"
],
"exclude": [
"node_modules"
]
}
include
μΉμ
μμ μμ±ν νλͺ©μ μλ €μ€λλ€.
YMMV νμ§λ§ μ΄λ κ² μλνλλ‘ νμ΅λλ€ ...
~ μ μ
export type MyType = { ... };
~ νμ
type MyType = { ... };
export { MyType }
κ·Έλ§ν κ°μΉκ° μκΈ° λλ¬Έμ λ‘€μ
νμ tsc --emitDeclarationOnly
νΈμΆνλ©΄ μ μΈ νμΌμ λΉλ ν΄λλ‘ μ¬μ μν©λλ€.
λ΄ package.jsonμμ
"scripts": {
"build": "rollup -c",
"postbuild: "tsc --emitDeclarationOnly"
}
κ°μ₯ μ μ©ν λκΈ
κ·Έλ§ν κ°μΉκ° μκΈ° λλ¬Έμ λ‘€μ νμ
tsc --emitDeclarationOnly
νΈμΆνλ©΄ μ μΈ νμΌμ λΉλ ν΄λλ‘ μ¬μ μν©λλ€.λ΄ package.jsonμμ