ããããããã¯ç§ã®åŽã®èšå®ãã¹ã§ããããã°ã®ããã«èŠããŸãã ããŒã«ã¢ããæ§æã®input
ããããã£ãšããŠobject
ã䜿çšãããšãå
¥åãã¡ã€ã«ã®å
¥åãã¡ã€ã«ã¯ããªããžããªã®ã«ãŒããã©ã«ããŒïŒããŒã«ã¢ããæ§æãã¡ã€ã«ãšåããã©ã«ããŒïŒã«çæãããŸãããã³ãã«ãããJSãã¡ã€ã«ãšäžç·ã®ã¿ãŒã²ããåºåãã£ã¬ã¯ããªïŒããã§ã¯./dist
ïŒã§ã¯ãããŸããã
{
...
input: {
Lib1: './src/Lib1.tsx',
Lib2: './src/Lib2.tsx'
},
output: {
dir: './dist',
format: 'cjs',
sourcemap: true,
entryFileNames: '[name].js'
}
}
{
...
"compilerOptions": {
"outDir": "./dist"
},
}
// These files are created
./Lib1.d.ts
./Lib2.d.ts
// instead of (expected):
./dist/Lib1.d.ts
./dist/Lib2.d.ts
äžæè°ãªããšã«ã entryFileNames: 'dist/[name].js'
ãšå
¥åãããšã dist
ãã©ã«ããŒå
ã«dist
ãšããäžèŠãªãµããã©ã«ããŒãäœæãããããã«äœæãããŸãã
useTsconfigDeclarationDir
ãã©ã°ã€ã³ãªãã·ã§ã³ã¯ãä»ã®ãšããåé¿çã§ãã
ããã¯ã0.20.0ã§ãªãªãŒã¹ãããïŒ142ã§ä¿®æ£ãããå¯èœæ§ããããŸã
ããã«ã¡ã¯@ ezolenkom ïŒ @ jakearchibald ãå®éã«ã¯ã©ã¡ããéããããŸããã
ããŒã«ã¢ãããã©ã°ã€ã³ã«useTsconfigDeclarationDir
ãªãã·ã§ã³ãè¿œå ãããšã宣èšãã¡ã€ã«ã¯ãŸã£ããäœæãããªããªããŸãã æ®å¿µãªããã0.20.1ã«ã¢ããããŒãããŠãéãã¯ãããŸããã§ããã
@benkeen useTsconfigDeclarationDir: true
ãã©ã°ã€ã³ãªãã·ã§ã³ã䜿çšããå Žåã¯ã tsconfig.json
declarationDir
å€ãå¿
èŠã§ãã
åæ§ã®åé¡ããããŸããç§ã®ãããžã§ã¯ãã®ã¬ã€ã¢ãŠãã¯æ¬¡ã®ããã«ãªããŸãã
export default [
{
input: 'src/subFolder1/one.ts,
output: [
{
file: 'dist/one.js'
.....
}
],
plugins: [
typescript({
typescript: require('typescript'),
}),
]
},
input: 'src/subFolder2/two.ts,
output: [
{
file: 'dist/two.js'
.....
}
],
...
},
]
åºåãšããŠç§ã¯æã£ãŠããŸãïŒ
|---subFolder1
| |--------one.d.ts
|
|---subFolder2
| |---------two.d.ts
|-----one.js
|-----two.js
useTsconfigDeclarationDir: false
0.20.1ã§åäœããŸã-d.tsãã¡ã€ã«ã¯output.[].dir
æå®ããããã©ã«ããŒã«ç§»åããŸãã @benkeenããäžåºŠããçŽããŠããã ããŸãããïŒ
@AntonPilyakã¯èšèšã«ãããã®ã§ããd.tsããµããã¹ãªãã§1ã€ã®ãã©ã«ããŒã«å
¥ãå Žåã subFolder1/one.ts
ãšsubFolder2/one.ts
ããã®ãã¡ã®1ã€ãå¥ã®ãã©ã«ããŒãäžæžãããŸãã
@ezolenko ïŒãã®æ©èœã¯ãå®éã®åé¡ã解決ããã®ã§ã¯ãªããããå€ãã®äžäŸ¿ãçã¿åºããšæããŸãïŒããããã¹ãŠã®ãã£ã¬ã¯ããªæ§é ãç¶æããã®ã¯é£ããããïŒã ç°¡åã«å«ããããšãã§ãããã³ãã«ãäœæããã«ã¯ãããããã¹ãŠã®å宣èšããã³ãã«ã®ã«ãŒãã«ã³ããŒããã¹ã¯ãªãããäœæãããã£ã¬ã¯ããªã.npmignoreã«è¿œå ããå¿ èŠããããŸãã ãããã®è¿œå ã®ãã£ã¬ã¯ããªã¯ãåãååã®ã¿ã€ããã¡ã€ã«ã«å¯ŸããŠã®ã¿äœæããããšããå§ãããŸãã æ®ãã¯ãrollup.config.jsonã®ãoutputãã»ã¯ã·ã§ã³ã§å®çŸ©ãããŠãããã£ã¬ã¯ããªã䜿çšããŸãã
@AntonPilyak useTsconfigDeclarationDir: true
ãªãã·ã§ã³ã䜿çšããŠãtsconfigã§declarationDir
ãèšå®ã§ããå ŽåããããŸããããã«ãããtypescriptèªäœãå
¥ååºåãã¹ãåŠçã§ããããã«ãªããŸãã
ãã¹ã®äžææ§ã«åºã¥ããŠãµããã£ã¬ã¯ããªã䜿çšãããã©ããã決å®ããããšã¯ãé²åãããããžã§ã¯ãã§ã¯æªå€¢ã«ãªããŸããå¥ã®ãã©ã«ãã«åãååã®æ°ãããã¡ã€ã«ãè¿œå ããããã«ãçªç¶å ¥åããµããã©ã«ãã«ç§»åããŸãã
éåžžãããããªåä»ããå¿ èŠãªå Žåã¯ããšã«ãããããã1ã€ã®ãã¡ã€ã«ã«ããŒãžããå¿ èŠããããŸãïŒãã®ååãå¿ãç¶ããŠããnpmã¢ãžã¥ãŒã«ããããŸããïŒ
ç§ã¯ããŒãžã§ã³0.22.0
ã䜿çšããŠããŸããã @ AntonPilyakãšã»ãŒåãåé¡ããã
{
...
input: {
foo: 'src/lorem/foo.ts',
bar: 'src/ipsum/bar.ts'
},
output: {
dir: 'dist',
format: 'cjs',
sourcemap: true,
}
}
ãããŠãç§ã¯ãããåºããŸãïŒ
dist/
lorem/
foo.d.ts
ipsum/
bar.d.ts
foo.js
foo.js.map
bar.js
bar.js.map
æããã«ã *.d.ts
ãã¡ã€ã«ã*.js
*.js.map
ãã¡ã€ã«ãš
useTsconfigDeclarationDir
ãšdeclarationDir
ãããã£ãŠã¿ãŸãããç¡é§ã«ãªããŸããã
å®çŸ©ãã¡ã€ã«ã¯åžžã«ããããlorem
ãšipsum
ãµããã©ã«ããŒå
ã«ããããã©ãããªã¹ãã«ã¯ãªããŸããã
ããã«ããšã³ããªãã€ã³ãã ãã§ãªããèŠã€ãã£ããã¹ãŠã®.tsãã¡ã€ã«ã«å¯ŸããŠå®£èšãã¡ã€ã«ãäœæããŠããããã§ãã
dist/
lorem/
foo.d.ts
ipsum/
utils/
bar-helper.d.ts
bar.d.ts
some_other_ts_file/
not_imported_by/
neither_foo_nor_bar/
wat.d.ts
foo.js
foo.js.map
bar.js
bar.js.map
options.tsconfigOverride.input
ããšã³ããªãã€ã³ãã ãã«ã¹ã³ãŒãããããšããŸããããããã¯äœã®å¹æããªãããã§ãã å®éã tsconfigOverride.input
ããŸã£ããæ©èœãããã©ããããããããŸããã
ããã¯ãã¹ãŠå°ãæ··ä¹±ããŸãã
..ã
ã€ãŸãã utils/bar-helper.ts
宣èšãã¡ã€ã«ãäœæããå¿
èŠãããå Žåã¯ååã«å
¬å¹³ã§ãããå°ãªããšãwat.ts
ã¯å
šäœãã
ãããããã¯tsconfigã«ãã£ãŠèŠã€ãããããã¹ãŠã®ãã¡ã€ã«ã®å®£èšãçæããŸããç¹å®ã®ãã¡ã€ã«ã«è§Šããããªãå Žåã¯ããããtsconfigã«é€å€ãããŠãããå«ãŸããŠããªãããšã確èªããŠãã ããã typescriptã§èŠã€ãã£ããã¡ã€ã«ã®ãªã¹ãã衚瀺ããã«ã¯ãåé·æ§3ã§ãã©ã°ã€ã³ãå®è¡ããã解æãããtsconfigããšã³ããªãæ¢ããŸãã
å®çŸ©ãã¹ã®å ŽåãäŸã®ã©ãã«'src/ipsum/foo.ts'
å®çŸ©ãé
眮ããŸããïŒ
ããã¯dist/foo.js
å®çŸ©ã§ããããããœãŒã¹ããããã¡ã€ã«ãšåãããã«ãã€ãŸãdist/foo.d.ts
暪ã«é
眮ããããšæããŸããã
TypeScriptã¯dist/foo.js
ãšdist/lorem/foo.d.ts
ããã¢ã«ããããšãç¥ã£ãŠããŸããïŒ
ããã厩å£ããå®å
šãªã·ããªãªã¯æ¬¡ã®ãšããã§ãã
src / dir1 / foo.ts
src / dir2 / foo.ts
dir1 / foo.tsãããŒã«ã¢ããå ¥åãšããŠèšå®ãããšãdir2 /foo.tsãã€ã³ããŒããããŸãã ããŒã«ã¢ããã¯ãäž¡æ¹ã®ãœãŒã¹ãã¡ã€ã«ã®é¢é£éšåãå«ãdist / foo.jsãã³ãã«ãäœæããŸãããtypescriptã¯ãåãååã®2ã€ã®ã¿ã€ãå®çŸ©ãã¡ã€ã«ãã©ããã«äœæããå¿ èŠããããŸãã
ç°¡åãªè§£æ±ºçã¯ããœãŒã¹ã¬ã€ã¢ãŠãããã©ãŒãªã³ã°ããŠãµããã©ã«ããŒã䜿çšããããšã§ãã åå®çŸ©ãããŒãžããããã«æ瀺ããªãéãã tsc
ãåæ§ã«æ©èœãããšæããŸãïŒrpt2ã¯å®çŸ©ã®ããŒãžããµããŒãããŠããŸããïŒã
ãããŠãã¯ããtypescriptã¯ã¿ã€ãå®çŸ©ãèŠã€ããå Žæãç¥ã£ãŠããŸãã ãããã£ãŠãå°ãåä»ã§ããããšãé€ãã°ãããã¯åé¡ã«ã¯ãªããªãã¯ãã§ãã ããªãã¯NPMã®ã¿ã€ããšããã±ãŒãžãå±éãããå Žåã¯ãèšå®"types"
ã§package.json
ããªãã®ãšã³ããªãã€ã³ãã®ããd.tsãã¡ã€ã«ã«ã Typescriptã¯ããããç©äºãèŠã€ããŸãã
ããããã®ãã©ã°ã€ã³ã¯å®£èšãã«ãããã»ã¹ã®ã©ã®éšåãå®éã«ã¯ç®¡çããŠããŸããã Rollupã®ããã»ã¹ãšã¯é¢ä¿ãªãã tsc
ãèµ·åããŠãã®åŠçãå®è¡ããŸããïŒ
ããã§ããããã€ãã®ã¢ãžã¥ãŒã«ã®ã¿ãå
¬é/å
¬éããŠããå ŽåãTypeScriptã§æ€åºããããã¹ãŠã®tsãã¡ã€ã«ã«å¯ŸããŠ*.d.ts
ãã¡ã€ã«ãçæããå¿
èŠãããã®ã¯ãªãã§ããïŒ ãšã³ããªãã€ã³ãã ãã«å¶éããæ¹æ³ã¯ãããŸãããïŒ
ã€ãŸããã¹ã¿ã³ãã¢ãã³ã¢ãžã¥ãŒã«ã®ã»ããïŒ import tool1 from 'myTools/tool1';
ãªã©ïŒããšã¯ã¹ããŒãããŠããã®ã§ã pkg.types
䜿çšããåäžã®ãšã³ããªãã€ã³ãã¯ãããŸããã åå®çŸ©ãã¡ã€ã«ã¯ãVSCodeããããååŸããããã«ã察å¿ãã*.js
é£ã«ååšããå¿
èŠããããŸãã
ããã«æªãããšã«ãç§ãæã£ãŠããå Žå
{
...
input: {
fooscript: 'src/foo/index.ts',
barscript: 'src/bar/index.ts'
},
output: {
dir: 'dist',
format: 'cjs',
sourcemap: true,
}
}
ç§ã¯åŸãïŒ
dist/
foo/
index.d.ts
bar/
index.d.ts
fooscript.js
fooscript.js.map
barscript.js
barscript.js.map
ãããŠä»ãTypeScriptãdist/fooscript.js
ãšdist/foo/index.d.ts
ããã¢ã«ããæ¹æ³ã¯ãããŸããã
..ã
ãã©ã°ã€ã³ãTypeScriptã«åJavaScriptãã³ãã«ãã¡ã€ã«ã®å®å
/åºåãã¹ãäŸçµŠããæ¹æ³ã¯ãããŸãããïŒ tscã¯å
ã®ãšã³ããªã®ãã¡ã€ã«åãåãåãã宣èšãçæãããšãã«ããããã£ãããšä¿æããŠããããã§ãã
...ãŸãã¯ãå
¥åãã¡ã€ã«ããšã«ã察å¿ãã*.d.ts
ãã¡ã€ã«ãæ¢ãããããå
¥åãã¡ã€ã«ãããã®å®å
ã«ç§»åããŠååãå€æŽããŸãã ïŒããªãã¯ç§ãããã§ç§ã®ãå°»ãã話ããŠããããšã«æ°ä»ããããããŸãããããã§... ;-)
ããã¯ãããŒã«ã¢ãããçµäºããåŸã«æåã§è©ŠããŠã¿ãå¿ èŠããããã®ã§ããããã©ã°ã€ã³ãèªåçã«åŠçããã®ã§ããã°ãã¯ããã«äŸ¿å©ã§ãã
ãããããã©ã°ã€ã³ã¯LanguageServicesã䜿çšããŸãïŒéåžžãåãtypescript API IDEã䜿çšããŸãïŒããã®ãããäœãã©ãã«æžã蟌ãããããçšåºŠå¶åŸ¡ã§ããŸãã
ããŒã«ã¢ããå ¥åããšã«1ã€ã®åå®çŸ©ãäœæããã«ã¯ããã®å ¥åã®ãã¹ãŠã®ã€ã³ããŒãã®å®çŸ©ãããŒãžããå¿ èŠããããŸãã ããŒã«ã¢ããã¯1ã€ã®å ¥åtsãã¡ã€ã«ãåç §ããŠããå¯èœæ§ããããŸãããããããã«ããããšãã«ä»»æã®æ°ã®ãœãŒã¹ãã¡ã€ã«ãã€ã³ããŒãããŠãã³ãã«ããŠããå¯èœæ§ãããããããã«ãçæãããã¿ã€ããå¿ èŠã§ãã
çŸåšãtsconfigãã¡ã€ã«ãèŠããšãã«typescriptãèŠã€ãããã¹ãŠã®å®çŸ©ãçæããåŽã«èª€ãããããŸãã ãã©ã³ã¹ãã€ã«ãããã¢ãžã¥ãŒã«ã«å¯ŸããŠã®ã¿åãçæãããšãåã®ã¿ã®ãã¡ã€ã«ã¯ç¡èŠãããŸãã
ãã®éšåãåæ€èšããå¿ èŠããããããããŸããããã®éšåãå®äºããŠããAPIãå€§å¹ ã«å€æŽãããŸãã...
ç§ã¯ããªãã®äŸãæ©èœãããæ¹æ³ãèŠãå¿ èŠããããŸãã 1ã€ã®ããŒã«ã¢ããæ§æã§è€æ°ã®ãã³ãã«ãããé©åã«ãµããŒãããå¿ èŠãããå ŽåããããŸãã
ãããæ§ç¯ããåŸãã©ã®ããã«ãã®ããã±ãŒãžãæ¶è²»ããŸããïŒ npmã§å ¬éããããã±ãŒãžåã§ã€ã³ããŒãã§ãããã®ã§ã¯ãããŸãã...
ã¹ã¿ã³ãã¢ãã³ãŠãŒãã£ãªãã£ã®ã³ã¬ã¯ã·ã§ã³ãäœæããŠããŸãã å ¬é/ã€ã³ã¹ããŒã«ãããããã±ãŒãžã®ã«ãŒããã©ã«ããŒã«ã¯ããã«ãããããã¹ãŠã®ã¢ãžã¥ãŒã«ãã¡ã€ã«ããã©ãããªã¹ãã«å«ãŸããŠããŸãã
ïŒç§ã¯ãããããã¹ãããããã©ã«ããŒæ§é ã®TS / ES6ã§èšè¿°ãããã¹ããã¡ã€ã«ãæ··åããããŒã«ã¢ããã䜿çšããŠãã³ãŒãåå²ãšã€ã³ã©ã€ã³åãå¹ççã«çµã¿åãããCJSãã¡ã€ã«ã®ãã©ãããªã¹ãã«å€æããŸããå ±æã³ãŒããïŒ
次ã«ããããã®ããŒã«ããã¡ã€ã«åã§ã€ã³ããŒãããŠäœ¿çšããŸãâ次ã®ããã«ãªããŸãã
import tool1 from 'myTools/tool1';
import tool2 from 'myTools/tool2';
ããŒã«ãããå
šäœã«åäžã®ãšã³ããªãã€ã³ãããªãïŒ pkg.main
ãŸãã¯pkg.module
ãšã³ããªããªãïŒããšã§ããã£ãã«äœ¿çšãããªããããã«ã¯å®éšçãªããŒã«ãèªç±ã«è¿œå ã§ãããšããèãæ¹ã§ããäžæµã®æ¶è²»è
ã®ããã«éã¿/èšæºæãè¿œå ããããšãªãïŒå¹ççãªããªãŒã·ã§ãŒãã³ã°ããªãå¯èœæ§ããããŸãïŒã
...ã³ãã³ãã©ã€ã³ã§tsc
ãå°ã䜿ã£ãŠã¿ãŸããããããªããæ±ã£ãŠããå¶éãããã£ããšæããŸãã
ãã ããtscãå®è¡ããã¢ãžã¥ãŒã«/åºå圢åŒã"amd"
ãŸãã¯"system"
ã«èšå®ãããšããã¹ãŠã®é©åãªãªã¹ããå«ãåäžã®*.d.ts
ãã¡ã€ã«ãçæãããããšã«æ°ä»ããŸãããå¿
èŠãªdeclare module "..."
ãããã¯ãã€ã³ã©ã€ã³åãããŠããŸãã
ãã®åäœãäœããã®åœ¢ã§æªçšãããå¯èœæ§ãããã®ã§ã¯ãªãããšæããŸã-ãã¡ã€ã«ã®ååå€æŽ/移åããã³æåŸã®ïŒã¡ã€ã³ïŒã¢ãžã¥ãŒã«å®£èšã®ã¢ã³ã©ãã/æžãæããä»ããŠïŒ
è£è¶³ïŒ tsc
ã¯ããã®å®£èšãã¡ã€ã«ã®ããªãŒã·ã§ã€ã¯ã«ããŸãåãå
¥ããŠããªãããã§ãã ããã±ãŒã¹ã§ã¯ãåäžã®éåžžã«åçŽãªé¢æ°ã·ã°ããã£ããšã¯ã¹ããŒãããã¡ã€ã³ïŒãšã³ããªãã€ã³ãïŒã¢ãžã¥ãŒã«ããããŸããã宣èšãã¡ã€ã«ã¯ãèå°è£ãã§äœ¿çšããããã¹ãŠã®ãã©ã€ããŒãã¢ãžã¥ãŒã«ã®å®£èšãããã¯ãå
¬éããŠããŸãã é¢çœãã :-)
ãŸãäŒã£ããã
ä»ã®ãšããã tsc
ã«ã«ã¹ã¿ã declarationDir
ãèšå®ããŠããã¹ãŠã®*.d.ts
ãã«ãã³ãããŠãããåããšã³ããªãã¡ã€ã«ãã€ã³ããŒãããã¹ã¿ã³ãã¢ãã³ã¹ã¯ãªãããå®è¡ããŸãã Rollupã«ãã£ãŒãããéã®output-fileãªããžã§ã¯ããããã«ãããå®éã®å®£èšãã¡ã€ã«ãexport * from
ããã ãã®ãã³ãã«å®å
ã¬ãã«ã®å®£èšãã¡ã€ã«ãçæãããŸãã
åºæ¬çã«ã次ã®ãã®ã ããå«ãdist/fooscript.d.ts
ãçæããŸãã
export * from './__types/foo/index';
ããã¯éãã¹ã¿ã³ãã¢ãã³ã®ããã¯ã§ãããäºæ³ã©ããã«æ£ããçµæãåŸãããŸãã
rollup-plugin-typescript2
åããããªããšãã§ããã®ã ãããïŒ
ãããããã¯ããŸãããã§ãããã
ç§ã«ã¯ããã€ãã®ã¢ã€ãã¢ããããŸãïŒç§ããããã«è¿ã¥ãããšãïŒãããšãã°ãé¢ä¿ããåd.tsã«å¯ŸããŠ/// <reference types=""/>
æãæã€<bundlename>.d.ts
ãçæããŸãã
ãŸããããŸãã«ãå€ãã®å宣èšãçæãããšããé¢é£ãããã°ãä¿®æ£ãããããã«ãŒããã¡ã€ã«ãšãããå®éã«ã€ã³ããŒããããã®ã ãã«å¶éããå¿ èŠããããããããŸããã
ããã€ãã®èãïŒ
IMOãç§ã®ããã¯ã®å¯äžã®æ¬åœã«éãéšåã¯ããããããŒã«ã¢ããããã»ã¹ãšã¯äžç·ãç»ããŠãããšããäºå®ã§ãã äžéã®*.d.ts
ã¯ãå®éã«ã¯ãRollupã®çæããããã³ãã«ãštsc
ã®å®çŸ©ã®éãæ©æž¡ãããéåžžã«å·§åŠã§æ
£çšçãªæ¹æ³ã§ãã
tsc
çæããã宣èšãã¡ã€ã«ã¯çžå¯Ÿãã¹ãä»ããŠçžäºã«åç
§ããããããã®ãã¡ã€ã«/ãã©ã«ããŒæ§é ã¯ãããããã®ãŸãŸã«ããŠããã®ãæåã§ããã«ã¹ã¿ã èšèªæ§æã®ããã«ãRollupã®æ©èœã®äžéšãåå®è£
ããããšã«ãªããŸããã
ãããŠã rollup-plugin-typescript2
ãoutput.dir + '__types'
ãããªãã®ãããã©ã«ãã®declarationDir
ãšããŠèšå®ãããšã tsc
ã®é床ã®ç±æã«ãã£ãŠåŒãèµ·ããããæ··ä¹±ã¯ãã¡ããšäžæãããŸããæ確ã«ååãä»ãããããã©ã«ãå
ã®å
æ¯ã ããããã°ãç¡é¢ä¿ãªå®çŸ©ãã¡ã€ã«ã¯IMOã«ãšã£ãŠéåžžã«å°ããªåé¡ã«ãªããŸãã
FWIWããããç§ã®ã¹ã¯ãªããã®èŠç¹ã§ãã
const { makeInputMap, getEntrypoints, distFolder, srcFolder } = require('./buildHelpers');
const { writeFileSync } = require('fs');
const { relative } = require('path');
const srcPrefixRe = new RegExp('^' + srcFolder + '/');
const tsExtRe = /\.tsx?$/;
const declDirRelative = './' + relative(
distFolder,
require('../tsconfig.json').compilerOptions.declarationDir
);
const tsEntrypoints = getEntrypoints()
.filter((fileName) => tsExtRe.test(fileName));
Object.entries(makeInputMap(tsEntrypoints))
.forEach(([moduleName, sourcePath]) => {
const tscDeclFile = sourcePath
.replace(srcPrefixRe, declDirRelative + '/')
.replace(tsExtRe, '');
const outFile = distFolder + '/' + moduleName + '.d.ts';
writeFileSync(
outFile,
[
'export * from "' + tscDeclFile + '";',
'import x from "' + tscDeclFile + '";',
'export default x;',
'',
].join('\n')
);
});
console.info('Created local declaration files for TypeScripted entrypoints.');
ããã©ã«ãã®ãšã¯ã¹ããŒããæ瀺çã«åãšã¯ã¹ããŒãããå¿ èŠãããããã«æããããããäžèšã®äŸãæŽæ°ããŸããã
äºåãã¹ãã§ã¯ã default
ãšã¯ã¹ããŒãã®ãªã宣èšãã¡ã€ã«ããdefault
ãç²ç®çã«åãšã¯ã¹ããŒãããŠãç¡å®³ã§ãããé»ã£ãŠç¡èŠãããããšã瀺ãããŠããŸãã ïŒå°ãªããšãVSCodeã«ãããïŒ
ããã«ã¡ã¯ããã®åé¡ã¯v0.23.0ã§è§£æ±ºããå¿ èŠããããŸããïŒ
ïŒ...ãã¹ãŠã®ã«ã¹ã¿ã ãã¡ãã£ã³ã°ãåé€ããããã«ãããžã§ã¯ããæŽæ°ããå¿ èŠããããã©ããçåã«æã£ãŠããŸãïŒ
0.23ã¯ã衚瀺ãããŠãããã¹ãŠã®å®£èšãçæããŸããããçžå¯Ÿçãªãµããã©ã«ããŒã«å®éã«ã€ã³ããŒããã宣èšãçæããŸãã ããããæŽæ°ããŠãã軜ãåã«ããããšãã§ããŸãããã«ãŒãå宣èšãçæãããã®ã¯ãŸã ãããŸããã
ç§ã®ã«ã¹ã¿ã åé¿çãã«ãã¹ã¯ãªããïŒäžèšãåç §ïŒã¯ããŸããŸãå€ãã®ãããžã§ã¯ãã«åŸã ã«å¿ã³å¯ã£ãŠããŸãã o_O
åèïŒå
¬åŒã®@ rollup / plugin-typescriptããã±ãŒãžã®éçºãåéãããã¿ã€ããã§ãã¯ãšå®£èšãã¡ã€ã«ã®åºåæ©èœãè¿œå ãããã®ã§ãå人çã«ããã䜿çšããããã«åãæ¿ããŠããŸãã
ãã ããå¶éã¯ã»ãšãã©åãã§ãã
@maranomynetããŒã«ã¢ãããå®è¡ãããåŸãã宣èšãã¡ã€ã«ã移åããããã«ã¹ã¯ãªããã«äŸåããŠããŸããïŒ ç§ã¯èªåèªèº«ãåãæ¿ããéãããŸããããŸããã§ããã
ããã tsc
ãšã³ãããŒãšã³ãã®ãã³ãã«ãè¡ãããªãéãããããå¯äžã®æ¹æ³ã®ããã§ãã
ãããã®ããŒã«ã¢ãããã©ã°ã€ã³ã¯ãtscã«2ã€ã®ç°ãªãã¿ã¹ã¯ãå®è¡ããããã«å¹æçã«èŠæ±ããŠããããã§ãã
1ãš2ã®çµæã¯äžèŽããããå ¥åãããããã³ãŒãåå²ãªã©ã䜿çšããŠããå Žåã¯äžèŽããŸãããâAFAICTã
...ããŒã«ã¢ãããã©ã°ã€ã³ãå宣èšã®çæããã»ã¹ã«ããã«é¢äžãããªãéãã
ãããããããã¯ç§ãèãããããªãã®ã§ããããããšãïŒ ããªãã®åœ¹ã«ç«ã€çãã®ããã«ããªãã«ðãäžããŸããããããŠðã¯ç§ãããã«ã€ããŠã©ãæãããã®ããã§ãã
ããã§éãããã§ããïŒ
@maranomynetãç§ãšåãsrcãã©ã«ããŒæ§é ãæã€èŠåŽããŠããéã®ããã«ã
ç§ã¯ããã®ç°¡åãªä¿®æ£ã«åºããããŸãããå¥ã®éãæ¹æ³ãããããŸããããç§ã«ãšã£ãŠã¯ããŸããããŸãã
ç§ã¯rollup-plugin / typescript2ã䜿çšããŠããã®ã§ããã®åçã§ã¯ãã®æ§æã䜿çšããŸãã
tsconfig.jsonã§ç¬èªã®declarationDirãå®çŸ©ããŠããããžã§ã¯ãããã³ãã«ãããdistã®ç¬èªã®ãã¹ã«ãããã¹ãŠã®* .d.tsãã¡ã€ã«ããã³ãã§ããããã«ããŸãã ãŸããããŒã«ã¢ããæ§æãã¡ã€ã«ã®typescriptãã©ã°ã€ã³ã§useTsConfigDeclarationDirãtrueã«èšå®ããŠãã ããã
ãŸããrollup.config.jsïŒããã³package.jsonïŒã§åã
ã®ã³ã³ããŒãã³ããã³ãã«ã®åºåãã¹ãå®çŸ©ããå Žåã¯ããããã®ãã¹ããdeclarationDirã+ãsrcã³ã³ããŒãã³ãã«ãŒãã®ç¶æ
ããšåãã«ãªãããã«å€æŽããŸãã ãããã£ãŠãsrcã®ã³ã³ããŒãã³ãã次ã®ãããªå ŽåïŒ
src / homepage / foo.tsx
ãããŠãdeclarationDirã¯æ¬¡ã®ãšããã§ãã
dist / MyDeclarationDir
ãããã£ãŠãåºåãã¹ã¯æ¬¡ã®ããã«ããå¿ èŠããããŸãã
dist / MyDeclarationDir / homepage / foo.js
ãã®ããã«ãããŒã«ã¢ããã¯ã³ã³ããŒãã³ãmain.jsãšåããã£ã¬ã¯ããªã«ã¿ã€ããå«ããTSã³ã³ã·ã¥ãŒããŒãããžã§ã¯ãã¯ã¿ã€ããååŸããŸãã
ãããã£ãŠããã³ãã«ã¯æ¬¡ã®ããã«ãªããŸãã
dist /
declarationDirPath/
component1/
foo.js/
foo.js
foo.map.js
foo.d.ts
component2/
bar.js/
bar.js
bar.map.js
bar.d.ts
æãåèã«ãªãã³ã¡ã³ã
ããã
tsc
ãšã³ãããŒãšã³ãã®ãã³ãã«ãè¡ãããªãéãããããå¯äžã®æ¹æ³ã®ããã§ãããããã®ããŒã«ã¢ãããã©ã°ã€ã³ã¯ãtscã«2ã€ã®ç°ãªãã¿ã¹ã¯ãå®è¡ããããã«å¹æçã«èŠæ±ããŠããããã§ãã
1ãš2ã®çµæã¯äžèŽããããå ¥åãããããã³ãŒãåå²ãªã©ã䜿çšããŠããå Žåã¯äžèŽããŸãããâAFAICTã
...ããŒã«ã¢ãããã©ã°ã€ã³ãå宣èšã®çæããã»ã¹ã«ããã«é¢äžãããªãéãã