@nycdotnetãèããŠãããšãããã«åãçµãããšã«
ããã§ã®ææ¡ã¯ãæç«ãçŠåãæ©ããå å²æ代ïŒïŒ11以åã§ãïŒã«æåã«éå§ãããŸããã ãã®ææ¡ã«ã¯ç®æ°ãããã®ã¯ãããŸããããããèªäœãç§ãã¡ããã®åé¡ã«åãçµãæãæ¥ããšæããŸãã ã¹ãã£ãŒãèªèº«ã®ææ¡ã¯ïŒ3394ã§ãã
çŸåšãTypeScriptã§ã¯ãéå§ãšéå§ãããªãç°¡åã§ãããæ¯æ¥ïŒïŒ2338ãSystem.jsã§ã®äœæ¥ã®å©ããåããŠïŒç°¡åã«ãªã£ãŠããŸãã ããã¯çŽ æŽãããã ãã ãããããžã§ã¯ãã®ãµã€ãºã倧ãããªãã«ã€ããŠãå°ãããŒãã«ããããŸãã çŸåšã次ã®ãããªã¡ã³ã¿ã«ã¢ãã«ããããŸãã
å°èŠæš¡ãªãããžã§ã¯ãã®å Žåãtsconfig.jsonã䜿çšãããšãã¯ãã¹ãã©ãããã©ãŒã ã®æ¹æ³ã§ä»»æã®ãšãã£ã¿ãŒãç°¡åã«ã»ããã¢ããã§ããŸãã 倧èŠæš¡ãããžã§ã¯ãã®å Žåã倧èŠæš¡ãããžã§ã¯ãã®èŠä»¶ãå€æ§ã§ãããããã·ã¹ãã ã®æ§ç¯ã«åãæ¿ããå¯èœæ§ããããŸããæçµçã«ã¯ãã·ããªãªã«ã¯é©ããŠããŸãããããŒã«ãäœæããã®ãéåžžã«é£ãããããããŒã«ãäœæããã®ã¯å°é£ã§ããããŸããŸãªãã«ãã·ã¹ãã ãšãªãã·ã§ã³ã
ã¹ãã£ãŒãã¯åœŒã®ã€ã³ã¿ãã¥ãŒã§ãããã¯äžçã®å®å šã«æ£ããã¢ãã«ã§ã¯ãªããšææããç§ã¯åœŒã«åæããåŸåããããŸãã 代ããã«ããããžã§ã¯ãã«ã¯3ã€ã®ãµã€ãºããããŸãã
ãããžã§ã¯ãã®ãµã€ãºãæ¡å€§ãããšããäžçšåºŠã®ã¹ãããã§æ¡å€§ã§ããå¿ èŠããããšã¹ãã£ãŒãã¯äž»åŒµããŸããããããªããšãããŒã«ã®ãµããŒããæ¥éã«äœäžããŸãã
ããã解決ããããã«ããäžèŠæš¡ãã®ãããžã§ã¯ããæ¯æŽããããšãææ¡ããŸãã ãããã®ãããžã§ã¯ãã«ã¯ããããžã§ã¯ããè€æ°ã®ã³ã³ããŒãã³ããããã«ããããããšãé€ããŠãä»æ¥tsconfig.jsonã§èª¬æã§ããæšæºã®ãã«ãã¹ãããããããŸãã ããã§ã®ä»®èª¬ã¯ããã®ã¬ãã«ã§ã¯ããã®ãµããŒãã«ãã£ãŠååã«æ©èœããå¯èœæ§ã®ãããããžã§ã¯ããããªãã®æ°ãããšãããã®ã§ãã
ã³ãã³ãã©ã€ã³ã³ã³ãã€ã«ãšIDEã§ãããã®ãããžã§ã¯ããæäœããå Žåã®äž¡æ¹ã§ããäžèŠæš¡ãã®ãããžã§ã¯ããäœæããéçºè ã«äœ¿ãããããšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
ãã®ææ¡ã«ã¯ããªãã·ã§ã³ã®ã³ã³ãã€ã«ããã³ã³ãã€ã©ãçŸåšåŠçããŠãã以å€ã®æé ã¯å«ãŸããŠããŸããã ãã®ææ¡ã¯ãå¥ã®ææ¡ã§åŠçããããã³ãã«ãŸãã¯ããã±ãŒãžã³ã°ã察象ãšããŠããŸããã èŠããã«ãååã«ããããã«ããã®ææ¡ã¯ãäžèŠæš¡ãã®ãããžã§ã¯ãã®ã¿ã察象ãšããŠããã倧èŠæš¡ãªãããžã§ã¯ãã®ããŒãºã¯å¯Ÿè±¡ãšããŠããŸããã
äžèŠæš¡ã®ãããžã§ã¯ãããµããŒãããããã«ãããtsconfig.jsonãå¥ã®tsconfig.jsonãåç §ãããŠãŒã¹ã±ãŒã¹ã«çŠç¹ãåœãŠãŸãã
ä»æ¥ã®tsconfig.jsonã®äŸïŒ
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"sourceMap": true
},
"files": [
"core.ts",
"sys.ts"
]
}
ææ¡ãããtsconfig.jsonã®ãäŸåé¢ä¿ãã»ã¯ã·ã§ã³ïŒ
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"sourceMap": true
},
"dependencies": [
"../common",
"../util"
],
"files": [
"core.ts",
"sys.ts"
]
}
äŸåé¢ä¿ã¯æ¬¡ã®ããããã瀺ããŸãã
äŸåé¢ä¿ã¯éå±€çã§ãã ãããžã§ã¯ãå šäœãç·šéããã«ã¯ãã«ãŒãtsconfig.jsonãå«ãæ£ãããã£ã¬ã¯ããªãéãå¿ èŠããããŸãã ããã¯ãäŸåé¢ä¿ã埪ç°ãããããšãã§ããªãããšãæå³ããŸãã 埪ç°äŸåé¢ä¿ãåŠçã§ããå Žåãããã°ã埪ç°äŸåé¢ä¿ãæã€ã¿ã€ãã®å ŽåããããŸãããå®å šãªè§£æ±ºãè¡ãããšãã§ããªãå ŽåããããŸãã
äŸåé¢ä¿ã¯ããäŸåé¢ä¿ãã»ã¯ã·ã§ã³ã«ãªã¹ããããŠããé åºã§æåã«äœæãããŸãã äŸåé¢ä¿ã®æ§ç¯ã«å€±æããå Žåãã³ã³ãã€ã©ãŒã¯ãšã©ãŒã§çµäºãããããžã§ã¯ãã®æ®ãã®éšåã®æ§ç¯ãç¶è¡ããŸããã
åäŸåé¢ä¿ãå®äºãããšãåºåãè¡šãã.d.tsããã¡ã€ã«ãçŸåšã®ãã«ãã§äœ¿çšã§ããããã«ãªããŸãã ãã¹ãŠã®äŸåé¢ä¿ãå®äºãããšãçŸåšã®ãããžã§ã¯ãããã«ããããŸãã
ãŠãŒã¶ãŒããµããã£ã¬ã¯ããªãäŸåé¢ä¿ãšããŠæå®ããããã¡ã€ã«ãã»ã¯ã·ã§ã³ãæäŸããªãããšã«ãã£ãŠãã®ã³ã³ãã€ã«ãæ瀺ããå ŽåãäŸåé¢ä¿ã¯äŸåé¢ä¿ã®ã³ã³ãã€ã«äžã«ã³ã³ãã€ã«ãããçŸåšã®ãããžã§ã¯ãã®ã³ã³ãã€ã«ãããåé€ãããŸãã
èšèªãµãŒãã¹ã¯ãåäŸåé¢ä¿ã調ã¹ãããšãã§ããŸãã åäŸåé¢ä¿ã¯ç¬èªã®tsconfig.jsonããé§åããããããããã¯è€æ°ã®èšèªãµãŒãã¹ã€ã³ã¹ã¿ã³ã¹ãäœæããå¿ èŠãããããšãæå³ããå ŽåããããŸãã æçµçµæã¯ããªãã¡ã¯ã¿ãªã³ã°ãã³ãŒãããã²ãŒã·ã§ã³ãäŸåé¢ä¿å šäœã®ãã¹ãŠã®åç §ã®æ€çŽ¢ãªã©ãå¯èœãªèª¿æŽãããèšèªãµãŒãã¹ã«ãªããŸãã
tsconfig.jsonãæããªãäŸåé¢ä¿ãšããŠãã£ã¬ã¯ããªãè¿œå ãããšããšã©ãŒãšèŠãªãããŸãã
äŸåé¢ä¿ã®åºåã¯ãèªå·±å®çµåã§ãããçŸåšã®ãããžã§ã¯ããšã¯å¥ã®ãã®ã§ãããšæ³å®ãããŠããŸãã ããã¯ãäŸåé¢ä¿ã®åºå.jsãtsconfig.jsonãä»ããŠçŸåšã®ãããžã§ã¯ããšé£çµã§ããªãããšãæå³ããŸãã ãã¡ãããå€éšããŒã«ã§ãã®æ©èœãæäŸã§ããŸãã
åè¿°ã®ããã«ã埪ç°äŸåé¢ä¿ã¯ãšã©ãŒãšèŠãªãããŸãã åçŽãªå ŽåïŒ
A-B
\ NS
Aã¯ãçŸåšã®ãããžã§ã¯ããã§ãããBãšCã®2ã€ã®äŸåé¢ä¿ã«äŸåããŸããBãšCèªäœã«äŸåé¢ä¿ããªãå Žåããã®ã±ãŒã¹ã¯ç°¡åã§ãã CãBã«äŸåããŠããå ŽåãBã¯Cã§äœ¿çšå¯èœã«ãªããŸããããã¯åŸªç°ãšã¯èŠãªãããŸããã ãã ããBãAã«äŸåããŠããå Žåãããã¯åŸªç°ãšèŠãªããããšã©ãŒã«ãªããŸãã
ãã®äŸã§ãBãCã«äŸåããCãèªå·±å®çµåã§ããå Žåãããã¯ãµã€ã¯ã«ãšã¯èŠãªãããŸããã ãã®å Žåãã³ã³ãã€ã«é åºã¯CãBãAã«ãªããŸããããã¯ã/// refã®ããžãã¯ã«åŸããŸãã
äŸåé¢ä¿ãåæ§ç¯ããªãå Žåããã®ãã«ãã¹ãããã¯ã¹ããããããåã®ãã«ãã®ã.d.tsãè¡šçŸãåå©çšãããŸãã ããã¯ãäŸåé¢ä¿ã®ã³ã³ãã€ã«ã«ãã£ãŠãçŸåšã®ãããžã§ã¯ãã®ãäŸåé¢ä¿ããªã¹ãã«åŸã§è¡šç€ºãããäŸåé¢ä¿ãæ§ç¯ãããŠããå Žåã«åŠçããããã«æ¡åŒµã§ããŸãïŒãå¶éãã»ã¯ã·ã§ã³ã®äŸã§çºçããããã«ïŒã
tsconfig.jsonãæããªãäŸåé¢ä¿ãšããŠæž¡ããããã£ã¬ã¯ããªããšã©ãŒã±ãŒã¹ãšããŠæ±ãã®ã§ã¯ãªãããªãã·ã§ã³ã§ããã©ã«ãã®ããã¡ã€ã«ããšçŸåšã®ãããžã§ã¯ãã®èšå®ããã®äŸåé¢ä¿ã«é©çšã§ããŸãã
ãããŸããŒïŒ
ïŒ+1ïŒ
ããïŒ ããã¯ãæäŸãããŠãŒã¹ã±ãŒã¹ã«æé©ã§ãã ç§ãã¡ã䜿çšããããŒã«ã«ãã³ãŒããã©ã®ããã«æ¶è²»ãããããšãæå³ããŠãããã«ã€ããŠã®ããè¯ããã¥ãŒãæäŸããããšã¯ãééããªãæ£ããããšã§ãã 誀ã£ãŠ.d.tsãã¡ã€ã«ã«F12ãããã³ã«ãåç«ã®éŠãçµããããªãïŒ
ãžã§ããµã³ã
芪åãªãã£ãŒãããã¯ãšãããåŒãåããããšã決å®ããŠãããŠããããšãã TypeScriptã¯éåžžã«åªããããŒã«ã§ããããã®æ©èœã¯ãæžå¿µäºé ã®å³å¯ãªåå²ã«äŸåãã巚倧ãªãããžã§ã¯ãïŒããšãã°ãAzureããŒã¿ã«ããããžã§ã¯ãMonacos 100klocãè¶ ããäžçãšå€ãã®ç¬ç«ããããŒã ïŒã èšãæããã°ãããã¯æ¬åœã«ãæ®éã®äººã ããå©ããã§ãããã ãŸãã @ NoelAbrahams ïŒïŒ2180ïŒãªã©ãä»ã®äººããã§ã«ãã®ããã®ãã®ãææ¡ããŠããã®ã§ãããã§ç¬åµæ§ã䞻匵ããããšã¯ã§ããŸããã ããã¯ç§ããã°ããã®éå¿ èŠãšããŠãããã®ã§ãã
ããªãã®ææ¡ã¯çŽ æŽããããšæããŸãã ç§ãä»éããŠããç§ã®ææ¡ïŒïŒ3394ïŒã«å¯ŸããŠç§ãèŠãå¯äžã®æ¬ ç¹ã¯ãåç §ã®ããã®ãã©ãŒã«ããã¯ã¡ã«ããºã ã®æ¬ åŠã§ãã
ããã§è©³ãã説æãã次ã®å®éã®ã·ããªãªã«ã€ããŠèããŠã¿ãŸããhttpsïŒ
å¥ã®ãããžã§ã¯ãcsproj2tsã«äŸåããTypeScriptãããžã§ã¯ãgrunt-tsããããŸãã grunt-tsã§äœæ¥ãã人ã¯ãæ©èœã®ç¯å²ãéåžžã«éãããŠãããããcsproj2tsã§ãäœæ¥ããããšæãããšã¯ã»ãšãã©ãããŸããã ãã ããç§ã®ãããªäººã«ãšã£ãŠã¯ãäž¡æ¹ã®ãããžã§ã¯ãã§åæã«äœæ¥ãããªãã¡ã¯ã¿ãªã³ã°ãå®è¡ããããå®çŸ©ã«ç§»åãããããããžã§ã¯ãå šäœã®ãã¹ãŠã®åç §ãæ€çŽ¢ãããã§ãããšäŸ¿å©ã§ãã
ç§ãææ¡ããããšããäŸåé¢ä¿ãªããžã§ã¯ãã¯ååä»ããã©ãŒã«ããã¯ãæã€ãªããžã§ã¯ããªãã©ã«ã§ããããšãææ¡ããŸããã ããªãã®ææ¡ã«ãã£ãšäžèŽããããŒãžã§ã³ã¯æ¬¡ã®ããã«ãªããŸãïŒ
"dependencies": {
"csproj2ts": ["../csproj2ts","node_modules/csproj2ts/csproj2ts.d.ts"],
"SomeRequiredLibrary": "../SomeRequiredLibraryWithNoFallback"
}
ãããåçŽåããŠé
åã®ãŸãŸã«ããããã«ãgrunt-ts tsconfig.json
ãã¡ã€ã«ã®å°æ¥ã®ä»®æ³dependencies
ã»ã¯ã·ã§ã³ã®æ¬¡ã®ä»£æ¿å®è£
ãææ¡ããŸãã
"dependencies": [
["../csproj2ts","node_modules/csproj2ts/csproj2ts.d.ts"],
"../SomeRequiredLibraryWithNoFallback"
]
dependencies
å
ã®åé
åã¿ã€ãã®ã¢ã€ãã ã®è§£æ±ºã«ãŒã«ã¯æ¬¡ã®ããã«ãªããŸããããããã«ãã_first_ã¢ã€ãã ã䜿çšãããæ®ãã¯ç¡èŠãããŸãã æååã¿ã€ãã®ã¢ã€ãã ã¯ããžã§ããµã³ã®ææ¡ãè¿°ã¹ãŠããããã«åŠçãããŸãã
ããã¯å®è£
ãéåžžã«è€éãªãœãªã¥ãŒã·ã§ã³ã§ãããéçºè
ïŒããã³ã©ã€ãã©ãªã®äœæè
ïŒã«_ã¯ããã«å€§ããª_æè»æ§ãæäŸããŸãã csproj2tsã§éçºããå¿
èŠããªãïŒãããã£ãŠ../csproj2ts/tsconfig.json
ãã¡ã€ã«ããªãïŒéçºè
ã®å ŽåãäŸåé¢ä¿ã¯ã³ã³ãã€ã«ã³ã³ããã¹ãã«è¿œå ãããå®çŸ©ãã¡ã€ã«ã«ãªããŸãã ../csproj2ts/tsconfig.json
ãã¡ã€ã«ã_do_ããŠããéçºè
ã®å Žåãææ¡ã¯äžèšã§èª¬æãããšããã«æ©èœããŸãã
äžèšã®äŸã§ã¯ã "../SomeRequiredLibraryWithNoFallback"
ã¯æ¢åã®ææ¡ãšåãããã«ååšããå¿
èŠããããååšããªããšã³ã³ãã€ã©ãšã©ãŒã«ãªããŸãã
ãããããé¡ãããŸãã
ããã«ã¯ãå解ããå¿ èŠã®ãã2ã€ã®åé¡ãããããã«ãããããèšèªãµãŒãã¹ã®ãµããŒãããããŸãã
ãã«ãã®å Žåãtsconfigãããã«é©ããå Žæã§ã¯ãªããšæããŸãã ããã¯æããã«ãã«ãã·ã¹ãã ã®åé¡ã§ãã ãã®ææ¡ã§ã¯ãtypescriptã³ã³ãã€ã©ã¯æ¬¡ã®ããžãã¹ã«é¢äžããå¿ èŠããããŸãã
ãããã¯ãã¹ãŠæããã«ãã«ãã·ã¹ãã ã®è²¬ä»»ã§ãã ãããã¯é£ããåé¡ã§ãããMSBuildãgruntãgulpãªã©ããããå®è¡ããããŒã«ããã§ã«ååšããŸãã
tsconfigãštscããã«ããã©ã€ããŒã«ãªã£ããããã¹ãŠã®CPUã䜿çšããŠç¡é¢ä¿ã®ãµãããªãŒããã«ããããããããžã§ã¯ãããšã«ãã«ãåŸããã³ãã«ãåã®ã³ãã³ããå®è¡ããå Žåã«ãã£ãŠã¯ä»ã®ãããžã§ã¯ãããã«ãããå¿
èŠããããŸãã ç¹°ãè¿ãã«ãªããŸãããç§ã¯ããããäœãããã®ããåŸæãªãã«ãããŒã«ãããã«ãããšæããŸãããããŠç§ãã¡ããããåçŸããå¿
èŠã¯ãããŸããã
èšèªãµãŒãã¹ã«ã€ããŠã¯ã
ããŒã«ãè€æ°ã®tsconfigãã¡ã€ã«ã«ã€ããŠç¥ã£ãŠããŠãããããæšæž¬ããŠããã«åœ¹ç«ã€ããšãã§ããã®ã¯åé¡ãªããšæããŸãããããã¯ãã«ãã«åœ±é¿ãäžããã¹ãã§ã¯ãããŸããã ç§ã¯æ¬¡ã®ãããªããšãèããŸãïŒ
"files" : [
"file1.ts",
{
"path": "../projectB/out/projectB.d.ts",
"sourceProject": "../projectB/"
}
]
tscã¯ããã¹ãã®ã¿ã調ã¹ãŸãããããŒã«ã¯ä»ã®æ å ±ã調ã¹ãŠãã§ããéã圹ç«ã€ããã«åªããããšãã§ããŸãã
ç§ã¯åé¡ã®ååšãèªããŸããããã«ããšããŒã«ã®äžæ¬åŠçãæ£ãã解決çã§ãããšã¯æããŸããã tsconfig.jsonã¯ããã«ãã·ã¹ãã ã«ãªããªãããã«ãæ§æããã°ïŒã€ãŸããå¿çãã¡ã€ã«ã®ä»£ããã®jsonïŒã®ãŸãŸã«ããå¿ èŠããããŸãã 1ã€ã®tsconfig.jsonã¯ã1åã®tscåŒã³åºããè¡šããŸãã tscã¯ãåäžã®ãããžã§ã¯ãã³ã³ãã€ã©ãšããŠæ®ãå¿ èŠããããŸãã
VSã®MSBuildãããžã§ã¯ãã¯ããã«ãã·ã¹ãã ã䜿çšããŠIDEæ©èœããã«ãããäŸã§ããã倧ãããããããpplã¯ããã«æºè¶³ããŠããŸããã
ãè¿äºããããšããã¢ãã¡ãã ç§ãç解ããŠãããã©ããã確èªããããã«èšãæããããŠãã ããã
tsconfig.json
tsc --project
ãå®è¡ããããšã¯ã tsc file1.ts ../project/out/project.d.ts
ãå®è¡ããããšãšåãã ãšæããŸãã ãã ãããã®ãããªãããžã§ã¯ããVSãŸãã¯TypeScriptèšèªãµãŒãã¹ã䜿çšããå¥ã®ãšãã£ã¿ãŒã§éããšããå®çŸ©ã«ç§»åãããŠãéçºè
ãæ©èœãå®çŸ©ããã_å®éã®TypeScriptãã¡ã€ã«_ã«ç§»åã§ããŸãïŒ projectB.d.ts
å®çŸ©ã§ã¯ãããŸããïŒãç§ã¯ãã®æš©å©ãæã£ãŠããŸããïŒ
ãããããªããããã¯éåžžã«å ¬å¹³ã ãšæããŸãã ç§ã®æåã®ææ¡ïŒhttps://github.com/Microsoft/TypeScript/issues/3394ïŒã§ã¯ãåºåãããå Žæããåºåãããçµæãã³ããŒããã¹ããããå«ãŸããŠããªãã£ããããç§ã®ã¢ã€ãã¢ã¯äžå®å šã§ãããšèšããŸããåç §ã©ã€ãã©ãªå ã§ãåç §ã©ã€ãã©ãªãå®è¡æã«ããããäºæããå Žæã ãæ¬åœã«å¿ èŠãªã®ã¯èšèªãµãŒãã¹ã®ãµããŒããªã®ã«ããªã建ç©ã®éäžãŸã§è¡ãã®ãããšããããšã ãšæããŸãã
ããªãã®äŸã§ããŒã¿ãå°ãå€æŽããããã«ãããªãã¯ãã®ãããªãã®ãåãã§ãµããŒãããŸããïŒ
"files" : [
"file1.ts",
{
"path": "externalLibraries/projectB.d.ts",
"sourceProject": "../projectB/"
}
]
çŸåšã®ãããžã§ã¯ãã«ã¯ãããã©ã«ãã§äœ¿çšãããprojectBã®å®çŸ©ãä»å±ããŠãããšæ³å®ãããŠããŸãããprojectBã®å®éã®ãœãŒã¹ã䜿çšå¯èœãªå Žåã¯ã代ããã«å®éã®ãœãŒã¹ã䜿çšãããŸãã
@nycdotnetããªãã¯ãããæ£ããèŠçŽããŸããã ç·©ãçµåãããç°ãªããã«ãããŒã«ãšç°ãªãIDEãçµã¿åãããŠçµã¿åãããããšãã§ããã·ã¹ãã ãäœæãããã®ã§ãããããã§ãåªããèšèšæã®ãšã¯ã¹ããªãšã³ã¹ãåŸãããšãã§ããŸãã
ãããïŒ
ç§ã¯@mhegazyã«åæã
ãã¡ã€ã«ãšããã±ãŒãžã®è§£æ±ºã¯ã䜿çšããŠãããã«ãã·ã¹ãã ïŒbrowserifyãsystemjsãwebpackãªã©ïŒã®è²¬ä»»ã§ãããããããŒã«ãæ©èœããã«ã¯ãèšèªãµãŒãã¹ãä»ã®ãã«ãã·ã¹ãã /ãã©ãããã©ãŒã ãšåãæ¹æ³ã§ãã¡ã€ã«ã解決ã§ããå¿ èŠããããŸãã䜿ã£ãŠããã ããã¯ããã«ãã·ã¹ãã ããšã«ã«ã¹ã¿ã LanguageServicesHostãå®è£ ããããtsconfig.jsonã«æ£ãããããã³ã°ãšã³ããªãçæããããŒã«ãæäŸããããšãæå³ããŸãã ãããã®ããããã蚱容ãããŸãã
@nycdotnetè€æ°ã®ãã©ãŒã«ããã¯ãã¹ã®ãŠãŒã¹ã±ãŒã¹ã¯ã npm link ../csproj2ts
ã䜿çšããæ¹ãé©åã ãšæããŸããïŒ
ç§ã¯@mhegazyã«åæããã³ã³ãã€ã©ãŒ/ãã©ã³ã¹ãã€ã©ãŒãšã¯å¥ã«ãã«ããç¶æããå¿ èŠããããŸãã ã»ã¯ã·ã§ã³ã«* .tsãã¡ã€ã«ããªã¹ããããŠããªãå Žåã§ãã¹ãã£ã³ããããšæ³å®ããŠããã¡ã€ã«ã»ã¯ã·ã§ã³ã«tsconfig-> tsconfigäŸåé¢ä¿ãå«ããã®ã奜ãã§ãã äŸãã°
"ãã¡ã€ã«"ïŒ[
{{
"ãã¹"ïŒ "externalLibraries / projectB.d.ts"ã
"sourceProject"ïŒ "../projectB/"
}
]
tsconfig.jsonãã¡ã€ã«ãå«ããã£ã¬ã¯ããªãšãµããã£ã¬ã¯ããªå ã®ãã¹ãŠã®tsãã¡ã€ã«ãåŒãç¶ãå«ãŸããŸãã
@dbaeumer次ã«ãå¥ã®ããããã£ã«é 眮ãããã§ãããïŒ çŸåšããã¡ã€ã«ãå®çŸ©ãããŠããå Žåãããã¯åžžã«äœ¿çšãããinclude * .tséšåã¯ç¡èŠãããŸãã
@mhegazyã¯å¿ ãããå¥ã®ã»ã¯ã·ã§ã³ã§ããå¿ èŠã¯ãããŸããããæçµçã«ã¯æ確ã«ãªããŸãã tsconfig-> tsconfigã®äŸåé¢ä¿ã䜿çšããå Žåãé¿ãããã®ã¯ãã¹ãŠã®ãã¡ã€ã«ã匷å¶çã«ãªã¹ãããããšã§ãã äžèšã®äŸã§ã¯ãã³ã³ãã€ã©ã«ãã£ãŒãããããã®* .tsãã¡ã€ã«ããªã¹ãããŸããã
ããã¯å€§ãã«å¿ èŠã ãšæããŸãã ãã ãããã«ãã®è³ªåã¯é¿ããããªããšæããŸãã ããã¯ããã®ææ¡ãšäžç·ã«ãã«ãã·ã¹ãã ãå®è£ ããå¿ èŠããããšããæå³ã§ã¯ãããŸããããææ¡ããããããªæ§æã§æ©èœããããã€ãã®åªããã¬ã€ãã³ã¹ãæ€èšããå¿ èŠããããŸããã æ£ããç解ããããšã¯ç°¡åã§ã¯ãããŸããïŒãããŠãVisual Studioã§ããã解決ããå¿ èŠããããŸãïŒã
äžèšã®ææ¡ïŒ.d.tsãšãœãŒã¹ã®äž¡æ¹ãåç §ãããŠããå ŽåïŒã§ã¯ã.d.tsãå€ããªã£ãŠããïŒã€ãŸããåæ§ç¯ããå¿ èŠãããïŒãã©ãããæ€åºããŸããïŒ ãªãã¡ã¯ã¿ãªã³ã°/ååã®å€æŽãªã©ã®æäœã¯ãããžã§ã¯ãéã§æ©èœããŸããïŒã€ãŸãã次ã®ãã«ãã§äžæžãããã.d.tsãã¡ã€ã«ã ãã§ãªããåç §ãããŠãããããžã§ã¯ããœãŒã¹ã®ååãæŽæ°ããŸãïŒïŒ GoToDefã¯ãåç §ãããŠãããããžã§ã¯ãã®å ã®ã³ãŒãïŒãããžã§ã¯ãå šäœã®å·šå€§ãª.d.tsãã¡ã€ã«ã®éäžã§ã¯ãããŸããïŒã«ç§»åããŸããïŒ ãããã¯ãåç §ããããããžã§ã¯ãã®ãœãŒã¹ã解決ããå Žåã«ãã£ãŠã¯åæããå¿ èŠãããããšãæå³ããŠããããã«æãããŸãããã®å Žåã.d.tsã¯åœ¹ã«ç«ã¡ãŸããïŒ
çŸåšã®äžè¬çãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãäžæ¹ã®ãããžã§ã¯ãã®ãã«ãåºåãšããŠ.d.tsããããããäžæ¹ã®ãããžã§ã¯ãã®å ¥åãšããŠåç §ãããŸãã ããã¯ãã«ãã«ã¯åé¡ãªãæ©èœãããããå€æŽããå¿ èŠã¯ãããŸããã
åé¡ã¯ç·šéã·ããªãªã§ãã ç·šéäžã«çæããããã¡ã€ã«ã調ã¹ãããªãã ç§ãææ¡ãã解決çã¯ãçæããã.d.tsãã©ãããæ¥ãã®ãã«ã€ããŠã®ããã³ãããæäŸããããšã§ãã èšèªãµãŒãã¹ã¯.d.tsãããŒãããã代ããã«ãã³ããã¹ããããããžã§ã¯ãããããŒãããŸãã ãã®ããã«ãgoto defã¯.d.tsã®ä»£ããã«å®è£ ãã¡ã€ã«ã«ç§»åããåæ§ã«ãšã©ãŒã¯ã³ã³ãã€ã«ãå¿ èŠãšããã«æ©èœããŸãã
ååã®å€æŽãªã©ã®æäœã¯ããããããžã§ã¯ãããå¥ã®ãããžã§ã¯ãã«ãäŒæãããåæ§ã«åç §ãæ€çŽ¢ããŸãã
çŸåšãtsconfig.jsonãã¡ã€ã«ãèŠã€ããã®ã¯å®å šã«ãã¹ãïŒIDEãªã©ïŒæ¬¡ç¬¬ã§ãããTSã¯ãããèªã¿åã£ãŠè§£æããããã®APIãæäŸããŸãã è€æ°ã®tsconfig.jsonãéå±€çã«é 眮ãããŠããå Žåããããæ©èœããããšãã©ã®ããã«æ³åããŸããïŒ ãã¹ãã¯ãŸã åæãã¡ã€ã«ã®è§£æ±ºã«è²¬ä»»ããããŸãããä»ã®ãã¡ã€ã«ã®è§£æ±ºã«ã¯è²¬ä»»ããããŸãããããããšããã¹ãã¯ãã¹ãŠã®tsconfigã®è§£æ±ºã«è²¬ä»»ããããŸããïŒ
å©äŸ¿æ§/æ £ç¿ãšæè»æ§ã®éã«ã¯ãã¬ãŒããªããããããã§ãã
ããã¯ãïŒ2568ã§èª¬æãããŠããããã«ïŒãŸãã¯å°ãªããšãçžå¯Ÿçãªã€ã³ããŒããããïŒd.tsãã¡ã€ã«ããã«ãããæ©èœããå§ãŸããŸãããïŒ
@spionããã«äŸåé¢ä¿ããããã©ããããããŸããã ãããžã§ã¯ãã®è€æ°ã®åºåãæã€ããšãã§ããŸãããåäžã®éžæãã¡ã€ã«ã§ã¯ãããŸããã ãã«ãã·ã¹ãã ã¯ãããèªèããäŸåãããžã§ã¯ããžã®å ¥åãšããŠããããé ç·ã§ããå¿ èŠããããŸãã
@mhegazyãã£ãšãããããªããã ãã®åé¡ãããäžåºŠèŠãŠã¿ããšãããã¯èšèªãµãŒãã¹ã«é¢é£ããŠããããã§ãã ç§ã¯ä»¥äžãèªã¿ãŸãã
- äžèŠæš¡ãããžã§ã¯ãïŒæšæºãã«ããšå ±æã³ã³ããŒãã³ãã䜿çšãããããžã§ã¯ã
ãããŠããããžã§ã¯ãã®äžéšãå€éšã¢ãžã¥ãŒã«ã§ããnpm / browserifyïŒãŸãã¯webpackïŒãã«ãworfklowsã®ããè¯ããµããŒãã«é¢é£ããŠãããšèªåçã«æ³å®ããŸããã
AFAIKå€éšã¢ãžã¥ãŒã«çšã®.d.tsãã¡ã€ã«ãçæããæ¹æ³ã¯ãŸã ãããŸãããïŒ ãã®å ŽåãèšèªãµãŒãã¹ãå€éšã¢ãžã¥ãŒã«ãã€ã³ããŒããããããžã§ã¯ãããªã³ã¯ã§ããå¯äžã®æ¹æ³ã¯ãtsconfig.jsonã«æ¬¡ã®ãããªãã®ãå«ããããšã§ãã
{
"provides": "external-module-name"
}
ããã¯ããããžã§ã¯ããå¥ã®tsconfig.json
åç
§ããããšãã«LSã«éç¥ããŸãã
AFAIKå€éšã¢ãžã¥ãŒã«çšã®.d.tsãã¡ã€ã«ãçæããæ¹æ³ã¯ãŸã ãããŸãããïŒ
ç§ã¯ãããçå®ã ãšã¯æããŸããã tsc --m --d
ãåŒã³åºããšãããèªäœãå€éšã¢ãžã¥ãŒã«ã§ãã宣èšãã¡ã€ã«ãçæãããŸãã 解決ããžãã¯ã¯.tsãèŠã€ããããšããŸãããããã§ãªãå Žåã¯åãååã®.d.tsãèŠã€ããŸãã
@spion TypeScriptã¯ã @ mhegazyãèšã£ãããã«ãå€éšã¢ãžã¥ãŒã«çšã®d.tsãã¡ã€ã«ãçæã§ããŸãããããã«ãããã©ã€ãã©ãªã®TypeScriptå®çŸ©ãéåžžæ¶è²»ãããæ¹æ³ãšã¯ç°ãªããå®çŸ©ãšãœãŒã¹ãã¡ã€ã«ã®æ¯çã1ïŒ1ã«ãªããŸãã ãããåé¿ãã1ã€ã®æ¹æ³ã¯ã次ã®TypeStrongã©ã€ãã©ãªã§ãïŒ https ïŒ
@mhegazyç³ãèš³ãããŸããããç§ã¯ãã¢ã³ããšã³ãå€éšã¢ãžã¥ãŒã«ããæå³ããŠããŸãããã€ãŸããTypeScriptã§external-module-name
ãèšè¿°ãããã®ã¯ã©ã¹ã®1ã€ãå¥ã®ã¢ãžã¥ãŒã«ããã€ã³ããŒãããå ŽåïŒ
import {MyClass} from 'external-module-name'
tsc
'external-module-name'
ã宣èšããé©åãª.d.tsãã¡ã€ã«ãçæãããæ¹æ³ã¯ãããŸãã
@nycdotnetç§ã¯dts-bundleãšdts-generatorãç¥ã£ãŠããŸãããããã§ãèšèªãµãŒãã¹ãä»ã®ãããžã§ã¯ãã®ãœãŒã¹ãç¥ã£ãŠããå Žåã¯ãã€ã³ããŒããæ£ãã远跡ã§ããããã«ããããã«æäŸããã¢ãžã¥ãŒã«åãç¥ã£ãŠããå¿ èŠããããŸã
ãã®æ©èœã®ã¹ããŒã¿ã¹ã¯ã©ããªã£ãŠããŸããïŒ ããã¯äžèŠæš¡ã®ãããžã§ã¯ãã«ãšã£ãŠéèŠãªãªãã·ã§ã³ã®ããã§ãã ç¹å®ã®ãrequirejsãæ§æã䜿çšããŠãããŸããŸãªãã©ã«ããŒã«ãœãŒã¹ããããããžã§ã¯ããã©ã®ããã«æ§æããŸããïŒ
@llgcodeã¯https://github.com/Microsoft/TypeScript/issues/5039ãã芧ãã ãããããã¯typescript@next
ã§å
¥æã§ããã¯ãã§ãã
äžèŠæš¡ã®ãããžã§ã¯ãã§å¿ èŠãªæ¹æ³ã§ãµããããžã§ã¯ããã³ã³ãã€ã«ããã¿ã¹ã¯ãå«ãgulpfileãäœæããã®ã¯ãããã»ã©é£ããããšã§ã¯ãããŸããã ç§ã¯ãããå°èŠæš¡ãªãããžã§ã¯ãã§ãè¡ã£ãŠããŸãã ç§ãtsconfig.jsonã䜿çšããå¯äžã®çç±ã¯ãVSCodeã®ããã§ã
ãŸããç§ã¯gulpã䜿çšããŸããã 次ã«ãããã¯ãæ¯ååã³ã³ãã€ã«ããããªã倧ããªãããžã§ã¯ãã«ãªãå¯èœæ§ããããŸãã ããããgulpã§è¯ã解決çãããå Žåã¯ããããè¡ãæ¹æ³ãæããŠãã ããã
@llgcodeãããšã gulp.task()
ã䜿çšããŠãå¿
èŠãªæ°ã®ã¿ã¹ã¯ãå®çŸ©ããgulpfile.jsãäœæããŸãã ã¿ã¹ã¯å
ã§ã¯ã gulp.src()
ãå«ãå
¥åãã¡ã€ã«ã®ã¹ããªãŒã ãååŸããã³ã³ãã€ã«ãé£çµããããã¡ã€ããœãŒã¹ããããã¢ã»ããã®ã³ããŒãªã©ã®å€æã®ãã€ãã©ã€ã³ãä»ããŠãããã.pipe()
ååŸã§ããŸãã Nodeã¢ãžã¥ãŒã«ãšNPMã¢ãžã¥ãŒã«ã§å¯èœãªããšã¯äœã§ãããŸãã
è€æ°ã®ãããžã§ã¯ããã³ã³ãã€ã«ããå¿
èŠãããå Žåã¯ããããè¡ãã¿ã¹ã¯ãå®çŸ©ããã ãã§ãã è€æ°ã®tsconfig.jsonã䜿çšããå Žåã¯ãgulp -typescriptã§ãµããŒããããŠããŸãããŸãã¯ãjsonãã¡ã€ã«ãèªã¿åãããšãã§ããŸãã ã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ããå¯èœã§ãã ãããžã§ã¯ããã©ã®ããã«æ§æãããŠããããç°ãªããªããžããªã«ãããžã§ã¯ããããããµãã¢ãžã¥ãŒã«ã䜿çšããŠãããã©ãããªã©ã¯ããããŸããã ããããgulpã¯100ïŒ
æè»æ§ããããŸãã
ããããŸãããããããšãã¯çŽ æŽãããããŒã«ã®ããã§ãã requireïŒ "mylibs / lib"ïŒã®ãããªãããã³ã°ã§requireãããããã¡ã€ã«ãããšãã°project / src / lib.jsãã©ã«ããŒã«ããå Žåãã¢ãã ã§ã¯å®äºãæ©èœãããtypescriptãŸãã¯gulpãã©ã®ããã«è§£æ±ºããããããããŸãããmylibsããšããŒã«ã«ãã¹ã䜿çšããŠè¡ããããããã³ã°/æ§æã ãããã£ãŠãïŒ5039ã®ãã®æ°ãããªãã·ã§ã³ãã¹ã¯ããã®åé¡ã®è¯ã解決çã ãšæããŸãã
@llgcode gulpã䜿çšãããšãã°ãããå«ããã¹ãŠã®ãã¡ã€ã«ïŒ.d.tsãã¡ã€ã«ãå«ãïŒãååŸã§ããŸããhttpsïŒ //www.npmjs.com/package/gulp-typescript#resolving-filesãåç §ããŠ
TypeScriptã¯ããã§å€ãã®ããšãè¡ãããšããŠãããšæããŸããããã¯ãã©ã³ã¹ãã€ã©ãŒã§ããããã«ãããŒã«ã§ã¯ãããŸããã ææ¡ã§èšåãããŠãããããªãäŸåé¢ä¿ãã®ç®¡çã¯ãå®éã«ã¯ããã±ãŒãžãããŒãžã£ãŒãŸãã¯ããŒãžã§ã³ç®¡çã·ã¹ãã ã®ã¿ã¹ã¯ã§ãããããããçžäºã«æ¥ç¶ããããšã¯ãã«ãããŒã«ã®ã¿ã¹ã¯ã§ãã
@felixfbeckeråæããŸããã ç§ãç¥ã£ãŠãããã¹ãŠã®ã³ã³ãã€ã©ïŒåãã§ãã¯ä»ãïŒã«ã¯ããã®ãããªãªãã·ã§ã³ããããŸãã äŸãã°ïŒ
gcc->ãã¡ã€ã«ãå«ãã
java->ã¯ã©ã¹ãã¹ãšãœãŒã¹ãã¹
è¡ã-> GOPATH
python-> PYTHONPATH
ã³ã³ãã€ã©ãŒ/ãã©ã³ã¹ãã€ã©ãŒã¯ããã©ã³ã¹ãã€ã«ããå¿
èŠã®ãããœãŒã¹ãã¡ã€ã«ãç¥ãå¿
èŠããããŸããã©ã®ãœãŒã¹ãã¡ã€ã«ãåã«include / libãã¡ã€ã«ã§ããããç¥ãå¿
èŠããããŸãã
ãã¡ã€ã«ãå€æŽããããšãã«äœããã¹ãããç¥ãã«ã¯ãgulpã®ãããªãã«ãããŒã«ãå¿
èŠã§ãã
@llgcodeã§åæããŸãã ãŸããã³ã³ãã€ã©ãšããŠå ¬éããã ãã§ãªããTypeScriptã¯èšèªãµãŒãã¹ãšããŠãå ¬éããŸããèšèªãµãŒãã¹ã¯ãIDEã«æ§æã®åŒ·èª¿è¡šç€ºïŒå®éã®æ€åºïŒãšå®äºæ©èœãæäŸããŸãã ãŸããäŸåé¢ä¿ããªãŒããã©ãå¿ èŠããããŸãã
@ llgcode @ unionalæå¹ãªãã€ã³ãã ãŸãããã«ããäœãããšã§ããããšãäžã€ã®ããšfiles
ããªããå«ããããã¹ãŠã®ãã©ã«ãå
ã®ãã¹ãŠã®ãã¡ã€ã«ãå®çŸ©ããããšãã§ããããã«ã°ãããåãå
¥ããtsconfig.jsonã«ããããã£ãã ããããç§ã¯ããªããã©ãããæ¥ãŠããã®ãããããŠãªã倧èŠæš¡ãªãããžã§ã¯ãã«è€æ°ã®tsconfig.jsonãå¿
èŠãªã®ããç解ããŠããŸãã
CommonJSã®AFAIKããã¯ã node_modules
ããã³npm link ../path/to/other-project
ä»ããŠãã§ã«ãµããŒããããŠããŸã
ãããžã§ã¯ãéã§ã©ã€ãã©ãªãåå©çšãå§ãããšããã«npmãªã³ã¯ãæ©èœããŸããã ç¬èªã®2ã€ã®å¥ã ã®ãããžã§ã¯ãéã§å ±éã®ã©ã€ãã©ãªã䜿çšããå ŽåïŒrxjsãäŸã«ãšããšïŒãtypescriptã¯ãObservableã¯Observableã«å²ãåœãŠå¯èœã§ã¯ãªããããšã瀺ããŸãã ããã¯ãåãã©ã€ãã©ãªã§ããã«ãããããããã€ã³ã¯ã«ãŒããã¹ã2ã€ã®ç°ãªãnode_modulesãã©ã«ããŒãžã®ã·ã³ããªãã¯ãªã³ã¯ãã©ã«ããŒããã©ã£ãŠããããã§ãã åé¿çã«ãããåºæ¬çã«å€§èŠæš¡ãããžã§ã¯ããªãã·ã§ã³ã«æ»ã£ãŠãgulpã¿ã¹ã¯ãŸãã¯ããŒã«ã«/ãã©ã€ããŒãnpmãªããžããªãæ§ç¯ãããŸãã
@EricABCã¯ãããããã¢ã³ããšã³ãå€éšã¢ãžã¥ãŒã«å®£èšã䜿çšããŠããããã§ãããã®å Žåãæ°ãããµããŒããããnode_modules
ããŒã¹ã®.d.tsãã¡ã€ã«ã®å®çŸ©ãå«ããå¿
èŠããããŸãã ãã以å€ã¯ãTSã¿ã€ãã¯æ§é çã«ãã§ãã¯ãããã ããªã®ã§åé¡ã¯ãªãã¯ãã§ãããããã£ãŠãæ§é ãäžèŽããŠããéããTSã¿ã€ããç°ãªãã¢ãžã¥ãŒã«ããã®ãã®ã§ããããç°ãªãååã§ãããã¯åé¡ã§ã¯ãããŸããã
ããããšã@spion ãããããã¡ã€ã«ããŒã¹ã§ãããšä»®å®ããã ãã§ãããªããç§ãèŠçããæãã€ããã®ããã§ãã
ãŸããtsconfig.jsonã®filesããããã£ã«globsãåãå ¥ããããããšã圹ç«ã€å¯èœæ§ããããŸã...
è°è«äžã®include
ããããã£ããããŸã
質åãšåèïŒ
dependencies
ã¯ãtscã§èš±å¯ãããŠãããããå®å
šãªtsconfig.jsonãã¹ãèš±å¯ããå¿
èŠããããŸãfiles
ãã§ã«ååšããåé¡ããªãã®ã«ããªãæ°ããããŒã¯ãŒãïŒ dependencies
ïŒãå°å
¥ããã®ã§ããïŒ{
"compilerOptions": {
// ...
},
"files": [
"../common/tsconfig.json", // <== takes the `files` part of the tsconfig.json
"../common/tsconfig.util.json", // <==
"core.ts",
"sys.ts"
]
}
compilerOptions
ãæå®ããŠããå Žåã¯ã©ããªããŸããïŒããã«é²ãã§/ã¯ã€ã«ãã«ããŸããã:-)ãããŠããããïŒå°æ¥çã«ïŒ compilerOptions
ã exclude
...ãå¥ã®tsconfig.jsonãåç
§ããããšãèš±å¯ããŸãïŒ
// File app/tsconfig.json
{
"compilerOptions": "../common/tsconfig.compilerOptions.json",
"files": [
"../common/tsconfig.json",
"../common/tsconfig.util.json",
"core.ts",
"sys.ts"
],
"exclude": "../common/exclude.json"
}
// File ../common/tsconfig.compilerOptions.json
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"sourceMap": true
}
}
// File ../common/exclude.json
{
"exclude": [
"node_modules",
"wwwroot"
]
}
// File ../common/tsconfig.util.json
{
"files": [
"foo.ts",
"bar.ts"
]
}
ããžãã¯ããããŸãïŒ files
ã compilerOptions
ã exclude
...ä»ã®tsconfig.jsonãã¡ã€ã«ãåç
§ã§ããä»ã®tsconfigããäžèŽããããŒã¯ãŒãéšåã®ã¿ããååŸãããŸã.jsonãã¡ã€ã«=>ç°¡åã§ã¹ã±ãŒã©ãã«ã ãããã£ãŠãå¿
èŠã«å¿ããŠtsconfig.jsonãè€æ°ã®ãã¡ã€ã«ã«åå²ããããããåå©çšã§ããŸãã
ããªãã®è°è«ã®äžéšãèªãã§ããã®ãèšèªãµãŒãã¹ã/ gotoå®çŸ©ãæ£ããããããšãæãé¢é£æ§ããããŸãã JavaScriptãããã¬ãŒã¯sourceMapsã䜿çšããŸãã ããŠãtscã.jsã ãã§ãªã.d.tsãã¡ã€ã«ã«ãsourceMapããŒã¿ãçæããå Žå...
ãããè¶ ããŠãtsconfig.jsonãã¡ã€ã«å ããåãããžã§ã¯ãã®ãã«ããããªã¬ãŒããããšã«ã¯ããŸãã¡ãªããããããŸããã ãã®åºæ¬çãªçš®é¡ã®ãã«ãæã®äŸåé¢ä¿ãå¿ èŠãªå Žåã¯ãåçŽãªã·ã§ã«ã¹ã¯ãªããã§ååã§ãã äžæ¹ãã€ã³ããªãžã§ã³ããªã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã£ã³ã°ãå¿ èŠãªå Žåãææ¡ãããã¢ãããŒãã¯åçŽãããããã«æãããŸãã å€ãã®ã·ããªãªã§ãtscã¯ããšããã1ã€ã®ãã«ãã¹ãããã«ãããŸããã tsconfig.jsonã«tscã®äŸåé¢ä¿ãæžã蟌ãã®ã¯å¥åŠã§ãããæ®ãã®ãã¡ã€ã«ã«ã¯ä»ã®ãã¡ã€ã«ããããŸããïŒ ç¹°ãè¿ãã«ãªããŸãããtscãå¯äžã®ãã«ãã¹ãããã§ããåçŽãªå Žåãã·ã§ã«ã¹ã¯ãªãããå®è¡ããŸãã
ãšã«ããã.jsãã¡ã€ã«ãšåãããã«.d.tsãã¡ã€ã«ã§ãœãŒã¹ãããã³ã°ãçæããã®ã¯ã©ãã§ããïŒ
åã«ããŒãã¢ãžã¥ãŒã«+ npmãªã³ã¯ã䜿çšããŸãããæ©èœããªãã®ã¯moduleResolutionïŒããŒããES6ã¢ãžã¥ãŒã«ãšäºææ§ããªãããšã ãã§ããããã«ãããã€ã³ã©ã€ã³å/ããªãŒã·ã§ã€ã¯ã®æé©åãå¯èœã«ãªããŸãïŒïŒ11103ãåç §ïŒã
話é¡ããå€ããããã§ã¯ãããŸããããããã€ãã®ç¹ã§ãããã¯è€æ°ã®ããŒãããã±ãŒãžãããžã§ã¯ããããŒã«ã«ã§æäœãããšãã課é¡ãšäžŠè¡ããŠããããã«èŠããŸãã ãnpmlinkãã䜿ãã»ã©ç°¡åã§ã¯ãªããšæããŸãã ãã«ãã¹ã¯ãªãããç°ãªãå ŽåããããŸãããã¹ãŠãæ£ããé åºã§å®è¡ããå¿ èŠããããŸãã段éçã«å®è¡ããã®ã¯é£ãããç£èŠã¢ãŒãã䜿çšããã®ã¯é£ããããããã°ãé£ããããœãŒã¹ãããã®è§£æ±ºãé£ãããªããŸãã éžæãããšãã£ã¿ãŒã«ãã£ãŠã¯ãããã¯ããã«é£ããå ŽåããããŸãã
éåžžãç§ã¯ãããããŠããã¹ãŠã1ã€ã®å·šå€§ãªãããžã§ã¯ãã«ãŸãšããå®å®ãããå¥ã ã®ããã±ãŒãžã«åå²ããŸãããããã¯èª²é¡ã«çŽé¢ããé »åºŠãå°ãªãããã«åœ¹ç«ã¡ãŸãã ç§ã¯å šäœã®çµéšãæ¬åœã«ãæ¬åœã«è¿·æã ãšæããŸãã ç§ã¯äœãã足ããªãã®ã§ããïŒ
ã§ãããããããã©ããªãã«ãããç§ã¯ãã®éçºäœéšå šäœã«å¯ŸããŠæçµçã«ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãæã«å ¥ããããšãã§ããããšãé¡ã£ãŠããŸãã
ããã¯ç§ãã¡ã®æ¥åžžã®ä»äºã«æé©ã ãšããç¹ã§ããã ãã£ã€ã ã鳎ãããŠãã ããïŒ
Webéçºã®æ§è³ªäžãè€æ°ã®tsãããžã§ã¯ãããããåãããžã§ã¯ãã«ã¯ãåäžã®jsãã¡ã€ã«ïŒ --outFile
ïŒã«ã³ã³ãã€ã«ãããè€æ°ã®tsãã¡ã€ã«ãå«ãŸããŠããŸãã ãããã¯ãã¢ããªã®ãããªãããžã§ã¯ãïŒç¹å®ã®ããšãè¡ãããç¹å®ã®æ©èœãè¿œå ããïŒãŸãã¯libã®ãããªãããžã§ã¯ãïŒã¢ããªã®åå©çšå¯èœãªã³ãŒãïŒã®ããããã§ãã å€ãã®å Žåããããã®tsãããžã§ã¯ãã®è€æ°ã«åæã«åãçµã¿ãã¢ããªã®éçºã容æã«ããããã«ã©ã€ãã©ãªãæ¡åŒµããŸãã ããããç§ã®ä»²éã®éçºè
ã®èª°ããããã€ã§ãããŒã«ã«ç°å¢ã«ãã¹ãŠã®tsãããžã§ã¯ããæã£ãŠãããšã¯æããŸããã
ã¯ãŒã¯ãããŒãæ¹åããããã«ãçŸåšã®ãªãã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
tsc -d -w
ã³ãã³ããéå§ããããtsconfigãèŠã€ãã£ããã¹ãŠã®ãµããã£ã¬ã¯ããªã«å¯ŸããŠãããå®è¡ããã¹ã¯ãªãããèµ·åããŸããç§ãã¡ã®ãããžã§ã¯ãã¯ãã©ã€ãã©ãªã®éçºãã¢ããªããå³å¯ã«åé¢ããã®ã«ååãªå€§ããã§ã¯ãããŸãããããã¹ãŠãåçŽã«ãŸãšããããšãã§ããã»ã©å°ããã¯ãããŸããã ç§ãã¡ã¯typescriptã§åªé ãªãªãã·ã§ã³ãæ¬ ããŠããããšã«æ°ã¥ããŸãã
dependencies
ããã®äž¡æ¹ã®äžçã§æé«ã®ãªãã·ã§ã³ã«ãªãããšãã§ããã°ãããã¯é©ãã¹ãããšã§ãã ã®æ©èœäŸåé¢ä¿ã®ãã¹ãŠã®tsãã¡ã€ã«ã«ã¿ã°ãä»ããŸããããã®äŸåé¢ä¿èªäœã®tsconfigã«åŸã£ãŠåºåãã³ã³ãã€ã«ããŸãã
ãã®ãããã¯ã«é¢ããæŽæ°ã¯ãããŸããïŒ äºãã«ç¬ç«ããŠã³ã³ãã€ã«ããè€æ°ã®typescriptãããžã§ã¯ããäœæããã«ã¯ã©ãããã°ããã§ããïŒ tsconfig.jsonã§ãã®ãããªäŸåé¢ä¿ãã©ã®ããã«èª¬æã§ããŸããïŒ
ããã¯ãããããžã§ã¯ãåç
§ã®ãµããŒãããšããã¿ã€ãã«ã§ãå°æ¥ã®ã»ã¯ã·ã§ã³ã®ããŒããããã«å«ãŸããããã«ãªããŸããã ãããã£ãŠã .tsconfig
ãã¡ã€ã«ã¯ãäŸåé¢ä¿ãšããŠå¥ã®.tsconfig
ãã¡ã€ã«ããªã³ã¯ã§ãããšæããŸãã
ãã®ãããã¯ã«é¢ããæŽæ°ã¯ãããŸããïŒ äºãã«ç¬ç«ããŠã³ã³ãã€ã«ããè€æ°ã®typescriptãããžã§ã¯ããäœæããã«ã¯ã©ãããã°ããã§ããïŒ tsconfig.jsonã§ãã®ãããªäŸåé¢ä¿ãã©ã®ããã«èª¬æã§ããŸããïŒ
ãã«ãã®äŸåé¢ä¿ã¯ããã«ãã·ã¹ãã ã§ãšã³ã³ãŒãããå¿
èŠããããŸãã gulpãgruntãbroccoliãmsbuildãbasalãªã©ã®ãã«ãã·ã¹ãã ã¯ããã®ãããªã±ãŒã¹ãåŠçããããã«æ§ç¯ãããŠããŸãã
ã¿ã€ãæ
å ±ã®å Žåãäžæ¹ã®ãããžã§ã¯ãã®åºåã«ã¯.d.tsãå«ãŸããŠããå¿
èŠããããããã¯ããäžæ¹ã®ãããžã§ã¯ããžã®å
¥åãšããŠæž¡ãããå¿
èŠããããŸãã
@mhegazyç§ãã¡ã®ãããžã§ã¯ãã¯ãã®ããã«æ©èœããŸãã ç§ãã¡ã¯ãåããã±ãŒãžã¯package.jsonã§ç¬èªã®äŸåé¢ä¿ãæã£ãŠããããšã®ãã®ãšåãäŸåé¢ä¿ãã¬ã«ãmonorepoã«ããã±ãŒãžã®æ°ãæã£ãŠãã"types"
èªåã§ããããã£tsconfig.json
ã åãããžã§ã¯ãã¯--outFile
ã³ã³ãã€ã«ããïŒESã¢ãžã¥ãŒã«ã«ãŸã 移åãããŠããªãå€ããããžã§ã¯ãã§ãïŒã "typings"
package.json
ããŒã¯ãã³ãã«ããã.d.ts
æããŸã
ãã³ãã«/ãŠã©ããã³ã°ã«ã¯gulpã䜿çšããŸãã
ã»ãšãã©ã®éšåã§æ©èœããŸãããããã€ãã®åé¡ããããŸãã
.d.ts
ãã¡ã€ã«ã«ç§»åããŸãã çæ³çã«ã¯ãããã«ããå¥ã®ãããžã§ã¯ãã®ãœãŒã¹ã«ç§»åããŸããlerna run build --sort
ïŒäºå®äžåãã£ã¬ã¯ããªã§tsc
ïŒã§ããããã¯ãããã±ãŒãžããšã«1ã€ã®TypeScriptã³ã³ãã€ã©ããã»ã¹ãçæããå€ãã®ç¹°ãè¿ãäœæ¥ãå®è¡ãããããè¿œå ã®ãªãŒããŒãããããããŸãã ãç§ãã¡ãä»ã®äººã説æããã®ãšåãç¶æ³ã«ããã®ã§ãç§ã¯ãã®åé¡ã«æ³šæãæã£ãŠããŸãã
ãããããtsconfig.jsonãã¡ã€ã«ãæã€è€æ°ã®ããããžã§ã¯ããã
@mhegazyãææããããã«ããã«ãããã»ã¹ãæ©èœããŠããŸããåãããžã§ã¯ãã¯.d.ts
ãã¡ã€ã«ãçºè¡ãããããäŸåãããžã§ã¯ãã®å
¥åãšããŠäœ¿çšãããŸãã
æ¬åœã®åé¡ã¯IDEã®ãµããŒãã§ããåç
§ãæ¢ããšãããããã¯åäžã®tsconfig.json
ã®ç¯å²å
ã§ã®ã¿èŠã€ãããŸãã ããã«æªãããšã«ã tsconfig.json
ã¹ã³ãŒãå€ã®äŸåãã¡ã€ã«ã¯åã³ã³ãã€ã«ãããªããããå€æŽããããã¡ã€ã«ã®ã«ã¹ã±ãŒãå¹æã¯ãããžã§ã¯ãéã§äŒæããŸããã ããã¯ç§ãã¡ã®ãããžã§ã¯ãã®ã¡ã³ããã³ã¹ã«ãšã£ãŠéåžžã«æªãããšã§ãããIDEã§ãã£ãããããå¯èœæ§ã®ãããã«ããšã©ãŒãåŒãèµ·ããããšããããŸãã
ãããŸããŒ
ããã欲ããæŽæ°ãããã·ããªãªã«ã¯ãReactã³ã³ããŒãã³ããå«ãŸããŸãã åœç€Ÿã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§UIã³ã³ããŒãã³ããé©åã«ã¬ã³ããªã³ã°ããJSXã¢ãžã¥ãŒã«ïŒååãååãããã³ææ©äœïŒãå«ãã³ã³ããŒãã³ããªããžããªããããŸãã ãã®ã³ã³ããŒãã³ããªããžããªã¯ããã¹ãŠã®ããã³ããšã³ãéçºè ãåã ã®ã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ãããšãã«äœ¿çšãããŸãã ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®UIãç·šéããå ±éã®UIã³ã³ããŒãã³ããªããžããªã«ãå®çŸ©ã«ç§»åãã§ããTypeScriptèšèªãµãŒãã¹ãšã¯ã¹ããªãšã³ã¹ãããã°ãããã¯ãšãŠãçŽ æŽãããããšã§ãã ä»æ¥ããããã®ã³ã³ããŒãã³ããåå¥ã«ãã³ãã«ããŠã³ããŒããå¿ èŠããããŸãã ããã¯ãç§ãä¿®æ£ããŠããããããç¬èªã®ãããžã§ã¯ãé 管ãäœæãããåé¡ã§ãïŒ.NETã®äžçã§ã¯ããœãªã¥ãŒã·ã§ã³ã®äžã«ãããžã§ã¯ãããããšããéåžžã«çŽ æŽããã話ããããŸãïŒã
TypeScriptã¯æ°åäžè¡ã®ãããžã§ã¯ãã«ã¹ã±ãŒã«ã¢ããããŸããããçµã¿èŸŒã¿ã®åäœãšããŠãã®çš®ã®ã¹ã±ãŒã«ããã€ãã£ãã«ãµããŒãããŠããŸããã ããŒã ã¯ããŸããŸãªå¹æã®åé¿çãéçºããŠããã倧èŠæš¡ãªãããžã§ã¯ããè¡šãããã®æšæºåãããæ¹æ³ã¯ãããŸããã ã¿ã€ããã§ãã«ãŒã®ããã©ãŒãã³ã¹ã¯æéã®çµéãšãšãã«å€§å¹
ã«æ¹åãããŸããããTSãåççã«ååŸã§ããé床ã«é¢ããŠã¯äŸç¶ãšããŠå³ããå¶éããããŸãã
ã€ã³ã¿ã©ã¯ãã£ããªã·ããªãªã§èšèªãµãŒãã¹ããç¡éã«ãã¹ã±ãŒã«ã¢ããããã®ãé²ã32ãããã¢ãã¬ã¹ç©ºéãªã©ã®å¶çŽã
çŽæçã«ã¯ãããã³ããšã³ãã³ã³ããŒãã³ãã§JSXã®1è¡ãå€æŽããŠãã500,000LOCãããžã§ã¯ãã®ã³ã¢ããžãã¹ããžãã¯ã³ã³ããŒãã³ãå šäœãåã¿ã€ããã§ãã¯ããå¿ èŠã¯ãããŸããã ãããžã§ã¯ãåç §ã®ç®çã¯ãéçºè ã«ã³ãŒããå°ããªãããã¯ã«åå²ããããã®ããŒã«ãæäŸããããšã§ãã ããŒã«ãäžåºŠã«å°ããªäœæ¥ãã£ã³ã¯ã§åäœã§ããããã«ããããšã§ãå¿çæ§ãåäžãããã³ã¢éçºã«ãŒãã匷åã§ããŸãã
çŸåšã®ã¢ãŒããã¯ãã£ã§ã¯ãããã©ãŒãã³ã¹ãã¡ã¢ãªæ¶è²»ã®å€§å¹ ãªæ¹åãšããç¹ã§ããããªãŒã©ã³ãããã»ãšãã©æ®ã£ãŠããªããšèããŠããŸãã 代ããã«ããã®ããŒãã£ã·ã§ãã³ã°ã¯æ瀺çãªãã¬ãŒããªãã§ãããå è¡äœæ¥ãç ç²ã«ããŠé床ãåäžãããŸãã éçºè ã¯ãã·ã¹ãã ã®äŸåé¢ä¿ã°ã©ãã«ã€ããŠæšè«ããããã«æéãè²»ããå¿ èŠããããããŒã«ãããã«åŒ·åãããŸã§ãç¹å®ã®ã€ã³ã¿ã©ã¯ãã£ãæ©èœïŒãããžã§ã¯ãéã®ååå€æŽãªã©ïŒãå©çšã§ããªãå ŽåããããŸãã
ãã®ã·ã¹ãã ã«ãã£ãŠèª²ããããäž»èŠãªå¶çŽãç¹å®ãããããžã§ã¯ãã®ãµã€ãºèšå®ããã£ã¬ã¯ããªæ§é ãããã³ãã«ããã¿ãŒã³ã®ã¬ã€ãã©ã€ã³ã確ç«ããŸãã
èæ ®ãã¹ã3ã€ã®äž»èŠãªã·ããªãªããããŸãã
äžéšã®ãããžã§ã¯ãã§ã¯ãçžå¯Ÿçãªã€ã³ããŒããåºç¯å²ã«äœ¿çš../../core/utils/otherMod
ãããªãã¹ãèŠã€ããã®ãäžè¬çã§ããããããã®ãªããžããªã§ã¯éåžžããããã©ãããªãã£ã¬ã¯ããªæ§é ãæšå¥šãããŸãã
KhanAcademyã®ãã«ã»ãŠã¹ãããžã§ã¯ãã®äŸã次ã«ç€ºããŸãã
https://github.com/Khan/perseus/blob/master/src/components/graph.jsxããé©å¿
const Util = require("../util.js");
const GraphUtils = require("../util/graph-utils.js");
const {interactiveSizes} = require("../styles/constants.js");
const SvgImage = require("../components/svg-image.jsx");
ãã£ã¬ã¯ããªæ§é ã¯ãããžã§ã¯ãæ§é ãæå³ããŸãutil
ã styles
ãããã³components
ãããããç¬èªã®ãããžã§ã¯ãã§ãããšæšæž¬ã§ããŸãã ãã ãããããã®ãã£ã¬ã¯ããªãéåžžã«å°ãããå®éã«ã¯1ã€ã®ãã«ããŠãããã«ã°ã«ãŒãåãããå¯èœæ§ããããŸãã
ã¢ããªããžããªã¯ãéçžå¯Ÿãã¹ãä»ããŠã€ã³ããŒããããå€æ°ã®ã¢ãžã¥ãŒã«ã§æ§æãããŸãã ãµãã¢ãžã¥ãŒã«ïŒ import * as C from 'core/thing
ïŒããã®ã€ã³ããŒããäžè¬çã§ããå¯èœæ§ããããŸãã åžžã«ã§ã¯ãããŸããããéåžžãåã«ãŒãã¢ãžã¥ãŒã«ã¯å®éã«ã¯NPMã§å
¬éãããŸãã
https://github.com/angular/angular/blob/master/packages/forms/src/validators.tsããé©å¿
import {InjectionToken, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';
import {forkJoin} from 'rxjs/observable/forkJoin';
import {map} from 'rxjs/operator/map';
import {AbstractControl, FormControl} from './model';
é€ç®ã®åäœã¯ãå¿
ãããã¢ãžã¥ãŒã«åã®å
é éšåã§ããå¿
èŠã¯ããrxjs
ã¯ãã¹ã³ãŒãä»ãããã±ãŒãžïŒ @angular/core
ïŒãšåæ§ã«ãå®éã«ã¯ãã®ãµãããŒãïŒ observable
ã operator
ïŒãåå¥ã«ã³ã³ãã€ã«ããŸãã
TypeScriptã¯ãå ¥åãã¡ã€ã«ãåäžã®åºåJavaScriptãã¡ã€ã«ã«é£çµã§ããŸãã åç §ãã£ã¬ã¯ãã£ãããŸãã¯tsconfig.jsonã®ãã¡ã€ã«é åºã¯ãçµæã®ãã¡ã€ã«ã®æ±ºå®è«çãªåºåé åºãäœæããŸãã ãããæ°ãããããžã§ã¯ãã«äœ¿çšãããããšã¯ãã£ãã«ãããŸããããå€ãã³ãŒãããŒã¹ïŒTypeScriptèªäœãå«ãïŒã®éã§ã¯äŸç¶ãšããŠæ®åããŠããŸãã
https://github.com/Microsoft/TypeScript/blob/master/src/compiler/tsc.ts
/// <reference path="program.ts"/>
/// <reference path="watch.ts"/>
/// <reference path="commandLineParser.ts"/>
https://github.com/Microsoft/TypeScript/blob/master/src/harness/unittests/customTransforms.ts
/// <reference path="..\..\compiler\emitter.ts" />
/// <reference path="..\harness.ts" />
ãã®æ§æã䜿çšããäžéšã®ãœãªã¥ãŒã·ã§ã³ã¯ãåå¥ã®script
ã¿ã°ïŒãŸãã¯åçã®ãã®ïŒãä»ããŠåoutFile
ãããŒãããŸãããä»ã®ãœãªã¥ãŒã·ã§ã³ïŒTypeScriptèªäœãªã©ïŒã¯ãã¢ããªã·ãã¯åºåãæ§ç¯ããŠãããããåã®ãã¡ã€ã«ãé£çµããå¿
èŠããããŸãã
å®éã®ãããžã§ã¯ããšã®çžäºäœçšããã®ããã€ãã®éèŠãªèŠ³å¯ïŒ
skipLibCheck
æªæºã®ãã¡ã€ã«ã¯ãã¿ã€ããã§ãã¯ãšã¡ã¢ãªã³ã¹ãã®ç¹ã§ã»ãŒãç¡æãã§ãããããããŸãšãããšãäžåºŠã«1ã€ã®50,000 LOCãã£ã³ã¯ã®å®è£ ã³ãŒãã®ã¿ãã¿ã€ããã§ãã¯ããããšãå¯èœã§ããå Žåãã€ã³ã¿ã©ã¯ãã£ããªã·ããªãªã§ã¯ãé ãã察話ã¯ã»ãšãã©ãªããã¡ã¢ãªãäžè¶³ããããšã¯ã»ãšãã©ãããŸããã
äŸåãŠãããã®å®è£
ã³ãŒãããã§ãã¯ãããŠããªã2ã€ã®TypeScriptã³ã³ãã€ã«ãŠãããéã®æ°ããçš®é¡ã®äŸåé¢ä¿ã宣èšããæ°ããæŠå¿µã§ãããããžã§ã¯ããªãã¡ã¬ã³ã¹ã玹ä»ããŸãã 代ããã«ã決å®è«çãªå Žæãã.d.ts
åºåãããŒãããã ãã§ãã
æ°ããreferences
ãªãã·ã§ã³ïŒTODOïŒBikeshedïŒïŒãtsconfig.json
è¿œå ãããŸããïŒ
{
"extends": "../tsproject.json",
"compilerOptions": {
"outDir": "../bin",
"references": [
{ "path": "../otherProject" }
]
}
}
references
é
åã¯ããã®ãããžã§ã¯ãããåç
§ããä»ã®ãããžã§ã¯ãã®ã»ãããæå®ããŸãã
åreferences
ãªããžã§ã¯ãã®path
ã¯ã tsconfig.json
ãã¡ã€ã«ãŸãã¯tsconfig.json
ãã¡ã€ã«ãå«ããã©ã«ããŒãæããŸãã
ä»ã®ãªãã·ã§ã³ã¯ããããã®ããŒãºãçºèŠãããšãã«ãã®ãªããžã§ã¯ãã«è¿œå ãããå ŽåããããŸãã
ãããžã§ã¯ãåç §ã«ããã次ã®åäœãå€æŽãããŸãã
rootDir
ã®ãµããã£ã¬ã¯ããªã«ãã.ts
ãã¡ã€ã«ã«è§£æ±ºãããå ŽåãoutDir
ã«ãã.d.ts
ãã¡ã€ã«ã«è§£æ±ºãããŸããReferenced project "../otherProject" is not built
ãªã©ïŒãçºè¡ã§ããŸãããã«ãã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããã«ã¯ããããžã§ã¯ãåç §ãæ€åºãããšãã®TypeScriptã®åäœãå¿ ãå¶éããå¿ èŠããããŸãã
å ·äœçã«ã¯ã次ã®ããšãåœãŠã¯ãŸãã¯ãã§ãã
tsconfig.json
ã®ã¿ããã£ã¹ã¯ããèªã¿åãå¿
èŠããããŸããããã®çŽæãå®ãããã«ãç§ãã¡ã¯ããªããåç §ãããããžã§ã¯ãã«ããã€ãã®å¶éã課ãå¿ èŠããããŸãã
declaration
ã¯èªåçã«true
èšå®ãããŸãã ãã®èšå®ãäžæžãããããšãããšãšã©ãŒã«ãªããŸãrootDir
ã¯ãå
¥åãã¡ã€ã«ã®ã»ããããæšæž¬ãããã®ã§ã¯ãªããããã©ã«ãã§"."
ïŒ tsconfig.json
ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªïŒã«ãªããŸããfiles
é
åãæå®ããå Žåã¯ããã¹ãŠã®å
¥åãã¡ã€ã«ã®ååãæå®ããå¿
èŠããããŸãnode_modules/@types
å
ã®ãã¡ã€ã«ïŒã¯æå®ããå¿
èŠã¯ãããŸããreferences
é
åïŒç©ºã®å ŽåããããŸãïŒãå¿
èŠã§ãã"declaration": true
ïŒãããžã§ã¯ãåç
§ã¯ãå®è£
ãã¡ã€ã«ïŒ.tsïŒã®ä»£ããã«å®£èšãã¡ã€ã«ïŒ.d.tsïŒã䜿çšããããšã«ããããã«ãé床ãåäžãããŸãã
ãããã£ãŠãåœç¶ãåç
§ããããããžã§ã¯ãã§ã¯declaration
èšå®ããªã³ã«ãªã£ãŠããå¿
èŠããããŸãã
ããã¯"project": true
ã«ãã£ãŠæ瀺ãããŸã
rootDir
ã§ããïŒrootDir
ã¯ãå
¥åãã¡ã€ã«ãåºåãã¡ã€ã«åã«ãããããæ¹æ³ãå¶åŸ¡ããŸãã TypeScriptã®ããã©ã«ãã®åäœã¯ãå
¥åãã¡ã€ã«ã®å®å
šã°ã©ãã®å
±éãœãŒã¹ãã£ã¬ã¯ããªãèšç®ããããšã§ãã ããšãã°ãå
¥åãã¡ã€ã«ã®ã»ãã["src/a.ts", "src/b.ts"]
ã¯ãåºåãã¡ã€ã«["a.js", "b.js"]
ãçæããŸãã
ãã ããå
¥åãã¡ã€ã«ã®ã»ãã["src/a.ts", "b.ts"]
ã¯ãåºåãã¡ã€ã«["src/a.js", "b.js"]
ãçæããŸãã
å
¥åãã¡ã€ã«ã®ã»ãããèšç®ããã«ã¯ããã¹ãŠã®ã«ãŒããã¡ã€ã«ãšãã®ãã¹ãŠã®åç
§ãååž°çã«è§£æããå¿
èŠããããŸãã
ããã¯å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯é«é¡ã§ãã ããããä»æ¥ãæ¢åã®ãããžã§ã¯ããæªãæ¹æ³ã§å£ããã«ãã®åäœãå€æŽããããšã¯ã§ããªãããããã®å€æŽã¯references
é
åãæäŸãããŠããå Žåã«ã®ã¿çºçããŸãã
åœç¶ããããžã§ã¯ãã¯åŸªç°æ§ã®ããã°ã©ãã圢æããªãå ŽåããããŸãã ïŒTODOïŒãã«ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®æªå€¢ä»¥å€ã«ããããå®éã«åŒãèµ·ããåé¡ã¯äœã§ããïŒïŒãããçºçããå Žåã圢æããã埪ç°ãã¹ã瀺ããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
TS6187: Project references may not form a circular graph. Cycle detected:
C:/github/project-references-demo/core/tsconfig.json ->
C:/github/project-references-demo/zoo/tsconfig.json ->
C:/github/project-references-demo/animals/tsconfig.json ->
C:/github/project-references-demo/core/tsconfig.json
tsbuild
ãã®ææ¡ã¯ããå®éã®ããã«ãã·ã¹ãã ã§ã©ã®ããã«äœ¿çšããããã«ã€ããŠæå³çã«ãããŸãã§ãã .tsã³ãŒãã®ã³ã³ãã€ã«ã«tsc
以å€ã®ãã®ãå°å
¥ããã«ã50,000LOCã®ãé«éãå¢çãè¶
ããŠæ¡åŒµãããããžã§ã¯ãã¯ã»ãšãã©ãããŸããã
ã bar
ããŸã æ§ç¯ãããŠããªãããã foo
æ§ç¯ã§ããªãããšãããŠãŒã¶ãŒã·ããªãªã¯ãã³ã³ãã¥ãŒã¿ãŒãåŠçããå¿
èŠãããæãããªããã§ãããããçš®é¡ã®ã¿ã¹ã¯ã§ããéçºè
ã®ç²Ÿç¥çè² æ
ãããã
gulp
ã webpack
ãªã©ã®ããŒã«ïŒãŸãã¯ããããã®TSãã©ã°ã€ã³ïŒã¯ããããžã§ã¯ãåç
§ãç解ããŠãã«ãããææ°ã®ãã§ãã¯ãå«ãããããã®ãã«ãã®äŸåé¢ä¿ãæ£ããåŠçããããšãæåŸ
ããŠããŸãã
ãããå¯èœã§ããããšã確èªããããã«ã次ã®åäœã瀺ãTypeScriptãã«ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®ãªãã¡ã¬ã³ã¹å®è£ ãæäŸã
ãã®ããŒã«ã¯ãããªãã¯APIã®ã¿ã䜿çšããå¿ èŠãããããã«ãããŒã«ã®äœæè ããããžã§ã¯ãåç §ãå®è£ ããæ£ããæ¹æ³ãç解ããã®ã«åœ¹ç«ã€ããã«ååã«ææžåãããŠããå¿ èŠããããŸãã
ãã®ææ¡ãå®å šã«å®äºããããã«èšå ¥ããã»ã¯ã·ã§ã³
tsconfig.json
ãã¡ã€ã«ãããããããŠããããã«ããšã©ãŒãä¿®æ£ããããã«å¿
èŠãªåç
§ãè¿œå ããã ãã§ããbaseUrl
ãžã®åœ±é¿dtsEmitOnly
èšå®ãå¿
èŠã§ããïŒreferences
+ noEmit
ãããæå³ããŸãçŽ æŽãããïŒ
ã¬ã«ãã®ã·ããªãªãç解ãã
- å©çšå¯èœãªããŒã¿ãã€ã³ãïŒN = 1ïŒã¯ããã«ãããã§ã«ãã®ããã«å¹æçã«æ§é åãããŠãããããããã¯å¿ èŠãªããšè¿°ã¹ãŠããŸã
ããããã¯ãææ¡ãŸãã¯ãªãã¡ã¬ã³ã¹ãã«ãã®å®è£ ãæããŸããïŒ lernaã䜿çšããŠãã«ããå®è¡ããããšãã§ããŸããïŒç§ã®ããŒã ã¯å®è¡ããŸãïŒãTSïŒãŸãã¯ãã®ææ¡ãããã«ããããããŒã«ïŒãããèªäœãåŠçããå Žåãããã¯åä»ã§ã¯ããã«å¹ççã§ãã
TODOã»ã¯ã·ã§ã³ã¯ãææ¡å šäœã®TODOã§ãã
è¯ãïŒ
åç §ããããããžã§ã¯ãã«ã¯ãããèªäœãåç §é åïŒç©ºã®å ŽåããããŸãïŒãå¿ èŠã§ãã
ããã¯æ¬åœã«å¿
èŠã§ããïŒ ãã®ãããªããã±ãŒãžã«.d.ts
ãã¡ã€ã«ãããã°ååã§ã¯ãªãã§ããããïŒ
ïŒãã®å Žåã tsconfig.json
ãå¿
èŠãªããããããŸãããïŒïŒ
ç§ã®ãŠãŒã¹ã±ãŒã¹ïŒ outDir
䜿çšããªãïŒãµãŒãããŒãã£ãªã©ã®ïŒãããžã§ã¯ããèããŠã¿ãŸãããããããã£ãŠã .ts
ã .js
ã .d.ts
ãé£ã«ãªããŸãã TSã¯çŸåšã .d.ts
ã䜿çšãã代ããã«ã .ts
ãã³ã³ãã€ã«ããããšããŸãã
outDir
ã䜿çšããªãçç±ã¯ã import "package/subthing"
ã¹ã¿ã€ã«ã®ã€ã³ããŒããããç°¡åã«èš±å¯ããããã§ããããã§ãªãå Žåã¯ã import "package/dist/subthing"
ãšoutDir: "dist"
ãŸãã
ãŸããNPMããã±ãŒãžãŸãã¯ãã®ãœãŒã¹ãªããžããªãçŽæ¥äœ¿çšã§ããããã«ããŸãïŒããšãã°ã npm link
ïŒã
ïŒ package.json
ãmain
å
ã®ãã£ã¬ã¯ããªã®æå®ãèš±å¯ããŠãããšäŸ¿å©ã§ãããæ®å¿µãªãã...ïŒ
Webpack / Babel / Rollupãªã©ãä»ããŠJSããã€ãããŠãã人ã«ã¯ãdtsEmitOnlyèšå®ãå¿ èŠã§ããïŒ
çµ¶å¯ŸïŒ ããã¯çŸæç¹ã§å€§ããªæ¬ ããŠããéšåã§ãã çŸåšã outFile
ã䜿çšãããšåäžã®d.tsãã¡ã€ã«ãååŸã§ããŸãããã¢ãžã¥ãŒã«ã«åãæ¿ããŠãã³ãã©ãŒã䜿çšãããšãããã倱ãããŸãã ã¢ãžã¥ãŒã«ã®ãšã³ããªãã€ã³ãïŒ export as namespace MyLib
ïŒã«å¯ŸããŠåäžã®d.tsãã¡ã€ã«ãçºè¡ã§ããããšã¯çŽ æŽãããããšã§ãã ç§ã¯å€éšããŒã«ããããè¡ãããšãã§ããããšãç¥ã£ãŠããŸãããããããšããã¿ãŒãšèšèªãµãŒãã¹ã«çµ±åãããã°æ¬åœã«çŽ æŽãããã§ãããã
ããã¯æ¬åœã«å¿ èŠã§ããïŒ ãã®ãããªããã±ãŒãžã«.d.tsãã¡ã€ã«ãå«ãŸããŠããã°ååã§ã¯ãªãã§ããããã
ã¿ãŒã²ããtsconfigã«ãåºåãã¡ã€ã«ãã©ãã«ãããã瀺ãäœããå¿
èŠã§ãã ãã®ææ¡ã®ä»¥åã®ããŒãžã§ã³ã«ã¯ããæ瀺çãªrootDir
æå®ããå¿
èŠããããŸãããšããããªãé¢åãªãã®ããããŸããïŒãã¹ãŠã®tsconfigã«"rootDir": "."
ãèšè¿°ããå¿
èŠããããŸããïŒã ãã®äžçã®ããŸããŸãªåäœãå転ããããã®ã§ãåç
§é
åãããããããããŒãªãããããã®ã§ããå Žåãããããžã§ã¯ããåäœãååŸãããšèšãæ¹ãçã«ããªã£ãŠããŸããæ瀺çã«è¿°ã¹ãå¿
èŠã®ãããã©ã°ã
ãã®ææ¡ã¯ãTypeScriptãããžã§ã¯ãããã§ã«æ§ç¯ããæ¹æ³ãšå¯æ¥ã«äžèŽããŸãã ãããããtsconfig.jsonãæã¡ãgulpãä»ããŠç¬ç«ããŠæ§ç¯ãããå°ããªãŠãããã«çŽ°ååããŸããã ãããžã§ã¯ãã¯ãd.tsãã¡ã€ã«ãåç §ããããšã«ãã£ãŠçžäºã«åç §ããŸãã
çæ³çãªäžçã§ã¯ãåç §ããããããžã§ã¯ããäºåã«æ§ç¯ããå¿ èŠã¯ãããŸããã NSã TypeScriptã¯ãåç §ããããããžã§ã¯ãã®ããã«ãããå®è¡ããèšèªãµãŒãã¹ã®ã¡ã¢ãªã«åçã®ãd.tsããç¶æããŸãã ããã«ãããããœãŒã¹ããããžã§ã¯ãã§è¡ãããå€æŽããåæ§ç¯ãå¿ èŠãšããã«ãäŸåããããžã§ã¯ãã«è¡šç€ºãããããã«ãªããŸãã
ã¿ãŒã²ããtsconfigã«ãåºåãã¡ã€ã«ãã©ãã«ãããã瀺ãäœããå¿ èŠã§ãã
ããã¯outDir
ã䜿ãããŠãããšãã ãçå®ã§ãããïŒ
ã®ããã«ïŒç§ãtsconfigãæã£ãŠããå ŽåïŒ
outDir
䜿çšããŸããïŒãã¡ããã declaration: true
ã¯ãããŸãïŒããã®å Žåã rootDir
ãreferences
ãå¿
èŠãããŸãããoutDir
ãããå Žåã¯ã references
ããã³/ãŸãã¯rootDir
ïŒããã³declaration: true
ïŒãèšå®ããå¿
èŠããããŸã質åããçç±ã¯ãTSããã±ãŒãžãåç §ããã ãã§ãä»»æã®TSããã±ãŒãžã®ããããžã§ã¯ãã¢ãŒãããæå¹ã«ã§ããããã§ããã€ãŸããããã¯èªåã§å¶åŸ¡ã§ããŸãã
ãã®å Žåãæ¢ããŠãã.d.tsãã¡ã€ã«ãèŠã€ãã£ããããã«æ©èœããã®ãè¯ãã§ãããïŒã€ãŸãã.tsãã¡ã€ã«ãtsconfigãã¡ã€ã«ããªããŠãæå¥ãèšãããšã¯ãããŸããïŒã ããã«ãããå¿ èŠã«å¿ããŠNPMããŒãžã§ã³ïŒ.d.tsãã¡ã€ã«ãããªãå ŽåããããŸãïŒããœãŒã¹ããŒãžã§ã³ã«ã眮ãæãããå¥ã®ã±ãŒã¹ãå¯èœã«ãªãããã§ãã
ããšãã°ãNPMããã±ãŒãžã®MyAppãšSomeLibã«ã€ããŠèããŠã¿ãŸãã
SomeLibã¯tsconfigãæã€ããšãã§ããŸãïŒ declaration: true
ã
次ã®ãããªãªããžããªïŒ
package.json
tsconfig.json
index.ts
sub.ts
ã³ã³ãã€ã«ãããšãããã¯æ¬¡ã®ããã«ãªããŸãã
package.json
tsconfig.json
index.ts
index.d.ts
index.js
sub.ts
sub.d.ts
sub.js
ãã®æ§é ã¯ãäŸãã°
// somewhere in MyApp
import something from "SomeLib/sub";
å ¬éãããNPMããã±ãŒãžã§ã¯ãçŸåšãåžžã«.tsãã¡ã€ã«ãåé€ããå¿ èŠããããŸããããããªããšãMyAppãSomeLibã䜿çšããå Žåããã¹ãŠã®ãœãŒã¹ãTSã«ãã£ãŠåã³ã³ãã€ã«ãããŸãã
ãããã£ãŠãNPMã§ã¯ãããã¯æ¬¡ã®ããã«ãªããŸãã
package.json
index.d.ts
index.js
sub.d.ts
sub.js
ããŠãMyAppã®tsconfigã«references: ["SomeLib"]
ãå
¥ããå ŽåãNPMããŒãžã§ã³ãšSomeLibã®ãœãŒã¹ããŒãžã§ã³ã®äž¡æ¹ã§ããã®ãŸãŸãtsconfigã®æ¬ èœãªã©ã«ã€ããŠæå¥ãèšããªããšããããšã§ããé©åãªå Žæã«sub.d.ts
ãèŠã€ããéãã
é¢é£ãããç°ãªã質åïŒ
SomeLib
ãreferences
ãtsconfigã«å
¥ãããšãå°æ¥ã.tsãã¡ã€ã«ã䜿çšããŠNPMããã±ãŒãžãå
¬éã§ããããã«ãªãããšã«æ°ä»ããŸããã ããããäŸåããã±ãŒãžãtsconfigã«references: ["SomeLib"]
ãæ瀺çã«é
眮ããªãå Žåã§ããTSã¯åžžã«ããããåã³ã³ãã€ã«ãããšæããŸãã
ãŸãã¯ãMyLibã®references
ã import
ã ãã®å ŽåïŒã€ãŸãã references
ã¯ãªãå ŽåïŒã«èªåçã«ããããžã§ã¯ãå¢çããå°å
¥ãããšããæå³ããããŸããïŒ
IIRCãæåã®ã¢ã€ãã¢ã®1ã€ã¯ãã¢ãžã¥ãŒã«ãããšãã°node_modules
ãä»ããŠé
眮ãããŠããå Žåã .d.ts
ãã¡ã€ã«ã.ts
ãã¡ã€ã«ãããåªå
ããããšãããã®node_modules
"ïŒã¯äžè¬çã«åé¡ãå€ãããããã§ãã æ瀺çãªããããžã§ã¯ãå¢çããæã€ããšã§ããã解決ãããå¯èœæ§ããããŸãïŒããšãã°ã projectRoot: true
代ããã«ããŸãã¯ããã«å ããŠã references
ïŒïŒ
ã¬ã«ãã®å Žåãç§ã¯ãã£ãšç°¡åãªè§£æ±ºçãæãã§ããŸããã
ç§ã®å
šäœçãªæžå¿µã¯ãåã
ã®ãããžã§ã¯ãæ§æãã¡ã€ã«ãžã®çžå¯Ÿçãªéé ã®"../xx"
ãã¹ã䜿çšããŠåç
§ãè¿œå ãããšããããã¯ã¹ã¿ã³ãã¢ãã³ã¢ãžã¥ãŒã«ãšããŠäœ¿çšã§ããªããªããç¹å®ã®ã¯ãŒã¯ã¹ããŒã¹æ§é ã«ããå¿
èŠãããããšã§ãã
ãã¯ãŒã¯ã¹ããŒã¹ãtsconfig.jsonã®æ°ããæŠå¿µãè¿œå ãããšããã®åé¡ã解決ããŸãã ããããã°ãããšãã°åã ã®ããã±ãŒãžããgit cloneãããå Žåããã®äŸåé¢ä¿ãéåžžã®æ¹æ³ïŒnpmãŸãã¯yarnã䜿çšãããªã©ïŒã§ã€ã³ã¹ããŒã«ãããšãã³ã³ãã€ã«ãããäŸåé¢ä¿ãå®çŸ©ãã¡ã€ã«ãåã蟌ããããåå¥ã«äœæ¥ã§ããããã«ãªããŸãã ã¯ãŒã¯ã¹ããŒã¹å šäœã®ã¯ããŒã³ãäœæããã³ãã³ããå®è¡ããŠãã¹ãŠã®ããã±ãŒãžãåã蟌ããšãã¯ãŒã¯ã¹ããŒã¹æ§æã§ãã¹ãŠã®ãœãŒã¹ãããã²ãŒãã§ããŸãã
ã¯ãŒã¯ã¹ããŒã¹tsconfig.json
ãYarnã®ã¯ãŒã¯ã¹ããŒã¹package.json
httpsïŒ//yarnpkg.com/lang/en/docs/workspaces/ãšå®å
šã«äžèŽããããšã«æ³šæããŠ
ããã§æŠå¿µå®èšŒãå°ãè¡ããŸãã
https://github.com/spion/typescript-workspace-plugin
åã
ã®ãªããžããªã®ãã¹ãŠã®tsconfig.json
ãã¡ã€ã«ã«ãã©ã°ã€ã³ãè¿œå ããã ãã§ã
{
"plugins": [{"name": "typescript-workspace-plugin"}]
}
次ã«ãyarnã®ãworkspacesããšã³ããªãšäžç·ã«ãããã¬ãã«ã®package.jsonã§ããworkspace-sourcesããšã³ããªãè¿œå ããŸãã
{
"workspaces": ["packages/*"],
"workspace-sources": {
"*": ["packages/*/src"]
}
}
ãã®ãã£ãŒã«ãã¯ãtsconfig.jsonã®ãpathsããã£ãŒã«ããšãŸã£ããåãããã«æ©èœããŸãããåã ã®ãããžã§ã¯ãã®èšèªãµãŒãã¹ã«ã®ã¿åœ±é¿ããããã±ãŒãžãœãŒã¹ãæããŸãã é©åãªãå®çŸ©/ã¿ã€ãã«ç§»åãæ©èœãªã©ã埩å ããŸãã
ããã¯ãoutDirã䜿çšãããŠããå Žåã«ã®ã¿åœãŠã¯ãŸããŸããã
æ£ããã 倧èŠæš¡ãªãããžã§ã¯ããæã€ã»ãšãã©ãã¹ãŠã®äººãoutDir
ã䜿çšããŠãããšãã仮説ãç«ãŠãŸããã ããã§ãªããããžã§ã¯ãã«ã€ããŠèããŠã¿ããã§ã
ããã§ãMyAppã®tsconfigã«["SomeLib"]ãšããåç §ãé 眮ãããšãNPMããŒãžã§ã³ãšSomeLibã®ãœãŒã¹ããŒãžã§ã³ã®äž¡æ¹ã§ããã®ãŸãŸãæ©èœããã®ãããã§ãããã
倧ãã¡ã³ãç§ã¯ãã®ã¢ã€ãã¢ããšãŠã奜ãã§ãã æ¬åœã«å¿ èŠãã©ãããèããå¿ èŠããããŸãã
ããã§ã®æ³šæç¹ã®1ã€ã¯ãããã±ãŒãžã®äœæè ã¯ãaïŒTSãèŠã€ããå Žæã§.tsãã¡ã€ã«ãštsconfigãã¡ã€ã«ã®äž¡æ¹ãäžç·ã«å ¬éããããbïŒã©ã¡ããå ¬éã
ãŸãã¯ãMyLibå ã®åç §ã¯ãã€ã³ããŒãããã ãã§ïŒã€ãŸããåç §ããªãå ŽåïŒãèªåçã«ããããžã§ã¯ãå¢çããå°å ¥ãããšããæå³ããããŸããïŒ
@mhegazyãšè©±ããreferences
é
åãæã€ãããžã§ã¯ãã¯ããããžã§ã¯ããã©ã«ããŒã®å€ã«ãã.ts
ãã¡ã€ã«ããèŠããããšã¯ãããŸãããããã«ã¯ãã¡ã€ã«ãå«ãŸããŸãã exclude
dãã£ã¬ã¯ããªã®äžã ãã®å€æŽã ãã§ãlernaã·ããªãªãããã«æ©èœããããã«ãªããŸãïŒãworkãã¯ãã¢ãžã¥ãŒã«åç
§ãåžžã«.d.tsã«è§£æ±ºããããããšãæå³ããŸãïŒã
ãã¯ãŒã¯ã¹ããŒã¹ãã¢ãã«ããã£ãšèŠãå¿ èŠããããŸãã
ããã¯ãoutDirã䜿çšãããŠããå Žåã«ã®ã¿åœãŠã¯ãŸããŸããã
æ£ããã 倧èŠæš¡ãªãããžã§ã¯ããæã€ã»ãšãã©ãã¹ãŠã®äººãoutDirã䜿çšããŠãããšãã仮説ãç«ãŠãŸããã ããã§ãªããããžã§ã¯ãã«ã€ããŠèããŠã¿ããã§ã
Visual Studioãœãªã¥ãŒã·ã§ã³ã«ã¯67ã®TSãããžã§ã¯ããããã outdir
ãªãã§ã³ã³ãã€ã«ãããåºåãã£ã¬ã¯ããªæ§é ãäœæããããã®ãã«ãåŸã®grunttasksïŒããã³uglifyããã®ä»ã®åŸåŠçïŒããããŸãã
ã»ãšãã©ã®ãããžã§ã¯ãã«ã¯ãã®ãããªtsconfig.jsonããããŸã
"include": [
"../baseProj/Lib/jquery.d.ts",
"../baseProj/baseProj.d.ts"
]
åç §ã®ææ¡ãèªã¿éããä¿®æ£ããã®ã«å°ãæéãããããŸãã-AFAICT lernaããã³yarnã¯ãŒã¯ã¹ããŒã¹ã®ãŠãŒã¶ãŒã¯ãããã§ææ¡ãããŠããã¯ãŒã¯ã¹ããŒã¹æ©èœãå¿ èŠãšããŸããã
skipLibCheck
ã¯ããã©ãŒãã³ã¹ãžã®åœ±é¿ãç¡èŠã§ããã¯ãã§ãããç§ã¯ããããã§ãã¯ããŠããŸãããç§ãã¡ãæã£ãŠããªããã®ããããŠç§ãæžãããã©ã°ã€ã³ãæäŸãããã®ã¯ããã¹ãŠã®ãœãŒã¹ãåæã«ããŒãããæ¹æ³ã§ãã 2ã€ä»¥äžã®ã¢ãžã¥ãŒã«ã«åæã«å€æŽãå ããå¿ èŠãããå Žåããå®çŸ©ã«ç§»åããšãã¿ã€ãå®çŸ©ã«ç§»åãã§.d.tsãã¡ã€ã«ã«éä¿¡ãããããããŸããã å ã®ãœãŒã¹ã³ãŒãã®å Žæã«éã£ãŠã»ããã®ã§ãããããç·šéãããããããŸããã ãã以å€ã®å Žåã¯ãåã ã®ãããžã§ã¯ããã£ã¬ã¯ããªãããŒãããã ãã§ãlerna / yarnã«ãã£ãŠäœæãããnode_modulesã·ã³ããªãã¯ãªã³ã¯ãæ©èœããŸãã
ç§ãã¡ã«ãšã£ãŠãåãããšã§ãã Lernaã®ä»£ããã«ã Rushã䜿çšããŠäŸåé¢ä¿ã°ã©ããèšç®ããŸãããå¹æã¯åãã§ãã ãããžã§ã¯ãããã«ãããå Žåã tsc
ã¯å®è¡ããå¿
èŠã®ããå€ãã®ã¿ã¹ã¯ã®1ã€ã«ãããŸããã ç§ãã¡ã®ã³ã³ãã€ã©ãªãã·ã§ã³ã¯ããã倧ããªãã«ãã·ã¹ãã ã«ãã£ãŠèšç®ããã tsconfig.jsonãå
¥åãã¡ã€ã«ã§ã¯ãªããçæãããåºåïŒäž»ã«VS Codeã®å©çã®ããïŒã§ããã¢ãã«ã«
ç§ãã¡ãæã£ãŠããªããã®ããããŠç§ãæžãããã©ã°ã€ã³ãæäŸãããã®ã¯ããã¹ãŠã®ãœãŒã¹ãåæã«ããŒãããæ¹æ³ã§ãã 2ã€ä»¥äžã®ã¢ãžã¥ãŒã«ã«åæã«å€æŽãå ããå¿ èŠãããå Žåããå®çŸ©ã«ç§»åããšãã¿ã€ãå®çŸ©ã«ç§»åãã§.d.tsãã¡ã€ã«ã«éä¿¡ãããããããŸããã å ã®ãœãŒã¹ã³ãŒãã®å Žæã«éã£ãŠã»ããã®ã§ãããããç·šéãããããããŸããã
+1ããã¯çŽ æŽãããã§ãããã
ããè¯ããã«ããããžã§ã¯ããµããŒãã倢èŠãŠããå Žåãç§ã®æåã®ãªã¯ãšã¹ãã¯ãVS CodeIntelliSenseã®åäœã®ãããªã³ã³ãã€ã©ãµãŒãã¹ã§ãã Rushãã³ã³ãã€ã©ãšã³ãžã³ã100åèµ·åããããšãªãã tsc
100ååŒã³åºãããšãã§ããã°ããã«ãã¯å€§å¹
ã«é«éã«ãªããŸãã ã³ã³ãã€ã©ã¯ãæãã³ã¹ãã®ããããã«ãæé ã®1ã€ã§ãã ã¢ãã¬ãã§ã¯ããã«ãæéãéåžžã«éèŠã§ãã
@iclanton @ nickpape-msft @ qz2017
ã¯ãããé¡ãããŸãïŒ
ãããžã§ã¯ãã·ã¹ãã ã®æãæçšãªææã®1ã€ã¯ã
ãå®çŸ©ã«ç§»åãã¯ãd.tsãã¡ã€ã«ã§ã¯ãªããœãŒã¹ãã¡ã€ã«ã«ç§»åãã
ããã¹ãŠã®åç
§ãæ€çŽ¢ãã¯ããããžã§ã¯ãåç
§ããªãŒãæ€çŽ¢ããŸãã
ãããããããã¯ãã°ããŒãã«ååå€æŽãã¿ã€ãã®ãªãã¡ã¯ã¿ãªã³ã°ã®ããã¯ã解é€ããŸãã
æšæãåå9æ30åPMãµã«ãŽã¡ããŒã¬Previtiã§2017幎11æ9æ¥ã«ã¯[email protected]
æžããŸããïŒ
ã¯ãããé¡ãããŸãïŒ
â
ãã®ã¹ã¬ããã«ãµãã¹ã¯ã©ã€ãããŠããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/3469#issuecomment-343356868 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AANX6d19Zz7TCd_GsP7Kzb-9XJAisG6Hks5s07VXgaJpZM4E-oPT
ã
@mhegazyãšè©±ãã
ããã§ããããã®å Žåããªãç¹å®ã®åç
§ãæå®ããå¿
èŠãããã®ã§ããããã
ãã©ã°ïŒ projectRoot: true
ïŒãããã°ååãªããã§ãã
ããšãã°ã references: ["foo"]
ãšreferences: []
ã®éãã¯äœã§ããããã
import "foo"
ãŸãã¯import "bar"
å Žåãã©ã¡ãã.ts
ãã¡ã€ã«ãç¡èŠããããã§ãã
ãããã£ãŠããã®å Žåãææ¡ã¯æ¬¡ã®ããã«ãªããŸãã
ãã®tsconfig.jsonïŒ projectRoot
TODOãã€ã¯ã·ã§ããïŒãèãããšïŒ
{
"extends": "../tsproject.json",
"compilerOptions": {
"projectRoot": true
}
}
tsc
ããããžã§ã¯ããã©ã«ãå€ã®äœãïŒé€å€ããããã£ã¬ã¯ããªã®äžã®ãã¡ã€ã«ãå«ãïŒã解決ããå¿
èŠãããå Žåã .d.ts
ãã¡ã€ã«ã®ã¿ã調ã¹ãŸãïŒãŸãã¯ã .d.ts
åªå
ããå ŽåããããŸãïŒããã¡ã€ã«ãäœæããããã ãã衚瀺ãããå Žåã¯tsconfig
ããã³/ãŸãã¯.ts
ãã©ãŒã«ããã¯ããŸãïŒã
ããã«ãããã³ã³ãã€ã«äžã®è§£æ±ºãè¿
éãã€ç°¡åã«ãªããŸãã
ããã¯ãã¢ãã¬ãåç
§ïŒã€ãŸãã import "../foo"
ïŒããã³ããã±ãŒãžããŒã¹ã®åç
§ïŒã€ãŸãã import "foo"
ïŒã«å¯ŸããŠæ©èœããŸãã
NPMããã±ãŒãžãšãã®ãœãŒã¹ã³ãŒãè¡šçŸã§æ©èœããŸãã
ãŸããã³ã³ãã€ã«äžã«tsconfig.json
æ©æ§ã解決ããå¿
èŠããªããªããŸããã .d.ts
ãèŠã€ãããªãå Žåã®ãšã©ãŒã¡ãã»ãŒãžã¯ããŸã圹ã«ç«ã¡ãŸããã
ãããæ¬åœã«ããã»ã©åçŽã§ãããªãã°ãããã¯çå®ã«ã¯å°ãè¯ãããããã«èãããã®ã§ãç§ã¯ããããéèŠãªäœããèŠèœãšããŠããŸã:)
ä»ã®äººãææããŠããããã«ããIntelliSenseãã.tsãã¡ã€ã«ãåŒãç¶ãåŠçããããšã¯äŸç¶ãšããŠéåžžã«éèŠã§ãã
ãããã£ãŠããå®çŸ©ã«ç§»åãããåç
§ã®æ€çŽ¢ããªã©ã®èŠæ±ãè¡ãããå Žåãéãããã³ã°ã䜿çšããŠã䜿çšãã.d.ts
ãã¡ã€ã«ãã察å¿ãã.ts
ãã¡ã€ã«ãèŠã€ããå¿
èŠããããŸããé ãã
ãã®ãããã³ã°ã¯ã次ã®äŸã䜿çšããŠå®è¡ã§ããŸãã
.d.ts
//# sourceURL = ../src/foo.ts
ãããªåã蟌ã¿ã³ã¡ã³ãæååã䜿çšãã.d.ts
ããå
ã®.ts
ã«ãããããããšãã§ããŸãã.js
ãã¡ã€ã«ã解決ãããã®ãœãŒã¹ãããã䜿çšã㊠`.tsããã¯ã .ts
ãå€æŽããããšãã«.d.ts
ãåæ§ç¯ãããšãããããã¯ã玹ä»ããŸããããã®ææ¡ã§è§£æ±ºããå¿
èŠããããã©ããã¯ããããŸããã ããšãã°ãã«ãŒããããžã§ã¯ãèªäœããã§ãã .js
ãã¡ã€ã«ãåæ§ç¯ããããã®ããã»ã¹ãå¿
èŠã«ãªãã®ã¯ä»æ¥ãã§ã«äºå®ã§ãã ãããã£ãŠããããååšããå Žåã¯ãäŸåé¢ä¿ãåæ§ç¯ããããã®äœãããããšæ³å®ããã®ãå®å
šã ãšæããŸãã ããã±ãŒãžããšã«äžŠåã®tsc
ã®æã§ããå¯èœæ§ãããã tsbuild
ã§ããå¯èœæ§ãããã compileOnSave
ãããªåäœãããã¹ããŒãIDEã§ããå¯èœæ§ããããŸãã
@pgonzal @michaelaird https://github.com/spion/typescript-workspace-pluginã¯ãããã¯å®çŸ©ã«è¡ããšãã«ãTSconfigã®ç³ž/ã¬ã«ãã®/ etcã¯ãŒã¯ã¹ããŒã¹ãããžã§ã¯ãã®ãã¹ãŠã®åç §ãèŠã€ãã埩å ãã-ããšã ããè¡ããŸãã
é¢çœã...ã©ãã·ã¥ã§ãããæ©èœãããããšãã§ãããã©ããçåã«æããŸãã èŠãŠã¿ãŸãããã
åèãŸã§ã«ããã®åãçµã¿ã®äžç°ãšããŠæ§ç¯ãããã1ã€ã®ç°¡åãªããŒã«ã¯ã wsrun
lerna run
ãšåæ§ã«ãã¯ãŒã¯ã¹ããŒã¹å
ã®ãã¹ãŠã®ããã±ãŒãžã«å¯ŸããŠã³ãã³ããå®è¡ããŸãã
typescriptã®äŸåé¢ä¿ã¯é çªã«ã³ã³ãã€ã«ããå¿
èŠããããããwsrunã¯ã package.json
äŸåé¢ä¿ã«åºã¥ããŠããããžã«ã«ãªé åºã§packageã³ãã³ããå®è¡ã§ããŸãã ãã«ãäžã®äžŠååŠçããµããŒãããŸãã æé©ã«äžŠååãããŠããããã§ã¯ãããŸããããåŸã§æ¹åããããšãã§ããŸãã
泚æç¹ãšããŠã oaoã¯ç³žçšã®ãã1ã€ã®ã¢ãã¬ãããŒã«ã§ãã æè¿ãã³ãã³ãã®ãããããžã«ã«ãé åºã®ãµããŒããè¿œå ãããŸããã
ããªãã¡ã¯ã¿ãªã³ã°ããšããèšèã¯ç§ãã¡ã«ãšã£ãŠéèŠãªç®æšã§ãããããããã«æçš¿ããããšæããŸãããããããçŸåšã®ææ¡ïŒhttps://github.com/Microsoft/TypeScript/issues/3469#issuecomment-341317069ïŒãšæ¥ç·æ¹åã§ãããã®å·ã§ã¯ããŸãèšåãããŠããŸããã
ç§ãã¡ã®ãŠãŒã¹ã±ãŒã¹ã¯ãããã€ãã®TSãããžã§ã¯ããå«ãã¢ãã¬ãã§ãããåºæ¬çã«common-library
å ããŠã app1
ãšapp2
ã€ã®ã¢ããªã«æžããããšãã§ããŸãã IDEã§äœæ¥ããå Žåããããã¯åäžã®ãããžã§ã¯ããšããŠæ±ãå¿
èŠããããŸããããšãã°ãååå€æŽãªãã¡ã¯ã¿ãªã³ã°ã¯3ã€ã®ã¢ãžã¥ãŒã«ãã¹ãŠã§æ©èœããå¿
èŠããããŸããã app1
ãšapp2
ã2ã€ã®å¥åã®ãã«ãã¿ãŒã²ããã§ãã ãã«ãã¯äžè¬çã«é¢å¿ã®åé¢ã§ããããšã«åæããŸãããçå®ã¯ãç§ãã¡ã®ã¢ããªã¯éåžžã«å°ããã cd app1 && tsc
ãããªããšãããããšã¯ç§ãã¡ã«ãšã£ãŠå®å
šã«åé¡ãªããšããããšã§ãã
TypeScriptãããããµããŒãããè¯ãæ¹æ³ãèãåºããªããããã¯çŽ æŽãããã§ãããã
monorepoã¯ãã¹ãããžã§ã¯ããªãã¡ã¯ã¿ãªã³ã°/ãªãã¡ã¬ã³ã¹ã®å Žåãvscodeã§äœæ¥ããŠããå Žåã¯ããã®ã»ããã¢ãããæ©èœããŠããããšãããããŸããã
ã«ãŒãtsconfigïŒ
"compilerOptions": {
"baseUrl": ".",
// global types are different per project
"types": [],
"paths": {
"lib": ["packages/lib/src"],
"xyz1": ["packages/xyz1/src"],
"xyz2": ["packages/xyz2/src"],
}
},
"include": ["./stub.ts"], // empty file with export {} to stop vscode complaining about no input files
"exclude": ["node_modules"]
packages / xyz1 / tsconfig.json
{
"extends": "../../tsconfig",
"compilerOptions": {
"types": ["node"],
},
"include": ["src/**/*"]
}
packages / xyz2 / tsconfig.json
{
"extends": "../../tsconfig",
"compilerOptions": {
"types": ["webpack-env"]
},
"include": ["src/**/*"]
}
packages / lib / tsconfig.json
{
"extends": "../../tsconfig",
"compilerOptions": { ... },
"include": ["src/**/*"],
// special file to load referenced projects when inside in lib package, without it they won't be
// visible until you open some file in these projects
"files": ["./references.ts"],
}
packages / lib / tsconfig-build.json
{
"extends": "./tsconfig",
// exclude referenced projects when building
"files": []
}
packages / lib / references.ts
import "xyz1";
import "xyz2";
export {};
ããã±ãŒãžã®package.json
æ£ããmain
ããããã£ãå¿
èŠã§ãããlibãªãã®ããã±ãŒãžã®å Žåã§ãtypes
ãªãå¯èœæ§ããããŸãã次ã«äŸã瀺ããŸãã
"main": "src/main.tsx",
"types": "src/main.tsx",
ãã®ããã«ã lib
äœãããªãã¡ã¯ã¿ãªã³ã°/ååå€æŽãããšã xyz1
ãšxyz2
åç
§ããªãã¡ã¯ã¿ãªã³ã°ãããŸãã ãŸãããã®æ¹æ³ã§ã¯ããããžã§ã¯ãã«ç°ãªãã°ããŒãã«/ã¿ãŒã²ããã©ã€ãã©ãªãå«ããããšãã§ããŸãã
Gradleã§ã¯ãåã«ãããè€åãã«ããšåŒãã§ããŸãã
ã¡ãªã¿ã«ãTypeScriptã³ã³ãã€ã©ã«è²¢ç®ãããã®ãªããç§ãå§ããã¹ã1ã€ã®ãã€ã³ãã¯ãããŸããïŒ ç§ã¯ãªããžããªã®ã¯ããŒã³ãäœæããŸããããããã¯å°ãªããã¬ããšã§ã¯ãããŸããïŒç§ã¯ãœãŒã¹ãèªãããã«äœ¿çšããŸãïŒè§åºŠãã€ãªã³ãããã¥ã¡ã³ãããååŸã§ããªãå ŽåããŸãã¯ã€ã³ã¿ãŒãããããé¢ããŠããå Žåã¯ãšã¯ã¹ãã¬ã¹...ïŒæ¬åœã«å©ããå¿ èŠã§ãè¡ãéãæããŠãã ããã
ããããšãïŒ
TypeScriptã®æããæªæ¥ã
çžå¯Ÿçãªã¢ãžã¥ãŒã«ãã¹ã䜿çšããŠããå Žåã¯ãè©ŠããŠããããããããã¿ã€ãããããŸãã https://github.com/RyanCavanaugh/project-references-demoã«ãµã³ãã«ãªããžããªããããåºæ¬çãªã·ããªãªã®æŠèŠãšãã®ä»çµã¿ã瀺ããŠããŸãã
ããŒã«ã«ã§è©Šãå ŽåïŒ
git clone https://github.com/RyanCavanaugh/TypeScript
git checkout pr-lkg
npm install
npm run build
npm link
次ã«ãä»ã®ãã©ã«ãã«ïŒ
npm link typescript
ç¶æ³ã®å€åã«å¿ããŠã pr-lkg
ã¿ã°ãææ°ã®äœæ¥ã³ããããæãããã«ããŸãã 次ã¯ç§ã®ããããšã§ãïŒ
@RyanCavanaugh del
ã¢ãžã¥ãŒã«ãError: Cannot find module 'C:\github\TypeScript\built\local\tsc.js'
ïŒããããããŒã«ã«ãã¹ïŒïŒããªããªã©ã®ãšã©ãŒã®ããã«å®éã«ãã«ãããããšã¯ã§ããŸããããå
šäœçã«æ§é ã¯èŠæ ããããŸãã
ããã¯tsc
ã®ã¿ã§ããããããšãèšèªãµãŒããŒã䜿çšããVSCodeã§ã®ãããžã§ã¯ãå
šäœã®ãªãã¡ã¯ã¿ãªã³ã°ãèæ
®ããŸããïŒ
...ãŸãã pr-lkg
ã¿ã°ããããŸããã
ã¿ã°ã¯ããã«ãããŸãïŒãã©ã³ãã§ã¯ãããŸããïŒã https://github.com/RyanCavanaugh/TypeScript/tree/pr-lkgãåç §ããŠ
references
ã§tsconfig.json
ãããã¯ããã¯ãã¹ãŠã®ãã®ã«é©çšããããã®ããå€ãã®æå³ããããŸããããšã®äŸåé¢ä¿ãªããã€ã³ã§ããããšå€ã®è§£æ±ºãrootDir
ïŒ
次ã®ãããªsandbox
ããããã£ã®ãããªãã®ãæ³åããŠããŸãã
# tsconfig.json
{
"compilerOptions": {
"outDir": "lib",
"sandbox": "."
},
"include": ["src/index.ts"]
}
ãµã³ãããã¯ã¹ãrootDir
ãåãå€ã«èšå®ããŸãã tsconfig.json
ãå«ããã£ã¬ã¯ããªãžã®ãã¹ãæ瀺çã«æäŸãã代ããã«ãéåžžã®ã¢ãžã¥ãŒã«è§£æ±ºãé©çšãããFSããªãŒãæ€çŽ¢ããŠtsconfig.json
èªåçã«èŠã€ããããšãã§ããŸãã
# package.json
{
"name": "animals",
"module": "src",
"typings": "lib",
"dependencies": {
"core": "*"
}
}
ãã¡ãã§ãïŒ
references
ãšdependencies
ïŒãç¶æããå¿
èŠã¯ãããŸããã@RyanCavanaugh ãç§ãç解ããŠããéããç§ã¯ãããã®å€æŽãããŒã«ã«ã§ããäœæ¥ã§ãããããšãã°travis-ci.orgã§ãã¹ãã®ããã«ãã®ãããªãããžã§ã¯ããéä¿¡ããããšã¯ã§ããŸããã å³ïŒ
@billti / @ mhegazyãšã®ä»æ¥ã®äŒè°ããã®ã¡ã¢
ãµã€ãããŒïŒãã®ååå€æŽã¯ä»æ¥ã¯æ©èœããŸãã
function f() {
if (Math.random() > 0.5) {
return { foo: 10 };
} else {
return { foo: 20 };
}
// rename foo here doesn't rename *both* instances in the function body
f().foo;
ã©ã€ã¢ã³ãã¢ãã¡ãããã«ã«æè¬ããŸãã ãããžã§ã¯ãéã§ãåç §ã®æ€çŽ¢/ååã®å€æŽãã·ããªãªãæ©èœãããããšã¯ãTypeScriptãäžèŠæš¡ãããžã§ã¯ãããµããŒãããŠããªãããšã«ã€ããŠæåã®èŠæ ãè¿°ã¹ããšãã«ç§ã念é ã«çœ®ããŠããäž»èŠãªãŠãŒã¹ã±ãŒã¹ã®1ã€ã§ããã äžèŠæš¡ã®ãããžã§ã¯ãã¯ã¢ãžã¥ãŒã«åŒã§ããã倧èŠæš¡ã§ã¯ãããŸããã ç§ããããŸã§ã«ããã§èŠãææ¡ãšäœæ¥ã¯ãã¹ã±ãŒã©ããªãã£ã®éã³ã®ããã«æããŸãã ããã¯TypeScriptã®é·æçãªå¥å šæ§ã«ãšã£ãŠéåžžã«éèŠã§ãããäžèŠæš¡ã§ã¯ãªã倧èŠæš¡ãªãããžã§ã¯ãã«ãšã£ãŠã¯ã»ãšãã©ã¡ãªããããããŸãã ãã®ã³ã¡ã³ãã§ã©ã€ã¢ã³ããèããããšã¯ãTypeScriptã§äžèŠæš¡ãããžã§ã¯ããéçºããéã®äººéå·¥åŠãæ¹åããããã«å¿ èŠãªãã®ã«æ²¿ã£ããã®ã«èãããŸãã
ãã€ãã®ããã«ãTypeScriptããŒã å šäœã®åªåã«æè¬ããŸãïŒ ããªãã¯çŽ æŽãããä»äºãããŠããŸãã
lerna / yarnã¯ãŒã¯ã¹ããŒã¹ã«ã¯ãããªãã®ç掻ãã¯ããã«æ¥œã«ããããªãã¯ããããŸãã
ãµããããžã§ã¯ãã®package.jsonã®main
ããã³types
ãšã³ããªãsrc / indexã«ãã€ã³ãããŸãã tsãã¡ã€ã«ãããã³åç
§ã®æ€çŽ¢/ååã®å€æŽã·ããªãªã¯åçŽã«æ©èœããŸãã
ãŸãã1ã€ã®tscãå®è¡ããã ãã§ããããžã§ã¯ãå
šäœãã³ã³ãã€ã«ã§ããŸãã
ããªãã¯ããªãã®ããã±ãŒãžã®ããã€ãã®ããã«ããããããããããŸãããããªãã¯ãã¹ãŠã®ããã«ãããããããããŸããã ããªãã®åŒã³åºãã
ããã€ãã®æ¬ ç¹ãšèœãšãç©ŽããããŸãïŒ1ã€ã®ããã±ãŒãžã«æ¡åŒµãããå ŽåããŸãã¯ã°ããŒãã«ã·ã³ãã«ãã€ã³ããŒããããšãããã°ã©ã å
šäœãæ±æãããŸãïŒããäžè¬çã«ã¯éåžžã«ããŸãæ©èœããŸãã
NPMã«å
¬éããå Žåã¯ãã¡ã€ã³ãšã¿ã€ããé©åãªå€ã«èšå®ããã ãã§ãïŒãã«ãã®äžéšãšããŠãªã©ïŒã
äžèšã®èšå®ã§ãç§ã¯å€ããå°ãªããæåŸ ãããæ©èœã®ãã¹ãŠãæã«å ¥ããŸãã
ãããlerna / yarnã¯ãŒã¯ã¹ããŒã¹ã®ç§èš£ã§ããããã«ããããªãã®ç掻ããã£ãšæ¥œã«ãªããŸãã
ãµããããžã§ã¯ãã®package.jsonã®ã¡ã€ã³ãšã³ããªãštypesãšã³ããªãsrc / index.tsãã¡ã€ã«ã«ãã€ã³ããããšãåç §ã®æ€çŽ¢/ååã®å€æŽã·ããªãªãç°¡åã«æ©èœããŸãã
ç§ã®çµéšã§ã¯ããã®ã»ããã¢ããã®åé¡ã¯ãTypeScriptã_external_ããã±ãŒãžã®tsãã¡ã€ã«ããå€éšã©ã€ãã©ãªãšããŠã§ã¯ãªããããããå¿ èŠãšããããã±ãŒãžã®_sources_ã§ãããã®ããã«æ±ãå§ããããšã§ãã ããã¯å€ãã®åé¡ãåŒãèµ·ãããŸãã
å€éšããã±ãŒãžã¯ã_requiring_ããã±ãŒãžã®tsconfigã䜿çšãããã³ã«ãè€æ°åã³ã³ãã€ã«ãããŸãã å¿ èŠãªããã±ãŒãžã®tsconfigãç°ãªãå ŽåïŒããšãã°ãç°ãªãã©ã€ãã©ãªïŒãããã«ãããå床ã³ã³ãã€ã«ããããŸã§ãå¿ èŠãªããã±ãŒãžã«èª€ã£ãã³ã³ãã€ã«ãšã©ãŒã衚瀺ãããå ŽåããããŸãã
å¿ èŠãªããã±ãŒãžã«ã¯ãå¿ èŠä»¥äžã®ãã¡ã€ã«ãå«ãŸããŠãããããã³ã³ãã€ã«ãé ããªããŸãã
ãã¹ãŠã®ããã±ãŒãžã®rootDir
ãæäžäœãã£ã¬ã¯ããªã«ãªãã index
ããã ãã§ãªããä»»æã®ããã±ãŒãžããä»»æã®TSãã¡ã€ã«ãçŽæ¥å«ããããšãã§ããå¯èœæ§ããããŸãã éçºè
ã泚æããªããšãå¿
èŠãªããã±ãŒãžAPIããã€ãã¹ããå¯èœæ§ããããŸãã ãŸãããã«ãããã»ã¹ãå
ç¢ã§ãªãå Žåãå¿
èŠãªããã±ãŒãžã«ã¯ãå€éšåãã®å¿
èŠãªããã±ãŒãžããã®éè€ã³ãŒããå«ãŸããå¯èœæ§ããããŸãã
ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ãæ¬ ç¹ã®ããã«TSãã¡ã€ã«ã«äŸåããããšãé€å€ããŸããã ããã±ãŒãžéã®äŸåé¢ä¿ã¯ãã¹ãŠindex.d.tsãã¡ã€ã«ã«ãããããã³ã³ãã€ã©ãŒã¯ããããå€éšãšããŠæ±ãããã¹ãŠåé¡ãããŸããã
ãã¡ããã .d.ts
ã«ãã£ãŠã¯ããã«ãã¹ããããã«ããå¿
èŠã«ãªããšããåé¡ïŒwebpackãªã©ã®ããŒã«ã§ã¯ããã«äœ¿çšã§ããªãïŒãšIDEãšã¯ã¹ããªãšã³ã¹ã®äœäžïŒååã®å€æŽãåç
§ãããã±ãŒãžã®å¢çãè¶ããªãïŒã®åé¡ããããŸãã ïŒã
ç§ã¯ä»ã®ææ ã®ããã€ãã«åæããŸã-typescriptã¯ã³ã³ãã€ã©ã§ããããã«ãã·ã¹ãã ã§ã¯ãããŸããã ããåªãããã«ããããžã§ã¯ããã«ãããµããŒãããããã®ããŒã«ãå¿ èŠã§ãã ç§ã¯ãããå§ããŠããã³ãã¥ããã£ã«ããã€ãã®ãªãã·ã§ã³ãããããšãç¥ã£ãŠããŸãã äŸãšããŠãCïŒã«ã¯Roslynãšããååã®ã³ã³ãã€ã©ãšMSBuildãšããååã®ãã«ãããŒã«ããããŸãã
ä»æ¥ã @ mhegazyãšã
ååã®å€æŽã®éçž®éã®ææªã®ã±ãŒã¹ã¯æ¬¡ã®ããã«ãªããŸãã
// alpha.ts
const v = { a: 1 };
export function f() { return v; }
export function g() { return v; }
// alpha.d.ts (generated)
export function f(): { a: number };
export function g(): { a: number };
// beta.ts (in another project)
import { f } from '../etc/alpha';
f().a;
// gamma.ts (in yet another project)
import { g } from '../etc/alpha';
g().a;
éèŠãªèŠ³å¯ã¯ã alpha.ts
ã2ã€ãçžäºã«é¢é£ä»ããããšãã§ããªãéãã f().a
ååãå€æŽãããšg().a
ååãå€æŽãããããšãç¥ãããšã¯äžå¯èœã§ãããšããããšã§ãã
å®è£ èšç»ã®å€§ãŸããªã¹ã±ããïŒ
@RyanCavanaughã¯å®çŸ©ã«ç§»åããŸã/ãã¹ãŠã®åç §ããã®ã¢ãã«ã§
å€æ°ã®æªè§£æ±ºã®è³ªåã«é¢ããã¢ã³ããŒã¹ãšã¢ãã¡ããšã®ä»¥åã®è°è«ããã®ã¡ã¢
prepend
ãŸãã«é©çšãããŸã.d.ts
ïŒ ã¯ã@internal
ã§äœãããŸããïŒ å
éšå®£èšãããŒã«ã«ã®.d.tsãã¡ã€ã«ã«ä¿æããå¿
èŠããããŸãããåºåããŒãžã§ã³ã«è¡šç€ºãããªãããã«ããå¿
èŠããããŸãã--stripInternal
åé€ããŸãremove-internal
ããŒã«ãäœæããïŒå®äºïŒ@internal
宣èšãåé€ããŸã@types
ããå€æŽãããšã©ããªããŸããïŒnoEmitOnError
å¿
é ã§ããïŒ ã¯ããreferenceTarget
-> composable
âšð²ð¡âštsbuild
ãŸãã¯åçã®ãã®ã¯ã composable
ã¢ããã¹ããªãŒã ã«é¢ä¿ã®ãªãèŠä»¶ãžã®æºæ ã確èªã§ããŸãã{ path: "../blah", circular: true }
ãæå®ã§ããŸããã®ä»
ç§ã¯ãã§ã«è² ããŸããã ç§ã¯äž»ã«ãœãŒã¹ãããã®è§£éãã³ã³ãã€ã©ãŒããé ãããããšæã£ãŠããŸããïŒå¥ã ã®ããŒã«ã«å¯Ÿããå¥ã ã®è²¬ä»»ïŒããããªããçå®ã®éããšã«ãããããè¿œå ããããšã«åãçµã¿ãŸããïŒæããã«ã·ãŒã ã¬ã¹ãªgo-todefãæãŸããããïŒã
@RyanCavanaugh
ïŒ23944ãããŒãžããåŸãåç
§ãããŠãããããžã§ã¯ãå
šäœã§ãã¹ãŠã®åç
§ã®ååãå€æŽ/æ€çŽ¢ããå¿
èŠããããŸããïŒ ãŸããèšèªãµãŒãã¹ïŒtsbuildã§ã¯ãªãïŒã®ã¿ãå¿
èŠãªå Žåã«åããŠã composite: true
ãšprojectReferences: []
ã䜿çšããå¿
èŠããããŸããïŒ
ïŒ23944ãããŒãžããåŸãåç §ãããŠãããããžã§ã¯ãå šäœã§ãã¹ãŠã®åç §ã®ååãå€æŽ/æ€çŽ¢ããå¿ èŠããããŸããïŒ
ãŸã ã ããããç§ãã¡ã¯æ¬¡ã«ããã«åãçµãã§ããŸãã
ãŸããèšèªãµãŒãã¹ïŒtsbuildã§ã¯ãªãïŒã®ã¿ãå¿ èŠãªå Žåã¯ãcompositeïŒtrueããã³projectReferencesïŒ[]ã䜿çšããå¿ èŠããããŸããïŒ
質åãããããŸãããããã«ããã§ã¯ãªããèšèªãµãŒãã¹ããšã¯ã©ãããæå³ã§ããïŒ
質åãããããŸãããããã«ããã§ã¯ãªããèšèªãµãŒãã¹ããšã¯ã©ãããæå³ã§ããïŒ
ç§ã¯äœ¿çšããŠããã®ã§ãæ°ãããã«ãããŒã«ïŒå¥åbuild mode
ïŒïŒïŒ22997ïŒã§ã¯ãªããmonorepoã®è€æ°ã®ãããžã§ã¯ãã«ããããšãã£ã¿ãŒãµããŒãïŒååã®å€æŽ/ãã¹ãŠã®åç
§ã®æ€çŽ¢ãªã©ïŒã«ã®ã¿èå³ããããŸãç§ã®ç·šéã®ããã®ããã«ã
ããã¯ããŸãããã¯ãã§ãã ãã«ãã¯ãªããã€ã³æ©èœã§ããã䜿çšããããªãå Žåã¯äœ¿çšããå¿
èŠã¯ãããŸãããããšãã°ãVSCodeã§ã®èšèªãµãŒãã¹ãšã¯ã¹ããªãšã³ã¹ã«tsc
ãå¿
èŠãªãã®ãšåæ§ã§ãã
ãã ããã¯ãã¹ãããžã§ã¯ãåç §ãæ©èœããããã«å¿ èŠãªã¡ã¿ããŒã¿ãçæããã«ã¯ã宣èšãšå®£èšãããã䜿çšããŠãã«ãããå¿ èŠããããŸãã
ææ¡ã®ãã¹ãŠã®åŽé¢ãæ£ããç解ããŠãããã©ããã¯ããããŸããããåã ã®ãããžã§ã¯ãã«ãã¹ã§ã¯ãªãååã§ä»ã®ãããžã§ã¯ããåç §ãããããšã¯å¯èœã§ããããïŒ ã¯ãŒã¯ã¹ããŒã¹ãããžã§ã¯ãã«ã¯ãã°ãããä»ããã€ãŒã³ã¯ãŒã¯ã¹ããŒã¹ãšåæ§ã«ããŸãã¯åã ã®ãããžã§ã¯ãåããã¹ãŠãªã¹ãããããšã«ãã£ãŠããã¹ãŠã®ãããžã§ã¯ããã¹ãæå®ããæ¹æ³ãå¿ èŠã§ãã
åºæ¬çã«ã代ããã«ïŒ
"dependencies": [
"../common",
"../util"
],
ãé¡ãã§ããŸãã
"dependencies": [
"common",
"util"
],
ã¯ãŒã¯ã¹ããŒã¹tsconfig.jsonããããŸã
"workspace": {
"common": "packages/common",
"util": "packages/util"
}
ãŸãã¯ããã«è¯ãããšã«ããã¹æ§æïŒ
"workspace": {
"*":"packages/*"
}
å©ç¹ïŒ
ãŸãã¯ãå°ãªããšãããã¹ä»¥å€ã®ååïŒã./ããŸãã¯ã../ãã§å§ãŸããªãååïŒãå°æ¥ã®äœ¿çšã®ããã«äºçŽããããšã¯ã§ããŸããïŒ
ãããã©ã®çšåºŠé¢é£ããŠãããã¯ããããŸããããYarn 1.7ã§ã¯æè¿ããã©ãŒã«ã¹ãããã¯ãŒã¯ã¹ããŒã¹ãã®æŠå¿µãå°å ¥ãããŸããããã®ããã°æçš¿ãåç §ããŠãã ããã
ããã«ãã誰ãããã¯ãŒã¯ã¹ããŒã¹ãš@RyanCavanaughãTypeScriptãããžã§ã¯ãåç §/ãã«ãã¢ãŒãã®åšãã§è¡ã£ãŠããäœæ¥ã®äž¡æ¹ã«ç²ŸéããŠããŠãããããé¢é£ããŠãããã©ããã説æããã³ã¡ã³ããããããããå¯èœæ§ããããŸããïŒ ç§ã®çŽæã¯ãYarnã¯ãŒã¯ã¹ããŒã¹ïŒnpmã¯ä»å¹ŽãããããååŸããŸãïŒãšå°æ¥ã®TypeScriptããŒãžã§ã³ã®éã®_ã©ãã_ããè€æ°ã®ãããžã§ã¯ããšå ±æã©ã€ãã©ãªãæã€ã¢ããªããžããªã®åªãããµããŒãã«ãããšããããšã§ãã ïŒçŸåšãçã¿ãæããŠããŸããïŒ
ãã®æ©èœã®é²æç¶æ³ã«é¢ããææ°æ å ±ãå ¥æãããã§ãã æ¥æããããã§AureliavNextãã¢ãã¬ãã«ç§»è¡ããäºå®ã§ãã æ°ããããŒãžã§ã³ã¯100ïŒ TypeScriptã§ãããå¯èœã§ããã°ãLernaã§ã¯ãªãå ¬åŒã®TSãããžã§ã¯ãã·ã¹ãã ã䜿çšããããšèããŠããŸãã ãŸããæ°æ©èœã®æ©ææ¡çšè /ãã¹ã¿ãŒã«ââãªãããšãå¬ããæããŸã:)
ã³ã¢ãµããŒããšãœãŒã¹ããããµããŒãgotodefã¯ãååã®ãªãªãŒã¹ïŒTS 2.9ïŒã§è¿œå ãããŸããã ãã«ããµããŒãçšã®tsc --b
ã¯ãã§ã«ååšããTS3.0ã«ãã€ã³ããããŠããŸãã typescriptã³ãŒãããŒã¹ã¯ããã䜿çšããããã«ç§»åããŸããã çŸåšãtypescriptãªããžããªã䜿çšããŠãã®ãµããŒãããã¹ãããŠããŸãã
ãã®æç¹ã§ãŸã å®è¡ããå¿
èŠãããããšïŒ1ãè€æ°ã®ãããžã§ã¯ãã·ããªãªã§æ©èœããããã«ããã¹ãŠã®åç
§ãæ€çŽ¢/ååãå€æŽããŸãã 2.ãšãã£ã¿ãŒã®ããã¯ã°ã©ãŠã³ãã§ã®.d.tsãã¡ã€ã«ã®æŽæ°ã«å¯ŸåŠããŸãã3ããã«ããããžã§ã¯ãã·ããªãªã®--watch
ãµããŒãã ãŸããããããã®ãã¹ãããããŸãã
ãã®ãã±ããã¯åœŒã®æ¬ã«3幎éæ²èŒãããŠããŸãã ãŸã 3/6ã®ååºããã¢ã€ãã ïŒ
@claudeduguayããã¯ãTypeScriptããµããŒããããããžã§ã¯ãã®æ ¹æ¬çãªå€æŽã§ããç¥ãæéã ãšæããŸãããïŒ ãšãŠãå¬ããã§ãïŒ
@mhegazyããã¯çŽ æŽããããã¥ãŒã¹ã§ãã TSããŒã ãèªåãã¡ã®ãããžã§ã¯ãã§ãããã°ããŒãã£ã³ã°ãããŠãããšèããŠãšãŠãããããæããŸãã æåŸã®ããã€ãã®äœæ¥ãå®äºãããããAureliaã®ãªãã·ã§ã³ãšããŠäœ¿çšã§ããããšã楜ãã¿ã«ããŠããŸã:)ã»ããã¢ããã«é¢ããããã¥ã¡ã³ããã§ã次第ãvNextãæ°ãããããžã§ã¯ãã·ã¹ãã ã«ç§»åããŸãã åŸ ãŠãªãïŒ
@mhegazy ES2015ã¢ãžã¥ãŒã«ã«åºã¥ãpackage.jsonãã¡ã€ã«ãšãããžã§ã¯ãã§ããããã¹ãŠãã©ã®ããã«æ©èœãããã«ã€ããŠãããã€ãã®å
ã@aurelia/kernel
ã @aurelia/runtime
ã @aurelia/jit
ãªã©ã®ããã±ãŒãžããããŸãããããã¯import
ã§äœ¿çšãããã¢ãžã¥ãŒã«åã§ããããŸããŸãªãããžã§ã¯ãå
šäœã®ã¹ããŒãã¡ã³ãã TSã³ã³ãã€ã©ã¯ããããã®ã¢ãžã¥ãŒã«åãããŸããŸãªåç
§ãã©ã«ãã«ããããããŠããããšãã©ã®ããã«ç解ããŸããïŒ åç
§ãããŠããåãã©ã«ããŒã«é
眮ãããŠããpackage.jsonãã¡ã€ã«ãååŸããŸããïŒ ããã¯LernaãŸãã¯Yarnã¯ãŒã¯ã¹ããŒã¹ãšã©ã®ããã«ç°ãªããŸããïŒ äžèšã®ãªã³ã¯ãæåã«èª¿ã¹ããšãããå®çšçãªãœãªã¥ãŒã·ã§ã³ãåŸãã«ã¯ãTSãããžã§ã¯ãïŒãã«ãïŒãLernaïŒãªã³ã¯ãšå
¬éïŒãšçµã¿åãããŠäœ¿çšââããå¿
èŠããããšæããŸããããTSãã©ã®ããã«é©åã«ãã«ããããã®ãããããŸããpackage.jsonããã³node_modulesãšçµ±åã§ããªãå Žåã TSãªããžããªã®ãœãŒã¹ã¯ãå¹³åçãªLernaãããžã§ã¯ããšã¯ããªãç°ãªããŸãïŒå®éã«ã¯ããã§ã¯ãããŸããïŒããããã£ãŠãããã§ç§ãã¡ã®ããŒãºãæºããããšãã§ãããã©ããçåã«æãå§ããŠããŸãã ããªããæäŸã§ãããã以äžã®æ
å ±ããããŠç¹ã«ã ããã§èª¬æãããã®ãšåæ§ã®å®çšçãªãã¢ãœãªã¥ãŒã·ã§ã³ã®ã»ããã¢ãããéåžžã«åœ¹ç«ã¡ãŸãã ããããšãïŒ
@EisenbergEffectãšåã質åãå
±æããŸãã ç¹ã«ããããlerna
管çãããŠããã¢ãã¬ãã§ããŸãæ©èœããããšãæåŸ
ããŠããŸãã
èæ ®ãã¹ã2ã€ã®ã¢ãã¬ãã·ããªãª
ãã¹ãŠãlernaã§ã·ã³ããªãã¯åããã»ããã¢ããããå§ããŸãããã
/packages
/a
/node_modules
/b -> symlink to b with package.json "types" pointing to dist/index.d.ts
/b
/dist
/index.d.ts -> built output of entry point declaration file
ããã§å®è¡ãããéèŠãªããšã¯ã a
ãå€ããªã£ãŠããå Žåã«ã a
ãæ§ç¯ããb
ãåæ§ç¯ããããšã§ãã ãããã£ãŠã "references": [ { "path": "../b" } ]
ãa
ã®tsconfig.json
è¿œå ãã a
tsc --build
ãå®è¡ããŠã b
æ£ããã¢ããã¹ããªãŒã ãã«ããååŸããŸãã package.json
äŸåé¢ä¿ãtsconfig.json
ã«ãã©ãŒãªã³ã°ã§ããŸãã
å¥ã®ã·ããªãªïŒããããããŸãäžè¬çã§ã¯ãããŸããïŒã¯ãã·ã³ããªãã¯ãªã³ã¯ãè¡ã£ãŠããªããŠããã©ã€ãã®ããã±ãŒãžã»ããã§äœæ¥ããŠããããã«ãåäœãããããšãæãã§ããå Žåã§ãã ä»æ¥ãããã¯ããªãé¢åãªãã¹ãããã³ã°ã§å®è¡ã§ããŸãããäžéšã®äººã¯ããããŠããŸãã ããã§ã®ãããžã§ã¯ãåç §ãåæ§ã«ãã«ãã®é åºä»ãã«åœ¹ç«ã¡ãŸãããåç §å ã®tsconfigãã¡ã€ã«ã§ããããã£ããµããŒãããŠãåç §ããããã³ã«ãã¹ãããã³ã°ãèªåçã«äœæããããšãéåžžã«æãŸããã§ãããã äŸãã°ããªããæã£ãŠããå Žå
{
"compilerOptions": { "outDir": "bin" },
"package": "@RyanCavanaugh/coolstuff"
}
次ã«ã "references": [{ "path": "../cool" }]
ãè¿œå ãããšã @RyanCavanaugh/coolstuff
-> ../cool/bin/
ããã®ãã¹ãããã³ã°ãèªåçã«è¿œå ãããŸãã ããã¯ãŸã è¿œå ããŠããŸããããããäžè¬çãªã·ããªãªã§ããããšãå€æããå Žåã¯èª¿æ»ã§ããŸãã
çæ³çã«ã¯ãlernaãšTSã¯ããã§ååããå¿ èŠã«å¿ããŠpackage.jsonã®äŸåé¢ä¿ãtsconfig.jsonã«ãã©ãŒãªã³ã°ã§ããŸãã
composite: true
ãèšå®ãããŠããå Žåã¯ãå€éšããŒã«ã«äŸåããã®ã§ã¯ãªãã package.json
ïŒtsconfigãšäžç·ã«ããå ŽåïŒãæœåšçãªåç
§ãšããŠèªã¿åãããšãéžæã§ããŸãïŒè§£æ±ºãããåããã±ãŒãžã«tsconfig.json
ããããã©ããã確èªããŠãã ããïŒ ts
ãã¡ã€ã«ãããŒããïŒå®£èšããããã¡ã€ã«ãåªå
ããããïŒãå€ããªã£ãŠãããã©ããã«é¢ä¿ãªããã¹ãŠãåã³ã³ãã€ã«ãããšãããä»æ¥ã®äœæ¥ã«å¯Ÿããæé©åã«ãªããŸãã
@RyanCavanaughããã¯ããªããšããµã€ãã£ã³ã°ã«èãããŸãã ãããã©ãã·ã¥ã®ã·ã³ããªãã¯æŠç¥ã§æ©èœãããã©ãããäœãèãã¯ãããŸããïŒ äžèšã§èšãã°ãRushã¯ããªããžããªå ã®ãã¹ãŠã®ããã±ãŒãžã®ãã¹ãŠã®äŸåé¢ä¿ã®ã¹ãŒããŒã»ãããå«ãåæããã±ãŒãžcommon / temp /package.jsonãäœæããŸãã 次ã«ã pnpmã䜿çšããŠããã®åæããã±ãŒãžã®åäžã®ã€ã³ã¹ããŒã«æäœãå®è¡ããŸãã ïŒPNPMã¯ãã·ã³ããªãã¯ãªã³ã¯ã䜿çšããŠãNPMã®ããªãŒæ§é ã®ä»£ããã«æåéå·¡åã°ã©ããäœæããŸããããã«ãããéè€ããã©ã€ãã©ãªã€ã³ã¹ã¿ã³ã¹ãæé€ãããŸãïŒã 次ã«ãRushã¯ããªããžããªå ã®ãããžã§ã¯ãããšã«common / tempã®äžã®é©åãªãã©ã«ããŒãæãã·ã³ããªãã¯ãªã³ã¯ã§æ§æãããŠããŸãã çµæã¯ãTypeScriptããã³æšæºã®NodeJS解決ã¢ã«ãŽãªãºã ãšå®å šã«äºææ§ããããŸãã ãªããžããªå šäœã«å¯ŸããŠ1ã€ã®ã·ã¥ãªã³ã¯ã©ãããã¡ã€ã«ãš1ã€ã®ããŒãžã§ã³ç®¡çåŒããããåããã±ãŒãžãç¬èªã®äŸåé¢ä¿ãæå®ã§ãããããéåžžã«é«éã§ãã
ãã®ã¢ãã«ã®tsconfig.json
ã¯ç¹å¥ãªãã®ã¯äœãå
¥ããŠããŸããã goto-definitionæ©èœã«ç¹å¥ãªTypeScriptæ§æãå¿
èŠãªå Žåã¯ãGitã«ä¿åããã®ã§ã¯ãªããã€ã³ã¹ããŒã«äžã«èªåçæããã®ãçæ³çã§ãã
@pgonzal Rushãžã®ãªã³ã¯ãããããšãïŒ ç§ã¯ãŸã ãããèŠãŠããŸããã§ããã ä»å€ãã§ãã¯ããŸãã
@RyanCavanaugh説æããããšãããããŸãã lernaã䜿çšããæåã®ã·ããªãªã¯ãç§ãã¡ãæã£ãŠããã·ããªãªã«æãè¿ããã®ã§ãã https://github.com/aurelia/uxã§æ°ãããããžã§ã¯ããµããŒãã䜿çšãããäŸãšããŠãTSãšlernaã䜿çšããUXãªããžããªã次ã«ç€ºã
@weswighamããªãã説æããŠããããšã¯ãç§ãã¡ã®ã·ããªãªã«ãåœãŠã¯ãŸãããã«
ã€ãŒã³ã¯ãŒã¯ã¹ããŒã¹ã®å Žåãã¢ãžã¥ãŒã«ã¯åã
ã®ããã±ãŒãžã®ãã£ã¬ã¯ããªã§ã·ã³ããªãã¯ãªã³ã¯ãããã®ã§ã¯ãªãããããã¬ãã«ã®ã¯ãŒã¯ã¹ããŒã¹node_modules
ã·ã³ããªãã¯ãªã³ã¯ãããããšã«æ³šæããŠãã ããã
ã¡ãªã¿ã«ããããïŒ './'ãŸã㯠'../'ïŒã§å§ãŸããªãåç §ã¯ãå°æ¥ã®ããã«äºçŽããå¿ èŠããããšæããŸãã ããŸãããã°ããããã¯ãååä»ãåç §ãã«ãªããçžå¯Ÿãã¹ãšããŠæ±ãããã®ã§ã¯ãªããã¢ã¯ãã£ããªã¢ãžã¥ãŒã«è§£æ±ºæŠç¥ãä»ããŠåŠçãããŸãã
@spionå¿
èŠã«å¿ããŠã path
以å€ã®ããããã£åã䜿çšããŸãïŒäŸïŒ "references": [ { "module": "@foo/baz" } ]
ïŒ; "bar"
ãš"./bar"
ãfiles
ã§ã¯åãããšãæå³ãã references
ã§ã¯ç°ãªãããšãæå³ãããšããæ··ä¹±ãåŒãèµ·ãããããããŸããã
以äžã§é²è¡äžã®ããã¥ã¡ã³ã/ããã°æçš¿äœæ¥ïŒãã£ãŒãããã¯ã«åºã¥ããŠãããç·šéããŸãïŒ
ãã®ã¹ã¬ããããã©ããŒããŠãã人ã¯ããã²è©ŠããŠã¿ãããšããå§ãããŸãã ç§ã¯çŸåšmonorepoã·ããªãªã«åãçµãã§ãããããã§æåŸã®ãã°/æ©èœãä¿®æ£ããŠããã®ã§ãããã«ã¬ã€ãã³ã¹ãå¿ èŠã§ãã
ãããžã§ã¯ãåç §ã¯TypeScript3.0ã®æ°æ©èœã§ãããTypeScriptããã°ã©ã ãããå°ããªéšåã«æ§é åããããšãã§ããŸãã
ãããè¡ãããšã§ããã«ãæéãå€§å¹ ã«æ¹åããã³ã³ããŒãã³ãéã®è«ççãªåé¢ãå®æœããã³ãŒããæ°ããããè¯ãæ¹æ³ã§ç·šæã§ããŸãã
ãŸãã tsc
æ°ããã¢ãŒãã§ãã--build
ãã©ã°ãå°å
¥ããŠããŸãããã®ã¢ãŒãã¯ããããžã§ã¯ãåç
§ãšé£æºããŠæ©èœããTypeScriptã®ãã«ããé«éåããŸãã
ããªãæ®éã®ããã°ã©ã ãèŠãŠããããžã§ã¯ãåç
§ãããã°ã©ã ã®æŽçã«ã©ã®ããã«åœ¹ç«ã€ããèŠãŠã¿ãŸãããã
converter
ãšunits
2ã€ã®ã¢ãžã¥ãŒã«ãšãããããã«å¯Ÿå¿ãããã¹ããã¡ã€ã«ãæã€ãããžã§ã¯ãããããšããŸãã
/src/converter.ts
/src/units.ts
/test/converter-tests.ts
/test/units-tests.ts
/tsconfig.json
ãã¹ããã¡ã€ã«ã¯å®è£ ãã¡ã€ã«ãã€ã³ããŒãããããã€ãã®ãã¹ããå®è¡ããŸãã
// converter-tests.ts
import * as converter from "../converter";
assert.areEqual(converter.celsiusToFahrenheit(0), 32);
以åã¯ãåäžã®tsconfigãã¡ã€ã«ã䜿çšããå Žåããã®æ§é ã¯æ±ãã«ãããã®ã§ããã
src
åºåãã©ã«ããŒåã«è¡šç€ºããã«ã test
ãšsrc
ãåæã«ãã«ãããããšã¯ã§ããŸããã§ãããè€æ°ã®tsconfigãã¡ã€ã«ã䜿çšããŠãããã®åé¡ã®ããã€ãã解決ããããšãã§ããŸãããæ°ããåé¡ãçºçããŸãã
tsc
2åå®è¡ããããšã«ãªããŸããtsc
2ååŒã³åºããšãèµ·åæéã®ãªãŒããŒããããå¢å ããŸãtsc -w
ã¯ãäžåºŠã«è€æ°ã®æ§æãã¡ã€ã«ã§å®è¡ããããšã¯ã§ããŸãããããžã§ã¯ãåç §ã¯ãããããã¹ãŠã®åé¡ããã®ä»ã®åé¡ã解決ã§ããŸãã
tsconfig.json
ãã¡ã€ã«ã«ã¯ãæ°ããæäžäœããããã£references
ãŸãã ããã¯ãåç
§ãããããžã§ã¯ããæå®ãããªããžã§ã¯ãã®é
åã§ãã
{
"compilerOptions": {
// The usual
},
"references": [
{ "path": "../src" }
]
}
ååç
§ã®path
ããããã£ã¯ã tsconfig.json
ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªããŸãã¯æ§æãã¡ã€ã«èªäœïŒä»»æã®ååãæå®ã§ããŸãïŒãæãããšãã§ããŸãã
ãããžã§ã¯ããåç §ãããšãæ°ããããšãèµ·ãããŸãã
.d.ts
ïŒãèªã¿èŸŒãŸããŸããoutFile
çæããå Žåãåºåãã¡ã€ã«.d.ts
ãã¡ã€ã«ã®å®£èšããã®ãããžã§ã¯ãã«è¡šç€ºãããŸããè€æ°ã®ãããžã§ã¯ãã«åå²ããããšã§ãã¿ã€ããã§ãã¯ãšã³ã³ãã€ã«ã®é床ãå€§å¹ ã«åäžããããšãã£ã¿ãŒã䜿çšããéã®ã¡ã¢ãªäœ¿çšéãåæžããããã°ã©ã ã®è«çã°ã«ãŒãåã®å®æœãåäžãããããšãã§ããŸãã
composite
åç
§ããããããžã§ã¯ãã§ã¯ãæ°ããcomposite
èšå®ãæå¹ã«ããå¿
èŠããããŸãã
ãã®èšå®ã¯ãTypeScriptãåç
§ããããããžã§ã¯ãã®åºåãèŠã€ããå Žæããã°ãã決å®ã§ããããã«ããããã«å¿
èŠã§ãã
composite
ãã©ã°ãæå¹ã«ãããšãããã€ãã®å€æŽããããŸãã
rootDir
èšå®ã¯ãæ瀺çã«èšå®ãããŠããªãå Žåãããã©ã«ãã§tsconfig
ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªã«ãªããŸããinclude
ãã¿ãŒã³ãšäžèŽãããã files
é
åã«ãªã¹ããããŠããå¿
èŠããããŸãã ãã®å¶çŽã«éåããå Žåã tsc
ã¯ã©ã®ãã¡ã€ã«ãæå®ãããªãã£ãããéç¥ããŸãdeclaration
ãªã³ã«ããå¿
èŠããããŸãdeclarationMaps
宣èšãœãŒã¹ãããã®ãµããŒããè¿œå ããŸããã
--declarationMap
ãæå¹ã«ãããšããå®çŸ©ã«ç§»åãããååã®å€æŽããªã©ã®ãšãã£ã¿ãŒæ©èœã䜿çšããŠããµããŒããããŠãããšãã£ã¿ãŒã§ãããžã§ã¯ãã®å¢çãè¶ããŠã³ãŒããééçã«ããã²ãŒãããã³ç·šéã§ããŸãã
prepend
ãšoutFile
prepend
ã®
"references": [
{ "path": "../utils", "prepend": true }
]
ãããžã§ã¯ãã®åã«ä»ãããšãçŸåšã®ãããžã§ã¯ãã®åºåã®äžã«ãããžã§ã¯ãã®åºåãå«ãŸããŸãã
ããã¯.js
ãã¡ã€ã«ãš.d.ts
ãã¡ã€ã«ã®äž¡æ¹ã§æ©èœãããœãŒã¹ããããã¡ã€ã«ãæ£ããåºåãããŸãã
tsc
ã¯ããã®ããã»ã¹ãå®è¡ããããã«ãã£ã¹ã¯äžã®æ¢åã®ãã¡ã€ã«ã®ã¿ã䜿çšãããããäžéšã®ãããžã§ã¯ãã®åºåãçµæã®ãã¡ã€ã«ã«è€æ°åååšãããããæ£ããåºåãã¡ã€ã«ãçæã§ããªããããžã§ã¯ããäœæããããšãã§ããŸãã ã
äŸãã°ïŒ
^ ^
/ \
B C
^ ^
\ /
D
ãã®ç¶æ³ã§ã¯ã D
ã®åºåã«A
ã³ããŒã2ã€å«ãŸãããããååç
§ã®å
é ã«ä»å ããªãããšãéèŠã§ããããã«ãããäºæããªãçµæãçããå¯èœæ§ããããŸãã
ãããžã§ã¯ãã®åç §ã«ã¯ã泚æãå¿ èŠãªããã€ãã®ãã¬ãŒããªãããããŸãã
äŸåãããžã§ã¯ãã䜿çšããŸãã®ã§.d.ts
ãããã®äŸåé¢ä¿ããæ§ç¯ãããŠãããã¡ã€ã«ã䜿çšãããšãã¹ããªã¢ã¹èŠãã«ãšãã£ã¿ã§ãããžã§ã¯ããããã²ãŒãããããšãã§ããŸãåã«ãããªãã¯ã©ã¡ããç¹å®ã®ãã«ãåºåã§ç¢ºèªãããããããã¯ããŒãã³ã°ããåŸããããžã§ã¯ãããã«ãããå¿
èŠããããŸããšã©ãŒã
ããã軜æžã§ããã¯ãã®èå°è£ã®.d.tsçæããã»ã¹ã«åãçµãã§ããŸãããä»ã®ãšãããã¯ããŒã³äœæåŸã«ãã«ãããå¿
èŠãããããšãéçºè
ã«éç¥ããããšããå§ãããŸãã
ããã«ãæ¢åã®ãã«ãã¯ãŒã¯ãããŒãšã®äºææ§ãç¶æããããã«ã tsc
ã¯ã --build
ã¹ã€ããã§åŒã³åºãããªãéããäŸåé¢ä¿ãèªåçã«ãã«ãããŸããã
--build
ã«ã€ããŠãã£ãšåŠã³ãŸãããã
åŸ
æã®æ©èœã¯ãTypeScriptãããžã§ã¯ãã®ã¹ããŒãã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã§ãã
3.0ã§ã¯ã --build
ãšãšãã«tsc
--build
ãã©ã°ã䜿çšã§ããŸãã
ããã¯äºå®äžã tsc
æ°ãããšã³ããªãã€ã³ãã§ãããåçŽãªã³ã³ãã€ã©ãšããããããã«ããªãŒã±ã¹ãã¬ãŒã¿ãŒã®ããã«åäœããŸãã
tsc --build
ïŒç¥ããŠtsc -b
ïŒãå®è¡ãããšã次ã®ããã«ãªããŸãã
tsc -b
ã«è€æ°ã®æ§æãã¡ã€ã«ãã¹ãæå®ã§ããŸãïŒäŸïŒ tsc -b src test
ïŒã
tsc -p
åæ§ã«ã tsconfig.json
ãšããååã®å Žåãæ§æãã¡ã€ã«åèªäœãæå®ããå¿
èŠã¯ãããŸããã
tsc -b
ã³ãã³ãã©ã€ã³æ§æãã¡ã€ã«ã¯ããã€ã§ãæå®ã§ããŸãã
> tsc -b # Build the tsconfig.json in the current directory
> tsc -b src # Build src/tsconfig.json
> tsc -b foo/release.tsconfig.json bar # Build foo/release.tsconfig.json and bar/tsconfig.json
ã³ãã³ãã©ã€ã³ã§æž¡ããã¡ã€ã«ã®é åºã«ã€ããŠå¿é
ããå¿
èŠã¯ãããŸãããäŸåé¢ä¿ãåžžã«æåã«æ§ç¯ãããããã«ã tsc
ã¯å¿
èŠã«å¿ããŠãã¡ã€ã«ã䞊ã¹æ¿ããŸãã
tsc -b
åºæã®ãã©ã°ãããã€ããããŸãïŒ
--verbose
ïŒäœãèµ·ãã£ãŠãããã説æããããã«è©³çŽ°ãªãã°ãåºåããŸãïŒä»ã®ãã©ã°ãšçµã¿åãããããšãã§ããŸãïŒ--dry
ïŒäœãè¡ããããã瀺ããŸãããå®éã«ã¯äœãæ§ç¯ããŸãã--clean
ïŒæå®ããããããžã§ã¯ãã®åºåãåé€ããŸãïŒ --dry
ãšçµã¿åãããããšãã§ããŸãïŒ--force
ïŒãã¹ãŠã®ãããžã§ã¯ããå€ããªã£ãŠãããã®ããã«æ¯ãèããŸã--watch
ïŒãŠã©ããã¢ãŒãïŒ --verbose
以å€ã®ãã©ã°ãšçµã¿åãããããšã¯ã§ããŸããïŒéåžžã tsc
ã¯ã noEmitOnError
ããªã³ã«ãªã£ãŠããªãéããæ§æãšã©ãŒãŸãã¯åãšã©ãŒãååšããå Žåã«åºåïŒ .js
ããã³.d.ts
ïŒãçæããŸãã
ã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã·ã¹ãã ã§ãããè¡ããšãéåžžã«æªãçµæã«ãªããŸããå€ãäŸåé¢ä¿ã®1ã€ã«æ°ãããšã©ãŒãçºçããå ŽåãåŸç¶ã®ãã«ãã§ã¯ææ°ã®ãããžã§ã¯ãã®ãã«ããã¹ããããããããããšã©ãŒã¯1åãã衚瀺ãããŸããã
ãã®ããã tsc -b
noEmitOnError
ã¯ããã¹ãŠã®ãããžã§ã¯ãã§
ãã«ãåºåïŒ .js
ã .d.ts
ã .d.ts.map
ãªã©ïŒããã§ãã¯ã€ã³ããå Žåãç¹å®ã®ãœãŒã¹ç®¡çã®åŸã«--force
ãã«ããå®è¡ããå¿
èŠãããå ŽåããããŸããœãŒã¹ç®¡çããŒã«ãããŒã«ã«ã³ããŒãšãªã¢ãŒãã³ããŒã®éã®ã¿ã€ã ããããä¿æãããã©ããã«å¿ããæäœã
msbuildãããžã§ã¯ããããå Žåã¯ãè¿œå ããŠãã«ãã¢ãŒããæå¹ã«ããããšãã§ããŸã
<TypeScriptBuildMode>true</TypeScriptBuildMode>
ããªãã®projãã¡ã€ã«ã«ã ããã«ãããèªåã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ããšã¯ãªãŒãã³ã°ãå¯èœã«ãªããŸãã
tsconfig.json
/ -p
åæ§ã«ãæ¢åã®TypeScriptãããžã§ã¯ãã®ããããã£ã¯å°éãããªãããšã«æ³šæããŠãã ããããã¹ãŠã®èšå®ã¯tsconfigãã¡ã€ã«ã䜿çšããŠç®¡çããå¿
èŠããããŸãã
äžéšã®ããŒã ã¯ãmsbuildããŒã¹ã®ã¯ãŒã¯ãããŒãèšå®ããŠãããtsconfigãã¡ã€ã«ã¯ããã¢ã«ãªã£ãŠãã管ç察象ãããžã§ã¯ããšåãæé»çãªã°ã©ãã®é åºã«ãªã£ãŠããŸãã
ãœãªã¥ãŒã·ã§ã³ããã®ãããªå Žåã¯ããããžã§ã¯ãåç
§ãšãšãã«msbuild
ãštsc -p
ãåŒãç¶ã䜿çšã§ããŸãã ãããã¯å®å
šã«çžäºéçšå¯èœã§ãã
tsconfig.json
ãã¡ã€ã«ãå€ãå Žåã¯ãéåžžãæ§æãã¡ã€ã«ã®ç¶æ¿ã䜿çšããŠãäžè¬çãªã³ã³ãã€ã©ãªãã·ã§ã³ãäžå
åããå¿
èŠããããŸãã
ãã®ããã«ããŠãè€æ°ã®ãã¡ã€ã«ãç·šéããªããŠãã1ã€ã®ãã¡ã€ã«ã®èšå®ãå€æŽã§ããŸãã
ãã1ã€ã®è¯ãæ¹æ³ã¯ããã¹ãŠã®ãªãŒãããŒããããžã§ã¯ãã«å¯ŸããŠreferences
ãå«ãããœãªã¥ãŒã·ã§ã³ã tsconfig.json
ãã¡ã€ã«ãçšæããããšã§ãã
ããã¯åçŽãªãšã³ããªãã€ã³ãã瀺ããŸãã ããšãã°ãTypeScriptãªããžããªã§ã¯ããã¹ãŠã®ãµããããžã§ã¯ããsrc/tsconfig.json
ãªã¹ãããŠããããã tsc -b src
ãå®è¡ããŠãã¹ãŠã®ãšã³ããã€ã³ããæ§ç¯ããŸãã
3.0以éã tsconfig.json
ãã¡ã€ã«ã«å°ãªããšã1ã€ã®reference
ãããå Žåã空ã®files
é
åãååšããããšã¯ãšã©ãŒã§ã¯ãªããªã£ãããšã«æ³šæããŠãã ããã
ãããã®ãã¿ãŒã³ã¯TypeScriptãªããžããªã§ç¢ºèªã§ããŸããéèŠãªäŸãšããŠsrc/tsconfig_base.json
ã src/tsconfig.json
ãããã³src/tsc/tsconfig.json
ã
äžè¬ã«ãçžå¯Ÿã¢ãžã¥ãŒã«ã䜿çšããŠãªããžããªã移è¡ããã®ã«ããã»ã©å€ãã¯å¿
èŠãããŸããã
æå®ããã芪ãã©ã«ããŒã®åãµããã£ã¬ã¯ããªã«tsconfig.json
ãã¡ã€ã«ãé
眮ããããã°ã©ã ã®ç®çã®ã¬ã€ã€ãŒã«äžèŽããããã«ãããã®æ§æãã¡ã€ã«ã«reference
ãè¿œå ããã ãã§ãã
outDir
ãåºåãã©ã«ããŒã®æ瀺çãªãµããã©ã«ããŒã«èšå®ãããã rootDir
ããã¹ãŠã®ãããžã§ã¯ããã©ã«ããŒã®å
±éã«ãŒãã«èšå®ããå¿
èŠããããŸãã
outFile
ã䜿çšããã³ã³ãã€ã«ã®ã¬ã€ã¢ãŠãã¯ãçžå¯Ÿãã¹ãããã»ã©éèŠã§ã¯ãªããããããæè»ã§ãã
èŠããŠããã¹ãããšã®1ã€ã¯ãéåžžããæåŸã®ããããžã§ã¯ããŸã§prepend
䜿çšããããªããšããããšã§ããããã«ããããã«ãæéãæ¹åãããç¹å®ã®ãã«ãã§å¿
èŠãªI / Oã®éãåæžãããŸãã
TypeScriptãªããžããªèªäœã¯ããã§ã®è¯ããªãã¡ã¬ã³ã¹ã§ã-ããã€ãã®ãã©ã€ãã©ãªããããžã§ã¯ããšããã€ãã®ããšã³ããã€ã³ãããããžã§ã¯ãããããŸãã ããšã³ããã€ã³ãããããžã§ã¯ãã¯å¯èœãªéãå°ããä¿ãããå¿
èŠãªã©ã€ãã©ãªã®ã¿ãåã蟌ã¿ãŸãã
TODOïŒãã£ãšå®éšããŠããããç解ããŠãã ããã ã©ãã·ã¥ãšã¬ã«ãã¯ãç§ãã¡ã®åŽã§ç°ãªãããšãæå³ããç°ãªãã¢ãã«ãæã£ãŠããããã§ã
ïŒ25164ã«é¢ãããã£ãŒãããã¯ãæ¢ããŠããŸã
@RyanCavanaughéåžžã«çŽ æŽãããèšäºãšåªããæ©èœã¯ãç¹ã«è©ŠããŠã¿ããšæ¬åœã«çŽ æŽãããã§ãããã 倧ããªãããžã§ã¯ããæ§æãã¡ã€ã«åç §ã䜿çšããŠãµããããžã§ã¯ãã«ç·šæããã®ã«äœæ¥ãè²»ãããåŸã
ç§ã¯ããã€ãã®ã¡ã¢ããããŸãïŒ
gulp watch
ãštsc -b -w
ã䞊è¡ããŠå®è¡ããå¿
èŠããããŸããïŒ@vvs monorepoã¯ãéåžžRushãLernaãªã©ã®ããŒã«ã«ãã£ãŠç®¡çãããNPMããã±ãŒãžã®ã³ã¬ã¯ã·ã§ã³ã§ãã
gulpã䜿çšããŠããå Žåã¯ããããžã§ã¯ãåç §ããã€ãã£ãã«ç解ããããŒããŒã䜿çšããŠãæé«ã®ãšã¯ã¹ããªãšã³ã¹ãåŸãããšãã§ããŸãã @rbucktonã¯ãå éšã§gulpfileã䜿çšããŠããéçºè ããããããããã§ããã€ãã®äœæ¥ãè¡ããŸããã å€å圌ã¯ããã«è¯ããã¿ãŒã³ãã©ã®ããã«èŠããããæ€èšããããšãã§ããŸã
@RyanCavanaughããã¯ããããã ã ç§ã¯ã¬ã«ãã®ã¬ã€ãã³ã¹ã«éåžžã«èå³ããããŸã:)
@RyanCavanaughããã¯çŽ æŽãããèŠããŸããç§ã¯çŸåšç§ãã¡ã®lernamonorepoã§ãããè©Šãããšã«åãçµãã§ããŸãã
ããªãã®èšäºã§ç§ã«äžæ確ãªããšã¯prepend
ãªãã·ã§ã³ã ãã§ããã ã©ã®ãããªåé¡ã«å¯ŸåŠããŠããã®ããã©ã®ãããªç¶æ³ã§äœ¿çšãããã®ãã䜿çšããªããšã©ããªãã®ããããããããŸããã§ããã
ããã¯ãããïŒ ç§ã¯ts-loaderãšé¢é£ãããžã§ã¯ãã«åãçµãã§ããŸãã TypeScriptã®LanguageServiceHost
/ WatchHost
ã䜿çšãããããžã§ã¯ãã§ããããµããŒãããã«ã¯ãå€æŽãå¿
èŠã«ãªãå¯èœæ§ããããŸããïŒ
ïŒç§ãèšã£ãŠããããšã®äŸã«ã€ããŠã¯ãhttpsïŒ//github.com/TypeStrong/ts-loader/blob/master/src/servicesHost.tsãåç §ããŠãã ãããïŒ
ãããããªãããã¹ãŠã®ã¬ã€ãã³ã¹/ PRã¯ãããããããšã«åãåãããŸãïŒ å®éããããwebpackã®äžçã§ãã¹ããããå Žåã¯ãããããµããŒãããããŒãžã§ã³ã®ts-loaderã®ããã·ã¥ãåãã§ãæäŒãããŸãã
ãã¡ãããããããããŸãããããªããããã¯ããã«è¯ãã§ãïŒsmileïŒ
ãããä»äºïŒ
@yortus @EisenbergEffect https://github.com/RyanCavanaugh/learn-aã«ãµã³ãã«ã®lernaãªããžããªãèšå®ãããããæ©èœãããããã«è¡ã£ãæé ã®æŠèŠãREADMEã§ç€ºããŸããã
ç§ãæ£ããç解ããŠããå Žåããã¹ãŠïŒXãšãã®ãã¹ãŠã®äŸåé¢ä¿ããã³æšç§»çãªäŸåé¢ä¿ïŒãææ°ã®å Žåã tsc -b X
ã¯äœãããŸãããïŒ åç
§ã®ãªãåã
ã®ãããžã§ã¯ãã®-b
ãã©ã°ããªããŠãããããååŸã§ãããã©ããçåã«æã£ãŠããŸããïŒ ïŒãã¡ããããã®å Žåã®äŸåé¢ä¿ã¯ãããŸããïŒ
ããã¯ããªãã¯ãŒã«ã§ãã ç§ã¯Lernaããã®ãããªæ§æã§äœ¿çšããåŸåããããŸãïŒã¢ãã¬ããžããªãæ©èœããšã«åé¢ããããïŒã ç§ã¯ãããåæ§ã«æ©èœãããšæããŸãã
{{
"lerna"ïŒ "2.11.0"ã
ãããã±ãŒãžãïŒ[
"ããã±ãŒãž/ã³ã³ããŒãã³ã/ "ã"ããã±ãŒãž/ã©ã€ãã©ãª/ "ã
"ããã±ãŒãž/ãã¬ãŒã ã¯ãŒã¯/ "ã"ããã±ãŒãž/ã¢ããªã±ãŒã·ã§ã³/ "ã
ãããã±ãŒãž/ããŒã«/ *ã
]ã
ãããŒãžã§ã³ãïŒã0.0.0ã
}
ã ããããã¯typescript@next
å©çšã§ããŸããïŒ
ãããyarnã¯ãŒã¯ã¹ããŒã¹ãªããžããªã§ãã¹ãããŸãã ãŸã ã¯ãŒã¯ã¹ããŒã¹ããµããŒãããŠããªãããã€ãã®ã¢ãžã¥ãŒã«ã«ã¯nohoist
ã䜿çšããå¿
èŠããããããã¯ãŒã¯ã¹ããŒã¹ãã©ã®ããã«åŠçããããã確èªãããšäŸ¿å©ã§ãã
@RyanCavanaughç§ã¯ä»å€ââãã¹ãã©ã³ã®ããã«ã¬ããåããŸããã ç§ãæ±ããŠããããã€ãã®åé¡ãå ±åããããã«ãã¬ãã§åé¡ãéããŸããã ããããŸãšããŠãããŠããããšãã ããã«äœ¿ããã®ã楜ãã¿ã«ããŠããŸãã
æ¬åœã«é¢çœãã§ãïŒ çŸåšãç§ã®äŒç€Ÿã§ã¯ã mtscãšããç¬èªã®ããŒã«ã䜿çšããŠãè€æ°ã®ãããžã§ã¯ãã®ç£èŠã¢ãŒããåæã«ãµããŒãããŠããŸãã åããªããžããªã§ã³ã³ãã€ã«ããŠç£èŠããå¿ èŠããããããžã§ã¯ããçŽ5ã€ãããŸãã
ãããžã§ã¯ãã«ã¯ã次ã®ãããªããŸããŸãªæ§æããããŸãã ECMAã¿ãŒã²ãã£ã³ã°ïŒes5ães6ïŒãã¿ã€ãïŒnodeãjestãDOMãªã©ïŒãemitïŒwebpackã䜿çšãããã®ãããã°ãjsèªäœã«ã³ã³ãã€ã«ãããã®ããããŸãïŒã ãããã¯ãã¹ãŠ1ã€ã®ããšãå ±æããããã¯tslintãã©ã°ã€ã³ã§ãããæ®ãã¯ãã¹ãŠç°ãªãå¯èœæ§ããããŸãã ç§ã®ããŒã«ã¯ããããžã§ã¯ãã®ã³ã³ãã€ã«åŸã«tslintãå®è¡ããŸãïŒãããžã§ã¯ãããšã«å®è¡ãããtslintãå®äºããåã«ãããžã§ã¯ããåã³ã³ãã€ã«ããããšåæ¢ããŸãïŒã
çŸåšã®ææ¡ã«é¢ããç§ã®äž»ãªæžå¿µã¯ãã©ã®ãããžã§ã¯ããã©ã®ãªãœãŒã¹ãå ±æããŠããããèšãããšãã§ããªããšããããšã§ãã ãµãŒããŒãšã¯ã©ã€ã¢ã³ããããžã§ã¯ãããããã©ã¡ããç¹å¥ãªãŠãŒãã£ãªãã£ãã©ã«ããŒã䜿çšããŠããŸãããã³ã³ãã€ã«ãšã©ãŒã2åçºçããããšã¯æãŸãããããŸããã ããããããã¯ãã£ã«ã¿ãŒã§ä¿®æ£ã§ããã®ã§ã倧ããããšã§ã¯ãããŸãã:)
lerna monorepoã§æ°ãã--build
ã¢ãŒããè©ŠããŸãããããã¯ãçŸåš17ã®çžäºäŸåããã±ãŒãžã§æ§æãããŠããŸãã ãã¹ãŠãæ©èœãããŸã§ã«ã¯ãã°ããæéãããããŸããããä»ã§ã¯ãã¹ãŠæ©èœãã段éçã«æ§ç¯ã§ããããšã¯ç§ãã¡ã«ãšã£ãŠå€§ããªæ¹åã§ãã
以äžã«èª¬æããããã€ãã®åé¡ãçºçããŸããã ãããTSããŒã ã«ãšã£ãŠæçãªãã£ãŒãããã¯ã§ãããä»ã®äººããããžã§ã¯ãã§--build
ã¢ãŒããæ©èœãããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
tsc --build
ã¢ãŒãã®ãã£ãŒãããã¯ãã¹ãŠã®ãã«ãã®ãã¹ãŠã®ããã±ãŒãžã«å¯ŸããŠãã®ã¡ââãã»ãŒãžã衚瀺ããããããäœãå€æŽãããŠããªããŠãããã¹ãŠã®ãã«ããå®å
šãªåãã«ãã«ãªããŸããã @RyanCavanaughãïŒ25281ã§ããããã§ã«ä¿®æ£ããŠããããšã«æ°ã¥ããã®ã§ãæ¯æ©20180628
以éã«æŽæ°ããŠãåé¡ã¯ãªããªããŸããã 次ã®åé¡ã¯ãå°ãªããšãæ¯æ©20180628
æŽæ°ããããšãåæãšããŠããŸãã
ç·šéïŒïŒ25337ã§å ±åãããŸããã
ãã®åé¡ãåçŸããã«ã¯ã @ RyanCavanaughã®learn-a
ãµã³ãã«ãªããžããªã圌ã®æ瀺ã«åŸã£ãŠèšå®ããŸãã tsc -b packages --verbose
ãå®è¡ããŠããã¹ãŠãæåã«æ§ç¯ãããããšã確èªããŸãã ããã§ã pkg1/src/index.ts
1è¡ç®ãimport {} from "./foo";
ããŠä¿åããŸãã tsc -b packages --verbose
ããäžåºŠå®è¡ããŸãã pkg1
ãpkg2
ã®ãœãŒã¹ãå£ãããã«å€æŽããããšããŠãã pkg2
ã®ãã«ãã¯ã¹ããããããŸãã ããã§ã pkg2/src/index.ts
èµ€ãæ³¢ç·ã衚瀺ãããŸãã tsc -b packages --force
å床ãã«ããããšããã«ããšã©ãŒã衚瀺ãããŸãã 次ã®åé¡ã¯ããããåé¿ããããã«--force
ãã«ãããããšãåæãšããŠããŸãã
.d.ts
ãã¡ã€ã«ã«ãããããŠã³ã¹ããªãŒã ããã±ãŒãžã§ãéè€èå¥åããã«ããšã©ãŒãçºçããŸãç·šéïŒïŒ25338ã§å ±åãããŸããã
ãã®åé¡ãåçŸããã«ã¯ã @ RyanCavanaughã®learn-a
ãµã³ãã«ãªããžããªã圌ã®æ瀺ã«åŸã£ãŠèšå®ããŸãã 次ã«ã lerna add @types/node
ãå®è¡ããŠã3ã€ã®ããã±ãŒãžãã¹ãŠã«Node.jsã¿ã€ãã³ã°ãè¿œå ããŸãã tsc -b packages --force
ãå®è¡ããŠãæ£åžžã«ãã«ããããããšã確èªããŸãã 次ã«ã次ã®ã³ãŒããpkg1/src/index.ts
è¿œå ããŸãã
// CASE1 - no build errors in pkg1, but 'duplicate identifier' build errors in pkg2
// import {parse} from 'url';
// export const bar = () => parse('bar');
// CASE2 - no build errors in pkg1 or in downstream packages
// import {parse, UrlWithStringQuery} from 'url';
// export const bar = (): UrlWithStringQuery => parse('bar');
// CASE3 - no build errors in pkg1 or in downstream packages
// export declare const bar: () => import("url").UrlWithStringQuery;
// CASE4 - no build errors in pkg1, but 'duplicate identifier' build errors in pkg2
// import {parse} from 'url';
// type UrlWithStringQuery = import("url").UrlWithStringQuery;
// export const bar = (): UrlWithStringQuery => parse('bar');
äžåºŠã«1ã€ã®ã±ãŒã¹ã®ã³ã¡ã³ãã解é€ãã tsc -b packages --force
ãŸãã ã±ãŒã¹1ãš4ã¯ã pkg2
ã§å€§éã®ãã«ããšã©ãŒãåŒãèµ·ãããŸãã ã±ãŒã¹2ãš3ã§ã¯ããã«ããšã©ãŒã¯ãããŸããã ã±ãŒã¹1ãš4ãšã®éèŠãªéãã¯ãçæãããpkg1/lib/index.d.ts
ã®æåã®è¡ã®ããã§ãã
/// <reference path="../node_modules/@types/node/index.d.ts" />
ã±ãŒã¹2ãš3ã¯ããã®è¡ãçæããŸããã ã±ãŒã¹1ãš4ã§pkg2
ãäœæããããšãç°ãªããã¹ã«@types/node
宣èšã®2ã€ã®åäžã®ã³ããŒãå«ãŸããããããéè€èå¥åããšã©ãŒãçºçããŸãã
ã±ãŒã¹2ãš3ãæ©èœãããããããããããã¯ä»æ§ã«ãããã®ã§ãã ããããããã¯ããªãæ··ä¹±ããŠããããã§ãã pkg1
ã«ã¯ãããã4ã€ã®ã±ãŒã¹ã®ãããã«ã€ããŠããã«ããšã©ãŒãèŠåã¯ãããŸããããããŠã³ã¹ããªãŒã ãã«ãã®åäœã¯ããšã¯ã¹ããŒãããã宣èšã®æ£ç¢ºãªã¹ã¿ã€ã«ã«éåžžã«ææã§ãã ïŒaïŒ pkg1
ã¯ã±ãŒã¹1ãš4ã§ãšã©ãŒã«ãªããã ïŒbïŒ 4ã€ã®ã±ãŒã¹ãã¹ãŠãåãããŠã³ã¹ããªãŒã ãã«ãåäœãæã€ãã ïŒcïŒ TSããŒã ããã®æ確ãªã¬ã€ãã³ã¹ãããã¯ãã§ãããã®åé¡ãåé¿ããããã®å®£èšã®æžãæ¹ã
.d.ts
ãã¡ã€ã«ã®import
ã¿ã€ãã®åé¡17ããã±ãŒãžã®monorepoã§ãã«ãã¢ãŒããåäœãããããšãããšãã«ãçæããã.d.ts
ãã¡ã€ã«ã®import
ã¿ã€ãã®çžå¯Ÿãã¹ã«ãã£ãŠåŒãèµ·ããããããã€ãã®ãã«ããšã©ãŒãåŠçããŸããã ç§ã¯ã€ãã«ã¢ãžã¥ãŒã«ã®å·»ãäžãã«é¢é£ããåé¡ã解決ããŸããã ã€ãŸããyarnã¯ãŒã¯ã¹ããŒã¹ã䜿çšããå Žåãã€ã³ã¹ããŒã«ãããŠãããã¹ãŠã®ã¢ãžã¥ãŒã«ã¯ãmonorepoå
ã®ãã¹ãŠã®ããã±ãŒãžã®ã·ã³ããªãã¯ãªã³ã¯ãå«ããŠãmonorepo-root node_modules
ãã£ã¬ã¯ããªã«æã¡äžããããŸãã lerna.json
ã®packages
ããããã£ã䜿çšããããã«monorepoãå€æŽããŸãããããã«ããã lerna
ã¯ç¬èªã®éãã€ã¹ãããŒãã¹ãã©ããã¢ã«ãŽãªãºã ã䜿çšããããã«ãªããåé¡ã解決ããŸããã ãšã«ãããé
ãã§ãããããè¯ã/ããå®å
šãªã¢ãããŒãã§ãã
TSãã¢ãžã¥ãŒã«ã§æã¡äžããããã»ããã¢ããããµããŒãããã€ãããã©ããããããªãã®ã§ãç§ã¯ééããåé¡ã®åçŸãéçºããŠããŸããããèå³ãããã°äœæãè©Šã¿ãããšãã§ããŸãã ç§ã¯ãã®åé¡ã¯ãããã€ãã®ãããã¬ãã«ã®äž¡æ¹ãçµç±ããŠãåãã¿ã€ããååŸããŠããæ§ç¯ããããšãããããªããšæãpackages
ïŒTSconfigã®èšå®ã©ããïŒãã£ã¬ã¯ããªãšãããã¬ãã«ã®node_modules
ããšã«ãã£ã¬ã¯ããªïŒ import
ã¯ãçæããã.d.ts
ãã¡ã€ã«ãå
¥åããŸãïŒã ããã¯æ§é åãåå ã§æ©èœããå ŽåããããŸããããšã¯ã¹ããŒããããäžæã®ã·ã³ãã«ãªã©ã§ã¯å€±æããŸãã
䜿çšã¬ã«ãã«monorepoãèšå®ãããšãåºæ¬çã«ã¯åããããªãã®çœ®ãå¿
èŠã"packages": ["packages/*"]
ã§lerna.json
ã Lernaã¯ãglobstarsãå±éããŠæ£ç¢ºãªããã±ãŒãžãªã¹ããäœæãã次ã«åããã±ãŒãžã®package.json
宣èšãããŠããäŸåé¢ä¿ã調ã¹ãŠæ£ç¢ºãªäŸåé¢ä¿ã°ã©ããäœæããŸãã ããã±ãŒãžãšäŸåé¢ä¿ã¯èªç±ã«è¿œå ããã³åé€ã§ãã lerna
ã¯ãã®æ§æã«è§Šããããšãªãç¶æãããŸãã
TypeScript --build
ã¢ãŒãã«ã¯ãããå°ãã»ã¬ã¢ããŒãå«ãŸããŸãã ã°ãããã¿ãŒã³ã¯èªèãããªãããããã¹ãŠã®ããã±ãŒãžã@RyanCavanaughã®learn-a
ãµã³ãã«ãªããžããªã«æ瀺çã«ãªã¹ãããŠç¶æããå¿
èŠããããŸãïŒããšãã°ã packages/tsconfig.json
ïŒã ãã«ãã¢ãŒãã¯package.json
äŸåé¢ä¿ã調ã¹ãªãããããã¹ãŠã®ããã±ãŒãžã¯ãäŸåããä»ã®ããã±ãŒãžã®ãªã¹ããpackage.json
ãã¡ã€ã«ïŒ "dependencies"
ïŒãšäž¡æ¹ã§ç¶æããå¿
èŠããããŸããããã¯tsconfig.json
ãã¡ã€ã«ã§ãïŒ "references"
ïŒã
ããã¯å°ããªäžäŸ¿ã§ããã lerna's
ã¢ãããŒããšæ¯èŒããŠãªã°ãããŒã«ãç®ç«ã€ããšãããã£ãã®ã§ãããã«å«ããŸãã
tsc
ã¯ã©ãã·ã¥ç·šéïŒïŒ25339ã§å ±åãããŸããã
ãã®åé¡ãåçŸããã«ã¯ã @ RyanCavanaughã®learn-a
ãµã³ãã«ãªããžããªã圌ã®æ瀺ã«åŸã£ãŠèšå®ããŸãã 次ã«ã lerna add @types/multer
ãå®è¡ããŠã3ã€ã®ããã±ãŒãžãã¹ãŠã«multer
ã¿ã€ãã³ã°ãè¿œå ããŸãã tsc -b packages --force
ãå®è¡ããŠãæ£åžžã«ãã«ããããããšã確èªããŸãã 次ã«ã次ã®è¡ãpkg1/src/index.ts
è¿œå ããŸãã
export {Options} from 'multer';
tsc -b packages --force
ããäžåºŠå®è¡ããŸãã ã¢ãµãŒã·ã§ã³ã«éåãããããã³ã³ãã€ã©ãã¯ã©ãã·ã¥ããŸãã ã¹ã¿ãã¯ãã¬ãŒã¹ãšã¢ãµãŒã·ã§ã³ãç°¡åã«èŠãŠã¿ãŸããããããã¯Express
åå空éã®ã°ããŒãã«ãªæ¡åŒµãšé¢ä¿ãããããã§ãã
ãã£ãŒãããã¯ãããããšã@yortus ã é Œãã«æè¬ããŸãã 3ã®å Žåã¯ã httpsïŒ//github.com/Microsoft/TypeScript/issues/25278ã ãšæã
4ã®å Žåãç§ã¯æŠå¿µãšããŠã®ã¢ãžã¥ãŒã«å·»ãäžãã«ç²ŸéããŠããŸããã 詳现ã説æããããåçŸãå ±æãããã§ããŸããïŒ
@mhegazy lernaãšyarnã䜿çšããå€ãã®äººãã¯ãŒã¯ã¹ããŒã¹ã䜿çšããŠããŸãïŒç§ãå«ãïŒã 詳现ã¯ãã¡ãïŒ https ïŒ
ç§ã¯çŸåšãyarnã¯ãŒã¯ã¹ããŒã¹ãlernaãæ¡åŒµtsconfigsã䜿çšããŠããŸããããã§ãããŒã¹tsconfigã¯ã root/node_modules
äžã«ãããã€ã¹ãã¢ãžã¥ãŒã«ãæã€ãã¹ãŠã®ããã±ãŒãžã§å
±æãããpaths
宣èšããŸãã yarn
ãšmonorepo
ãèãããšãããããæ©èœã®ç®çã§ããããã workspaces
ã ãšæããŸã-䜿ãããããéè€ãæžããããã§ãã ãã®å€æŽã«ãããããŒã¹ã®tsconfigã§å®£èšãããé·ããŠèŠçãªpaths
ãç°¡åã«åé€ãããããšãæåŸ
ããŠããŸããã
ãããç§ãã¡ã®ã«ãŒãmonorepotsconfigã®ãµã³ãã«ã§ãïŒãããå©ãã«ãªããªãïŒïŒ
{
"extends": "./packages/build/tsconfig.base.json",
"compilerOptions": {
"baseUrl": "./packages",
"paths": {
"@alienfast/build/*": ["./build/src/*"],
"@alienfast/common-node/*": ["./common-node/src/*"],
"@alienfast/common/*": ["./common/src/*"],
"@alienfast/concepts/*": ["./concepts/src/*"],
"@alienfast/faas/*": ["./faas/src/*"],
"@alienfast/math/*": ["./math/src/*"],
"@alienfast/notifications/*": ["./notifications/src/*"],
"@alienfast/ui/*": ["./ui/src/*"],
"@alienfast/build": ["./build/src"],
"@alienfast/common-node": ["./common-node/src"],
"@alienfast/common": ["./common/src"],
"@alienfast/concepts": ["./concepts/src"],
"@alienfast/faas": ["./faas/src"],
"@alienfast/math": ["./math/src"],
"@alienfast/notifications": ["./notifications/src"],
"@alienfast/ui": ["./ui/src"],
}
},
"include": ["./typings/**/*", "./packages/*/src/**/*"],
"exclude": ["node_modules", "./packages/*/node_modules"]
}
ãµã³ãã«ã®ãã©ãŒã¯ã§ã·ã§ãããæ®ããŸãïŒ
https://github.com/RyanCavanaugh/learn-a
ã€ãŒã³ã¯ãŒã¯ã¹ããŒã¹ã䜿çšãã@RyanCavanaughã®ãªããžããªãžã®ããŒãžãããªãPRã¯
https://github.com/RyanCavanaugh/learn-a/pull/3/files
ãŸãã Jupyterlabã§ã¯ãã¬ã«ããšã€ãŒã³ã䜿çšããã¢ãžã¥ãŒã«å·»ãäžãã䜿çšããŸããã åºæ¬çã«ãã€ã³ã¹ããŒã«ãããŠããäŸåé¢ä¿ããã¹ãŠã®ããã±ãŒãžéã§å ±æã§ããããããã¡ã€ã«ã·ã¹ãã ã®ã«ãŒããããžã§ã¯ãã«1åã ãååšããŸãã
ã¯ãŒã¯ã¹ããŒã¹ã¯ããã¹ãŠã®ããã±ãŒãžéã§link
ã³ãã³ãã䜿çšããŠçžäºã«ã¢ã¯ã»ã¹ã§ããããã«ããïŒãŸãã¯å°ãªããšãäŸåé¢ä¿ã«ã¢ã¯ã»ã¹ã§ããããã«ããïŒãããå°ãã¯ãªãŒã³ã§ãããšç解ããŠããŸãã
äžèšã®ããã«ãã¢ãžã¥ãŒã«ã®å·»ãäžãã«ããããã¹ãŠã®äŸåé¢ä¿ãã«ãŒãnode_modules
ãã£ã¬ã¯ããªã«ç§»åããŸãã ããã¯ãããŒãã¢ãžã¥ãŒã«ã®è§£æ±ºãåžžã«ãã£ã¬ã¯ããªããªãŒããã©ããŒã¹ããå¿
èŠãªã¢ãžã¥ãŒã«ãèŠã€ãããŸã§ãã¹ãŠã®node_modules
ãã£ã¬ã¯ããªãæ€çŽ¢ãããšããäºå®ãå©çšããŠããŸãã ã¢ããªããžããªå
ã®åã
ã®ã¢ãžã¥ãŒã«ã¯ããã®ã«ãŒãnode_modules
ã·ã³ããªãã¯ãªã³ã¯ããããã¹ãŠãæ£åžžã«æ©èœããŸãã 糞ã®ããã°æçš¿ã¯ããããç§ãã§ãããããããããããã説æããŠããŸãã
å·»ãäžããçºçããä¿èšŒã¯ãããŸããã åãããã±ãŒãžã®ããŒãžã§ã³ãäžèŽããªãå Žåããããã¯åŒãäžããããŸããã ãŸããæ¢åã®ããŒã«ã®å€ãã¯ã node_modules
ãã©ãã«ããããæ³å®ããŠããããããŒãã¢ãžã¥ãŒã«ã®è§£æ±ºã«æ£ããåŸããªããããå·»ãäžãããµããŒãããŠããŸããã ãã®ãããç¹å®ã®ã¢ãžã¥ãŒã«ãŸãã¯äŸåé¢ä¿ã®å·»ãäžããç¡å¹ã«ã§ããnohoist
èšå®ããããŸãã
以åã®ãã£ãŒãããã¯ã«6çªç®ã®é
ç®ãè¿œå ããŸããã tsc
説æãããŠããã·ããªãªã§ã¯ã
@mhegazyã¢ã€ãã 3ãïŒ25278ã«é¢é£ããŠãããã©ããã¯
äžèšã®ããã«ãã¢ãžã¥ãŒã«ã®å·»ãäžãã«ããããã¹ãŠã®äŸåé¢ä¿ãã«ãŒãnode_modulesãã£ã¬ã¯ããªã«ç§»åããŸãã ããã¯ãããŒãã¢ãžã¥ãŒã«ã®è§£æ±ºãåžžã«ãã£ã¬ã¯ããªããªãŒããã©ããŒã¹ããå¿ èŠãªã¢ãžã¥ãŒã«ãèŠã€ãããŸã§ãã¹ãŠã®node_modulesãã£ã¬ã¯ããªãæ€çŽ¢ãããšããäºå®ãå©çšããŠããŸãã
ãšããã§ããã®ã¢ãã«ã«ã¯æ¬ ç¹ããããŸããããã¯ããããžã§ã¯ããpackage.jsonãã¡ã€ã«ã§æ瀺çã«å®£èšãããŠããªãäŸåé¢ä¿ãã€ã³ããŒãã§ããããã¡ã³ãã äŸåé¢ä¿ãã«ã€ãªããããšã§ãã ã©ã€ãã©ãªãå ¬éãããšãïŒ1ïŒãã¹ã/æåŸ ããããã®ãšã¯ç°ãªãããŒãžã§ã³ã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããããŸãã¯ïŒ2ïŒã€ã³ã¹ããŒã«ãããŠããªãç¡é¢ä¿ã®ãããžã§ã¯ãããåŒãäžããããããã«äŸåé¢ä¿ãå®å šã«å€±ããããªã©ã®åé¡ãçºçããå¯èœæ§ããããŸããã®æèã§ã PNPMãšRushã¯ã©ã¡ããããã¡ã³ãã ã®äŸåé¢ä¿ããä¿è·ããããšãç®çãšããã¢ãŒããã¯ãã£äžã®éžæè¢ããããŸãã
tsc --build
ã«ã€ããŠäžè¬çãªè³ªåããããŸãïŒTypeScriptã³ã³ãã€ã©ã¯ãã¢ããªããžããªå
ã®ãããžã§ã¯ãã®ãã«ãã調æŽãã圹å²ãåŒãç¶ãããšãç®æããŠããŸããïŒ éåžžãããŒã«ãã§ãŒã³ã«ã¯ã次ã®ãããªã¿ã¹ã¯ã®ãã€ãã©ã€ã³å
šäœãå«ãŸããŸãã
éåžžãGulpãWebpackãªã©ã®ã·ã¹ãã ããã®ãã€ãã©ã€ã³ã管çããã³ã³ãã€ã©ãŒã¯ãã§ãŒã³ã®éäžã®1ã€ã®ã¹ãããã«ãããŸããã å Žåã«ãã£ãŠã¯ãã»ã«ã³ããªããŒã«ãå¥ã®æ¹æ³ã§ãã«ããå®è¡ããããšããããŸãïŒäŸïŒ jest --watch
Jest + ts-jestïŒã
tsc
ã¯ããããã®ãã®èªäœã管çããããšãç®çãšããŠããŸããïŒ ããã§ãªãå Žåã¯ãåŸæ¥ã®ãã«ããªãŒã±ã¹ãã¬ãŒã¿ãŒãäŸåé¢ä¿ã°ã©ãèªäœã解決ããæ¹æ³ããããŸããïŒããšãã°ãåãããžã§ã¯ããã©ã«ããŒã§æ£ããé åºã§tscãç¹°ãè¿ãåŒã³åºãæ¹æ³ã¯ãããŸããïŒååŠçãæŽæ°ãããåŸïŒïŒ
ãŸãã¯ãã¢ããªããžããªå šäœã1åã®ãã¹ã§åŠçããèšèšã®å ŽåïŒä»æ¥ã¯åãããžã§ã¯ããåå¥ã®NodeJããã»ã¹ã§ãã«ãããŸãïŒãä»ã®ãã«ãã¿ã¹ã¯ãã©ã®ããã«åå ãããã«ã€ããŠãèå³ããããŸããããšãã°ãWebpackãå®è¡ããŸããïŒãã¹ãŠã®ãããžã§ã¯ããäžåºŠã«ïŒ ïŒéå»ã«ã¯ãã¡ã¢ãªäžè¶³ã®åé¡ãçºçããŠããŸãããïŒãã«ãããã»ã¹ã®åæå®è¡æ§ãå©çšããæ©èœã倱ãããŸããïŒ
ãšããã§ããããã¯æ¹å€ã§ã¯ãããŸããã å šäœåãšäœ¿çšç®çãç解ããããšããŠããŸãã
@pgonzalããã§ãããçŸå®äžçã®ã¢ãã¬ããæ§ç¯ããã«ã¯ãtsc以å€ã®éšåããããããããŸãã ç§ãã¡ã®lernamonorepoã«ã€ããŠã¯ã次ã®ã¢ãããŒããæ¡çšããŸããã
prebuild
ã¹ã¯ãªããããã³/ãŸãã¯package.json
postbuild
ã¹ã¯ãªãããå®çŸ©ããŸãã ãããã«ã¯ããã«ãã®tsc以å€ã®åŽé¢ãå«ãŸããŠããŸããpackage.json
ã«ã¯ã次ã®ã¹ã¯ãªããããããŸãã
"prebuild": "lerna run prebuild",
"build": "tsc --build monorepo.tsconfig.json --verbose",
"postbuild": "lerna run postbuild",
yarn build
ãå®è¡ãããšãããããå®çŸ©ããåããã±ãŒãžã«å¯ŸããŠprebuild
ã¹ã¯ãªãããå®è¡ããã次ã«tsc --build
ã¹ããããå®è¡ããã次ã«ãã¹ãŠã®postbuild
ã¹ã¯ãªããã ïŒNPM糞ã®äž¡æ¹ã«ãããŠæ
£äŸã«ãããå®è¡npm run foo
ç¥åãã§ããnpm run prefoo && npm run foo && npm run postfoo
ïŒãjest --watch
ãŸãã¯webpack-dev-server
ã©ã®ããã«åŠçããŸããïŒ ããšãã°ããœãŒã¹ãã¡ã€ã«ãå€æŽãããå Žåããã«ãå/ãã«ãåŸã®æé ã¯å床å®è¡ãããŸããïŒ
ããã¯ts-node
ããã³é¢é£ããã¯ãŒã¯ãããŒã«åœ±é¿ãåãŒããŸããïŒ "start": "ts-node ./src/app.ts"
ã"start:debug": "node -r ts-node/register --inspect-brk ./src/app.ts"
ãªã©ãäžéšã®ãã«ããŒã¢ããªã¯TypeScriptãããçŽæ¥ãå®è¡ãããŸãã
ïŒ25355ã§ãã«ãã¢ãŒãã«é¢ããå¥ã®åé¡ãå ±åããŸããã
ãããŸã§ã®ãã¹ãŠã®çŽ æŽããããã£ãŒãããã¯ãšèª¿æ»ã«æè¬ããŸãã æéããããŠè©ŠããŠã¿ãŠãã¿ã€ã€ã蹎ã£ãŠãããçãããæ¬åœã«ããããšãããããŸããã
@yortus re https://github.com/Microsoft/TypeScript/issues/3469#issuecomment -400439520
çŽ æŽãããèšäºããããæäŸããŠãããŠããããšãã é çªã«ããªãã®åé¡-
--build
AFAICTãšã¯æè¡çã«ç¡é¢ä¿ã§ãã ããã¯ãæè¿è¿œå ããæ°ããã¢ãµãŒã·ã§ã³ã§ãã ãã€ãµã³ã®èª¿æ»@ rosskevinð learn-a
ã¬ãã®PRã«ïŒ ããããã©ã³ãã«ããŒãžããŠãæ¯èŒãšå¯Ÿæ¯ãæ¹åããŸãã
@pgonzal re https://github.com/Microsoft/TypeScript/issues/3469#issuecomment -401577442
tsc --buildã«é¢ããäžè¬çãªè³ªåããããŸããTypeScriptã³ã³ãã€ã©ã¯ãã¢ããªããžããªå ã®ãããžã§ã¯ãã®ãã«ãã調æŽãã圹å²ãåŒãç¶ãããšãç®æããŠããŸããïŒ
çŽ æŽããã質åã§ãã ç§ã¯ããã«éåžžã«æ確ã«çããããšæããŸãïŒçµ¶å¯Ÿã«ãããŸããã
ä»æ¥ã¯tsc
ã䜿çšããŠãããžã§ã¯ããæ§ç¯ããããšã«æºè¶³ããŠããå Žåã¯ãææ¥ã¯tsc -b
ã䜿çšããŠãã«ãããŒããããžã§ã¯ããæ§ç¯ããããšã«æºè¶³ããŠãã ããã ä»æ¥ã¯gulp
ã䜿çšããŠãããžã§ã¯ããæ§ç¯ããããšã«æºè¶³ããŠããå Žåã¯ãææ¥ã¯gulp
ã䜿çšããŠãã«ãããŒããããžã§ã¯ããæ§ç¯ããããšã«æºè¶³ããŠãã ããã æåã®ã·ããªãªã¯å¶åŸ¡ã§ããŸããã2çªç®ã®ã·ããªãªãæ¯æŽããããŒã«ãšãã©ã°ã€ã³ã®äœæè
ãå¿
èŠã§ãããã®ããã tsc -b
ããããããžã§ã¯ãåç
§ãé©åã«åçããããã«ããŒã«äœæè
ã䜿çšã§ããå
¬éAPIã®èãã©ãããŒã«ãããŸããã圌ãã®ãã«ãã¢ãã«ã§ã
ããåºãæèã§ã¯ã tsc -b
ãååšããã¹ããããããšãå¥åã®ããŒã«/ãšã³ããªãã€ã³ãã«ãªãã¹ããã«ã€ããŠãããªã匷åãªå
éšèšè«ããããŸãã-æ±çšãã«ããªãŒã±ã¹ãã¬ãŒã¿ãŒã®æ§ç¯ã¯å·šå€§ãªã¿ã¹ã¯ã§ãããç§ãã¡ã®ã¿ã¹ã¯ã§ã¯ãããŸãããµã€ã³ã¢ããããŸãã ç§ãã¡èªèº«ã®ãªããžããªã§ã¯ã軜ãã¿ã¹ã¯ã©ã³ããŒãã¬ãŒã ã¯ãŒã¯ã§tsc
ã䜿çšããåãã¿ã¹ã¯ã©ã³ããŒã§tsc -b
ããŸããã移è¡ããä»ã®äººããæ¢åã®ãã«ããã§ãŒã³ãç¶æããããšãæåŸ
ããŠããŸãã埮調æŽã®ã¿ã§ã
@borekb re https://github.com/Microsoft/TypeScript/issues/3469#issuecomment -401593804
ããã¯ãts-nodeããã³é¢é£ããã¯ãŒã¯ãããŒã«åœ±é¿ãåãŒããŸããïŒ äžéšã®ãã«ããŒã¢ããªã¯ãTypeScriptãããçŽæ¥ãå®è¡ãããŸã
æé»çã«ãããžã§ã¯ãåç §ãæã€ããšãã§ããªãåäžãã¡ã€ã«ã¹ã¯ãªããã®å Žåã圱é¿ã¯ãããŸããã
@EisenbergEffectã¯ããããžã§ã¯ãéã®ååå€æŽããã®ä»ã®èšèªãµãŒãã¹æ©èœã«ã€ããŠã learn-a
ãªããžããªã«ããã€ã質åããããŸããã ããã§ã®å€§ããªæªè§£æ±ºã®è³ªåã¯ããã®æ©èœã3.0ã§äœ¿çšå¯èœãªç¶æ
ã§ååŸã§ãããã©ããã ãã§ãã ãããããªãããããžã§ã¯ãéã®ååå€æŽã¯ãããŸããããã§ããããããã¹ãŠã®ããŠã³ã¹ããªãŒã ãããžã§ã¯ããæçµçã«èŠã€ã
ãããžã§ã¯ãéã®ååå€æŽã3.0ã§èš±å®¹ã§ããã»ã©å®å®ããŠããŠå®å šã§ãããšæããªãå Žåã¯ãååãå€æŽãããã·ã³ãã«ãå¥ã®ãããžã§ã¯ãã®.d.tsåºåãã¡ã€ã«ã«ããå Žåã«åŸãã¢ããã¹ããªãŒã ãããžã§ã¯ãã®åŸç¶ã®ãã«ãã§.d.tsãã¡ã€ã«ãæŽæ°ããããããéåžžã«æ··ä¹±ããŸããã€ãŸããããŒã«ã«ã®ååãå€æŽããŠãã宣èšã³ãŒãã«æ°ä»ããŸã§ã«æ°æ¥ãããå¯èœæ§ããããŸããå®éã«ã¯æŽæ°ãããŠããŸããã§ããã
Go to Definitionã®ãããªæ©èœã®å Žåããããã¯çŸåšVS Codeã§æ©èœããŠãããVisualStudioã®å°æ¥ã®ããŒãžã§ã³ã§ã¯ããã«æ©èœããäºå®ã§ãã ãããã®æ©èœã¯ãã¹ãŠã.d.ts.mapãã¡ã€ã«ãæå¹ã«ããå¿
èŠããããŸãïŒ declarationMap
ãªã³ã«ããŸãïŒã ãããæããã«ããããã®æ©èœããšã®äœæ¥ãããã€ããããããæåŸ
ã©ããã«æ©èœããªããã®ãèŠã€ãã£ãå Žåã¯ãããã€ãã®ã±ãŒã¹ãèŠéããŠããå¯èœæ§ãããããããã°ããã°ã«èšé²ããŠãã ããã
ãã®æç¹ã§è¿œè·¡ããŠããæªè§£æ±ºã®åé¡ïŒ
learn-a
ã¬ããã®çšéyarn
ãããã³ä»ã®ãã®çšépnpm
ãããã³ä»ã®çšéæ²æã¢ãŒãã§ã¯ããããã®ããããããã®æªè§£æ±ºã®è³ªå
package.json
ãèªã¿åãããžãã¯ãå®è£
ããå¿
èŠããããŸããïŒ ãã°ã«èšé²ãããïŒ25376composite
ãããžã§ã¯ãã§ã¯ã .d.ts.map
ãšããããæé»çã«ãªã³ã«ããå¿
èŠããããŸããïŒ@RyanCavanaughã«è¿œå ãã
ãã®æç¹ã§è¿œè·¡ããŠããæªè§£æ±ºã®åé¡
ãŸããå®éã®ãããžã§ã¯ãã®åºåå Žæãšã¯å¥ã«ãLSã®ããã¯ã°ã©ãŠã³ãã§å®£èšãæŽæ°ãããªã©ã®åŠçãè¡ãããã«ãå¢ååºåãã£ãã·ã¥ãçšæããããšã«ã€ããŠã説æããŸããïŒçŸåšãå€æŽã¯ãã«ããããŸã§ãšãã£ã¿ãŒã®ãããžã§ã¯ãå¢çãè¶ããŠäŒæãããŸããïŒã stripInternal
ãããã³ãã«ãããã»ã¹ã®å€æŽïŒãã«ãåºåããã®å Žã§å€æŽããããããLSæäœã«ã¯é©ããŠããŸããïŒã
ã°ããã質åã§ç³ãèš³ãããŸããããããŒããããã§ãã§ãã¯ãããŠããã®ã§ããã®æ©èœãæå¹ã«ããã«ã¯ã©ãããã°ããã§ããïŒ
@ aleksey-bykovããªãã¯typescript @ nextã§ããã䜿ãããšãã§ããŸã
ã€ãŒã³ã¯ãŒã¯ã¹ããŒã¹ãæèŒããã¢ãã¬ãã§ãããè©ŠããŠã¿ãŸããããããŸãæ©èœããŸãã
ç§ãæ°ã¥ããããšã®1ã€ã¯ã tsc --build --watch
ããšã©ãŒãå ±åããŸããããã«ããä¿®æ£ãããããšã瀺ããã®ãäœãåºåããªãããšã§ãã 2.9ã®æšæºã®tsc
ãŠã©ããã¢ãŒãã¯ãšã©ãŒã«ãŠã³ããåºãå§ããŠãããããã«ãŒãã衚瀺ãããŠããã®ã§ãæ§ç¯ãå®äºããããšãããããŸãã
ç§ã¯* .d.tsã§ãã£ã±ãã®ãã©ã«ããæã£ãŠããŸãããããã«ã€ããŠäœããã¹ããä»ã«äœããããŸããïŒ
@timfishã®ãã£ãŒãããã¯ã¯ãç§ãèããä»ã®ãã£ãŒãããã¯ãšäžèŽããŸãã ãã°ã«èšé²ãããïŒ25562
@ aleksey-bykov https://github.com/Microsoft/TypeScript/issues/3469#issuecomment-400439520ã¯ããã€ãã®æŠå¿µã説æããã®ã«åœ¹ç«ã€ã¯ãã§ã
@RyanCavanaughãããžã§ã¯ãã®åç §ã¯ãcommonjsãšããŒãã¢ãžã¥ãŒã«ã®è§£æ±ºã§ã®ã¿æ©èœããããã§ãããïŒ
ããªãã®äŸã§ã¯ïŒ
import * as p1 from "@ryancavanaugh/pkg1";
import * as p2 from "@ryancavanaugh/pkg2";
p1.fn();
p2.fn4();
@ryancavanaugh
ã¢ãžã¥ãŒã«ãšã¯äœã§ããïŒTSãã¢ãžã¥ãŒã«ã解決ããæ¹æ³ãšã¯é¢ä¿ããããŸããïŒoutFile
å¿
èŠã§ããïŒç§ã¯2ã€ã®åçŽãªãããžã§ã¯ãessentials
ãšcommon
ãæã£ãŠããŸãããå
±éç¹ã§ã¯ãšãã»ã³ã·ã£ã«ã§ã³ã³ãã€ã«ããããã®ã解決ã§ããŸããã
@ aleksey-bykov
ãµã³ãã«ãªããžããªãªã©ãããå Žåã¯ããªããã®ãšã©ãŒãçºçããã®ãã蚺æã§ããŸã
@RyanCavanaughããŠãã ãã
example.zip
@RyanCavanaugh ã tsc --build --watch
ã¯ããœãŒã¹ãã¡ã€ã«ã®å€æŽã確èªãããŸã§ãæåã¯ãã¡ã€ã«ãåºåããªãããã§ãã
ã¹ã¬ãããé·ãããŸãïŒæéãšç©ºéã®äž¡æ¹ã§ïŒ; ã©ãããŒã€ã·ã¥ãŒãã³ããŒ100 * 2 ^ 8ïŒïŒ25600ã§ãã£ã¹ã«ãã·ã§ã³ãããã¯ã¢ããããŸããã
æãåèã«ãªãã³ã¡ã³ã
以äžã§é²è¡äžã®ããã¥ã¡ã³ã/ããã°æçš¿äœæ¥ïŒãã£ãŒãããã¯ã«åºã¥ããŠãããç·šéããŸãïŒ
ãã®ã¹ã¬ããããã©ããŒããŠãã人ã¯ããã²è©ŠããŠã¿ãããšããå§ãããŸãã ç§ã¯çŸåšmonorepoã·ããªãªã«åãçµãã§ãããããã§æåŸã®ãã°/æ©èœãä¿®æ£ããŠããã®ã§ãããã«ã¬ã€ãã³ã¹ãå¿ èŠã§ãã
ãããžã§ã¯ããªãã¡ã¬ã³ã¹
ãããžã§ã¯ãåç §ã¯TypeScript3.0ã®æ°æ©èœã§ãããTypeScriptããã°ã©ã ãããå°ããªéšåã«æ§é åããããšãã§ããŸãã
ãããè¡ãããšã§ããã«ãæéãå€§å¹ ã«æ¹åããã³ã³ããŒãã³ãéã®è«ççãªåé¢ãå®æœããã³ãŒããæ°ããããè¯ãæ¹æ³ã§ç·šæã§ããŸãã
ãŸãã
tsc
æ°ããã¢ãŒãã§ãã--build
ãã©ã°ãå°å ¥ããŠããŸãããã®ã¢ãŒãã¯ããããžã§ã¯ãåç §ãšé£æºããŠæ©èœããTypeScriptã®ãã«ããé«éåããŸãããµã³ãã«ãããžã§ã¯ã
ããªãæ®éã®ããã°ã©ã ãèŠãŠããããžã§ã¯ãåç §ãããã°ã©ã ã®æŽçã«ã©ã®ããã«åœ¹ç«ã€ããèŠãŠã¿ãŸãããã
converter
ãšunits
2ã€ã®ã¢ãžã¥ãŒã«ãšãããããã«å¯Ÿå¿ãããã¹ããã¡ã€ã«ãæã€ãããžã§ã¯ãããããšããŸãããã¹ããã¡ã€ã«ã¯å®è£ ãã¡ã€ã«ãã€ã³ããŒãããããã€ãã®ãã¹ããå®è¡ããŸãã
以åã¯ãåäžã®tsconfigãã¡ã€ã«ã䜿çšããå Žåããã®æ§é ã¯æ±ãã«ãããã®ã§ããã
src
åºåãã©ã«ããŒåã«è¡šç€ºããã«ãtest
ãšsrc
ãåæã«ãã«ãããããšã¯ã§ããŸããã§ãããè€æ°ã®tsconfigãã¡ã€ã«ã䜿çšããŠãããã®åé¡ã®ããã€ãã解決ããããšãã§ããŸãããæ°ããåé¡ãçºçããŸãã
tsc
2åå®è¡ããããšã«ãªããŸããtsc
2ååŒã³åºããšãèµ·åæéã®ãªãŒããŒããããå¢å ããŸãtsc -w
ã¯ãäžåºŠã«è€æ°ã®æ§æãã¡ã€ã«ã§å®è¡ããããšã¯ã§ããŸãããããžã§ã¯ãåç §ã¯ãããããã¹ãŠã®åé¡ããã®ä»ã®åé¡ã解決ã§ããŸãã
ãããžã§ã¯ããªãã¡ã¬ã³ã¹ãšã¯äœã§ããïŒ
tsconfig.json
ãã¡ã€ã«ã«ã¯ãæ°ããæäžäœããããã£references
ãŸãã ããã¯ãåç §ãããããžã§ã¯ããæå®ãããªããžã§ã¯ãã®é åã§ããååç §ã®
path
ããããã£ã¯ãtsconfig.json
ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªããŸãã¯æ§æãã¡ã€ã«èªäœïŒä»»æã®ååãæå®ã§ããŸãïŒãæãããšãã§ããŸãããããžã§ã¯ããåç §ãããšãæ°ããããšãèµ·ãããŸãã
.d.ts
ïŒãèªã¿èŸŒãŸããŸããoutFile
çæããå Žåãåºåãã¡ã€ã«.d.ts
ãã¡ã€ã«ã®å®£èšããã®ãããžã§ã¯ãã«è¡šç€ºãããŸããè€æ°ã®ãããžã§ã¯ãã«åå²ããããšã§ãã¿ã€ããã§ãã¯ãšã³ã³ãã€ã«ã®é床ãå€§å¹ ã«åäžããããšãã£ã¿ãŒã䜿çšããéã®ã¡ã¢ãªäœ¿çšéãåæžããããã°ã©ã ã®è«çã°ã«ãŒãåã®å®æœãåäžãããããšãã§ããŸãã
composite
åç §ããããããžã§ã¯ãã§ã¯ãæ°ãã
composite
èšå®ãæå¹ã«ããå¿ èŠããããŸãããã®èšå®ã¯ãTypeScriptãåç §ããããããžã§ã¯ãã®åºåãèŠã€ããå Žæããã°ãã決å®ã§ããããã«ããããã«å¿ èŠã§ãã
composite
ãã©ã°ãæå¹ã«ãããšãããã€ãã®å€æŽããããŸããrootDir
èšå®ã¯ãæ瀺çã«èšå®ãããŠããªãå Žåãããã©ã«ãã§tsconfig
ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªã«ãªããŸããinclude
ãã¿ãŒã³ãšäžèŽããããfiles
é åã«ãªã¹ããããŠããå¿ èŠããããŸãã ãã®å¶çŽã«éåããå Žåãtsc
ã¯ã©ã®ãã¡ã€ã«ãæå®ãããªãã£ãããéç¥ããŸãdeclaration
ãªã³ã«ããå¿ èŠããããŸãdeclarationMaps
宣èšãœãŒã¹ãããã®ãµããŒããè¿œå ããŸããã
--declarationMap
ãæå¹ã«ãããšããå®çŸ©ã«ç§»åãããååã®å€æŽããªã©ã®ãšãã£ã¿ãŒæ©èœã䜿çšããŠããµããŒããããŠãããšãã£ã¿ãŒã§ãããžã§ã¯ãã®å¢çãè¶ããŠã³ãŒããééçã«ããã²ãŒãããã³ç·šéã§ããŸããprepend
ãšoutFile
prepend
ã®ãããžã§ã¯ãã®åã«ä»ãããšãçŸåšã®ãããžã§ã¯ãã®åºåã®äžã«ãããžã§ã¯ãã®åºåãå«ãŸããŸãã
ããã¯
.js
ãã¡ã€ã«ãš.d.ts
ãã¡ã€ã«ã®äž¡æ¹ã§æ©èœãããœãŒã¹ããããã¡ã€ã«ãæ£ããåºåãããŸããtsc
ã¯ããã®ããã»ã¹ãå®è¡ããããã«ãã£ã¹ã¯äžã®æ¢åã®ãã¡ã€ã«ã®ã¿ã䜿çšãããããäžéšã®ãããžã§ã¯ãã®åºåãçµæã®ãã¡ã€ã«ã«è€æ°åååšãããããæ£ããåºåãã¡ã€ã«ãçæã§ããªããããžã§ã¯ããäœæããããšãã§ããŸãã ãäŸãã°ïŒ
ãã®ç¶æ³ã§ã¯ã
D
ã®åºåã«A
ã³ããŒã2ã€å«ãŸãããããååç §ã®å é ã«ä»å ããªãããšãéèŠã§ããããã«ãããäºæããªãçµæãçããå¯èœæ§ããããŸãããããžã§ã¯ãåç §ã«é¢ããèŠå
ãããžã§ã¯ãã®åç §ã«ã¯ã泚æãå¿ èŠãªããã€ãã®ãã¬ãŒããªãããããŸãã
äŸåãããžã§ã¯ãã䜿çšããŸãã®ã§
.d.ts
ãããã®äŸåé¢ä¿ããæ§ç¯ãããŠãããã¡ã€ã«ã䜿çšãããšãã¹ããªã¢ã¹èŠãã«ãšãã£ã¿ã§ãããžã§ã¯ããããã²ãŒãããããšãã§ããŸãåã«ãããªãã¯ã©ã¡ããç¹å®ã®ãã«ãåºåã§ç¢ºèªãããããããã¯ããŒãã³ã°ããåŸããããžã§ã¯ãããã«ãããå¿ èŠããããŸããšã©ãŒãããã軜æžã§ããã¯ãã®èå°è£ã®.d.tsçæããã»ã¹ã«åãçµãã§ããŸãããä»ã®ãšãããã¯ããŒã³äœæåŸã«ãã«ãããå¿ èŠãããããšãéçºè ã«éç¥ããããšããå§ãããŸãã
ããã«ãæ¢åã®ãã«ãã¯ãŒã¯ãããŒãšã®äºææ§ãç¶æããããã«ã
tsc
ã¯ã--build
ã¹ã€ããã§åŒã³åºãããªãéããäŸåé¢ä¿ãèªåçã«ãã«ãããŸããã--build
ã«ã€ããŠãã£ãšåŠã³ãŸããããTypeScriptã®ãã«ãã¢ãŒã
åŸ æã®æ©èœã¯ãTypeScriptãããžã§ã¯ãã®ã¹ããŒãã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã§ãã
3.0ã§ã¯ã
--build
ãšãšãã«tsc
--build
ãã©ã°ã䜿çšã§ããŸããããã¯äºå®äžã
tsc
æ°ãããšã³ããªãã€ã³ãã§ãããåçŽãªã³ã³ãã€ã©ãšããããããã«ããªãŒã±ã¹ãã¬ãŒã¿ãŒã®ããã«åäœããŸããtsc --build
ïŒç¥ããŠtsc -b
ïŒãå®è¡ãããšã次ã®ããã«ãªããŸããtsc -b
ã«è€æ°ã®æ§æãã¡ã€ã«ãã¹ãæå®ã§ããŸãïŒäŸïŒtsc -b src test
ïŒãtsc -p
åæ§ã«ãtsconfig.json
ãšããååã®å Žåãæ§æãã¡ã€ã«åèªäœãæå®ããå¿ èŠã¯ãããŸãããtsc -b
ã³ãã³ãã©ã€ã³æ§æãã¡ã€ã«ã¯ããã€ã§ãæå®ã§ããŸãã
ã³ãã³ãã©ã€ã³ã§æž¡ããã¡ã€ã«ã®é åºã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸãããäŸåé¢ä¿ãåžžã«æåã«æ§ç¯ãããããã«ã
tsc
ã¯å¿ èŠã«å¿ããŠãã¡ã€ã«ã䞊ã¹æ¿ããŸããtsc -b
åºæã®ãã©ã°ãããã€ããããŸãïŒ--verbose
ïŒäœãèµ·ãã£ãŠãããã説æããããã«è©³çŽ°ãªãã°ãåºåããŸãïŒä»ã®ãã©ã°ãšçµã¿åãããããšãã§ããŸãïŒ--dry
ïŒäœãè¡ããããã瀺ããŸãããå®éã«ã¯äœãæ§ç¯ããŸãã--clean
ïŒæå®ããããããžã§ã¯ãã®åºåãåé€ããŸãïŒ--dry
ãšçµã¿åãããããšãã§ããŸãïŒ--force
ïŒãã¹ãŠã®ãããžã§ã¯ããå€ããªã£ãŠãããã®ããã«æ¯ãèããŸã--watch
ïŒãŠã©ããã¢ãŒãïŒ--verbose
以å€ã®ãã©ã°ãšçµã¿åãããããšã¯ã§ããŸããïŒèŠå
éåžžã
tsc
ã¯ãnoEmitOnError
ããªã³ã«ãªã£ãŠããªãéããæ§æãšã©ãŒãŸãã¯åãšã©ãŒãååšããå Žåã«åºåïŒ.js
ããã³.d.ts
ïŒãçæããŸããã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã·ã¹ãã ã§ãããè¡ããšãéåžžã«æªãçµæã«ãªããŸããå€ãäŸåé¢ä¿ã®1ã€ã«æ°ãããšã©ãŒãçºçããå ŽåãåŸç¶ã®ãã«ãã§ã¯ææ°ã®ãããžã§ã¯ãã®ãã«ããã¹ããããããããããšã©ãŒã¯1åãã衚瀺ãããŸããã
ãã®ããã
tsc -b
noEmitOnError
ã¯ããã¹ãŠã®ãããžã§ã¯ãã§ãã«ãåºåïŒ
.js
ã.d.ts
ã.d.ts.map
ãªã©ïŒããã§ãã¯ã€ã³ããå Žåãç¹å®ã®ãœãŒã¹ç®¡çã®åŸã«--force
ãã«ããå®è¡ããå¿ èŠãããå ŽåããããŸããœãŒã¹ç®¡çããŒã«ãããŒã«ã«ã³ããŒãšãªã¢ãŒãã³ããŒã®éã®ã¿ã€ã ããããä¿æãããã©ããã«å¿ããæäœãmsbuild
msbuildãããžã§ã¯ããããå Žåã¯ãè¿œå ããŠãã«ãã¢ãŒããæå¹ã«ããããšãã§ããŸã
ããªãã®projãã¡ã€ã«ã«ã ããã«ãããèªåã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ããšã¯ãªãŒãã³ã°ãå¯èœã«ãªããŸãã
tsconfig.json
/-p
åæ§ã«ãæ¢åã®TypeScriptãããžã§ã¯ãã®ããããã£ã¯å°éãããªãããšã«æ³šæããŠãã ããããã¹ãŠã®èšå®ã¯tsconfigãã¡ã€ã«ã䜿çšããŠç®¡çããå¿ èŠããããŸããäžéšã®ããŒã ã¯ãmsbuildããŒã¹ã®ã¯ãŒã¯ãããŒãèšå®ããŠãããtsconfigãã¡ã€ã«ã¯ããã¢ã«ãªã£ãŠãã管ç察象ãããžã§ã¯ããšåãæé»çãªã°ã©ãã®é åºã«ãªã£ãŠããŸãã
ãœãªã¥ãŒã·ã§ã³ããã®ãããªå Žåã¯ããããžã§ã¯ãåç §ãšãšãã«
msbuild
ãštsc -p
ãåŒãç¶ã䜿çšã§ããŸãã ãããã¯å®å šã«çžäºéçšå¯èœã§ããã¬ã€ãã³ã¹
å šäœçãªæ§é
tsconfig.json
ãã¡ã€ã«ãå€ãå Žåã¯ãéåžžãæ§æãã¡ã€ã«ã®ç¶æ¿ã䜿çšããŠãäžè¬çãªã³ã³ãã€ã©ãªãã·ã§ã³ãäžå åããå¿ èŠããããŸãããã®ããã«ããŠãè€æ°ã®ãã¡ã€ã«ãç·šéããªããŠãã1ã€ã®ãã¡ã€ã«ã®èšå®ãå€æŽã§ããŸãã
ãã1ã€ã®è¯ãæ¹æ³ã¯ããã¹ãŠã®ãªãŒãããŒããããžã§ã¯ãã«å¯ŸããŠ
references
ãå«ãããœãªã¥ãŒã·ã§ã³ãtsconfig.json
ãã¡ã€ã«ãçšæããããšã§ããããã¯åçŽãªãšã³ããªãã€ã³ãã瀺ããŸãã ããšãã°ãTypeScriptãªããžããªã§ã¯ããã¹ãŠã®ãµããããžã§ã¯ãã
src/tsconfig.json
ãªã¹ãããŠãããããtsc -b src
ãå®è¡ããŠãã¹ãŠã®ãšã³ããã€ã³ããæ§ç¯ããŸãã3.0以éã
tsconfig.json
ãã¡ã€ã«ã«å°ãªããšã1ã€ã®reference
ãããå Žåã空ã®files
é åãååšããããšã¯ãšã©ãŒã§ã¯ãªããªã£ãããšã«æ³šæããŠãã ããããããã®ãã¿ãŒã³ã¯TypeScriptãªããžããªã§ç¢ºèªã§ããŸããéèŠãªäŸãšããŠ
src/tsconfig_base.json
ãsrc/tsconfig.json
ãããã³src/tsc/tsconfig.json
ãçžå¯Ÿã¢ãžã¥ãŒã«ã®æ§é å
äžè¬ã«ãçžå¯Ÿã¢ãžã¥ãŒã«ã䜿çšããŠãªããžããªã移è¡ããã®ã«ããã»ã©å€ãã¯å¿ èŠãããŸããã
æå®ããã芪ãã©ã«ããŒã®åãµããã£ã¬ã¯ããªã«
tsconfig.json
ãã¡ã€ã«ãé 眮ããããã°ã©ã ã®ç®çã®ã¬ã€ã€ãŒã«äžèŽããããã«ãããã®æ§æãã¡ã€ã«ã«reference
ãè¿œå ããã ãã§ããoutDir
ãåºåãã©ã«ããŒã®æ瀺çãªãµããã©ã«ããŒã«èšå®ããããrootDir
ããã¹ãŠã®ãããžã§ã¯ããã©ã«ããŒã®å ±éã«ãŒãã«èšå®ããå¿ èŠããããŸããoutFilesã®æ§é å
outFile
ã䜿çšããã³ã³ãã€ã«ã®ã¬ã€ã¢ãŠãã¯ãçžå¯Ÿãã¹ãããã»ã©éèŠã§ã¯ãªããããããæè»ã§ããèŠããŠããã¹ãããšã®1ã€ã¯ãéåžžããæåŸã®ããããžã§ã¯ããŸã§
prepend
䜿çšããããªããšããããšã§ããããã«ããããã«ãæéãæ¹åãããç¹å®ã®ãã«ãã§å¿ èŠãªI / Oã®éãåæžãããŸããTypeScriptãªããžããªèªäœã¯ããã§ã®è¯ããªãã¡ã¬ã³ã¹ã§ã-ããã€ãã®ãã©ã€ãã©ãªããããžã§ã¯ããšããã€ãã®ããšã³ããã€ã³ãããããžã§ã¯ãããããŸãã ããšã³ããã€ã³ãããããžã§ã¯ãã¯å¯èœãªéãå°ããä¿ãããå¿ èŠãªã©ã€ãã©ãªã®ã¿ãåã蟌ã¿ãŸãã
ã¢ãã¬ãã®æ§é å
TODOïŒãã£ãšå®éšããŠããããç解ããŠãã ããã ã©ãã·ã¥ãšã¬ã«ãã¯ãç§ãã¡ã®åŽã§ç°ãªãããšãæå³ããç°ãªãã¢ãã«ãæã£ãŠããããã§ã