ããã¯ããã©ãŠã¶ã®ããã±ãŒãžãããŒãžã£ãŒã§ããJSPMãNodeJSã®ãããªçŽ æŽãããããŒã«ã®äž»ãªéçºè
ã§ããGuy Bedfordã«ããããã°æçš¿ã®ç¿»èš³ã§ãããããŠãESã¢ãžã¥ãŒã«ãããŒãããããã®ããªãã¡ã€ã«ã§ãães-module-loaderãšåŒã°ãã圌èªèº«ã®é è³ã«åºã¥ããŠããŸãã ç§ãçè§£ããŠããããã«ãèè
ã¯ãã®ãªãªãŒã¹ã§SystemJSãã»ãšãã©æžãçŽããŠãããããã«ã€ããŠhabrayuzersã«èªãããšã¯è峿·±ãã§ãããã
SystemJS 0.20ããªãªãŒã¹ãããã°ããã§ã -ããã¯å®å
šã«åèšèšããã仿§ãä¿®æ£ãããŠããŸãããESã¢ãžã¥ãŒã«ã¯ãã§ã«ãã©ãŠã¶ã«æèŒãããŠããŸã ã
SystemJSã¯åœåãjspmãããžã§ã¯ãçšã«2013幎ã«éçºãããŸããããRequireJSã¯äž»èŠãªã¢ãžã¥ãŒã«ããŒããŒã§ããã 䞊è¡ããŠãES6ã¯éçºãããŸããããES6ã¢ãžã¥ãŒã«ã¯äŸç¶ãšããŠç¡åœ¢ã®å€¢ã®ããã«æããŸããã SystemJSã®ã¢ã€ãã¢ã¯ã·ã³ãã«ã§èª¬åŸåããããŸãããã¢ãžã¥ãŒã«ããã©ãŠã¶ã«æ¥ãã®ã§ããã©ãŠã¶ãããã€ã§ãã¢ãžã¥ãŒã«ãããŒãã§ããããã«ããå¿
èŠããããéåžžã«ã·ã³ãã«ãªéçºããã»ã¹ãåŸãããŸãã
ESã¢ãžã¥ãŒã«ã®åºçŸã«ãããRequireJSã¯æã®è©Šç·Žã«èããããªãããšãæããã«ãªããŸããã ESã¢ãžã¥ãŒã«ããŒããŒã®åæã®ä»æ§ã«åºã¥ããŠç¬èªã®ããŒããŒãäœæããããšã§ãã¢ãžã¥ãŒã«ããŒããŒã®ä»æ§ã®æäœã«é¢ããå
·äœçãªãã£ãŒãããã¯ãåŸãããšãã§ããæçµçã«å®å®ããããŒããŒãååŸããŠåŸã§åäœãããããšãå¯èœã«ãªããŸããã
ã»ãŒ4幎åŸããããžã§ã¯ãã¯æ¯æ50äžä»¶åŒ±ã®ããŠã³ããŒããåãåãå§ããŸããã
ããã¯åžžã«äžå®å®ãªä»æ§ã«åŸã£ãŠãããäºææ§ãæãªãçµ¶ãéãªã倿Žãæå³ããŠããŸãããããããžã§ã¯ãã®ç®æšã¯ããããã¹ãŠã®å€æŽã远跡ããããšã§ããã ãŸãã仿§ã®éçºã¯ã»ãšãã©ããã£ããã§ãããããä»ã®ã»ãšãã©ã®ãããžã§ã¯ãããã倧å¹
ãªå€æŽã®é »åºŠãã¯ããã«äœããšæ³å®ãããŠããŸããã
åºæ¬çã«ãSystemJS 0.20ã¯èª¿æŽä»æ§ã®æ¬¡ã®ãªãªãŒã¹ã衚ããŸãã
ãã®æçš¿ã§ã¯ããã©ãŠã¶ã¢ãžã¥ãŒã«ã®ããŒã仿§ã®å°æ¥ã«ã€ããŠæåŸ
ã§ããããšãçè§£ã§ããããã«ããæè¿ã®ä»æ§å€æŽã®æŠèŠãæäŸããŸããSystemJSã¯ãŸãã«ãã®çã£thereäžã§ãã
仿§ã®èª¿æŽ
ãã®ããŒãã¯ãŒã¯ã®ä»æ§äœæè
ã®ãããã§ã <script type="module">
ãšdynamic import()
æ§æã®éã¯ã»ãŒæç¢ºã§ãã
SystemJSã¯åžžã«WhatWGããŒãããŒããŒã®ä»æ§ã«åŸã£ãŠããŸãããå®éã¯ãã°ããã®éåæ»ããŠããŸãã <script type="module">
ããã³dynamic import()
èŠããã®ã¯ãWhatWGããŒãããŒããŒã®ææã§ããã仿§ã®å°ããªãã§ãŒãºã«ç±æ¥ããŸãã ãããã®æ©èœã¯ãWhatWGããŒããããã«åžžã«ååšã ãããŒãããŒããŒæ©èœãåŸã
ã«æ¹è¯ãããã®ã§ããã
ãããŸã§ã«ç¢ºèªããæ©èœã«ã¯æ¬¡ã®ãã®ããããŸãã
- ã¢ãžã¥ãŒã«åŒã¹ã¯ãªãã ïŒWhatWG HTML仿§ã§èª¬æãããSafari Previewããã³Edge Insiderã«å®è£
ãããŠããŸã
- ã¢ãžã¥ã©ãŒã¯ãŒã«ãŒ ïŒçŸåšå®è£
ãããŠããWhatWG仿§ã§èª¬æãããŠããŸãã
- åçã€ã³ããŒãæ§æ ïŒTC39仿§ã®ç¬¬3ã¹ããŒãžãçŸåšå®è£
äž
WhatWGããŒãããŒããŒä»æ§ã®ãã®ä»ã®æ©èœããŸãã¯çŸåšè°è«ãããŠãããã®ã®ãå°æ¥ç»å Žããå¯èœæ§ã®ããæ©èœã«ã¯ã次ã®ãã®ããããŸãã
- ã¡ã¿ããŒã¿ã®ã€ã³ããŒã ïŒçŸåšã®ã¢ãžã¥ãŒã«ãžã®ãã¹ãååŸããæ©èœïŒNodeJSã®__filenameãªã©ïŒ
- ãªãŸã«ããŒãã㯠ïŒã¹ã¯ãªãããæ±ºå®ããããã®ãã©ãŠã¶ãŒã¡ã«ããºã ãã€ã³ã¿ãŒã»ããããæ©èœã çŸåšãã€ã³ããŒã 'jquery'ã³ã³ã¹ãã©ã¯ãã¯ãWhatWGã¢ãžã¥ãŒã«ããŒã仿§ã«æºæ ããã¢ãžã¥ãŒã«ã¹ã¯ãªããã§å€±æããŸãã ããã¯ã¯ããã©ãŠã¶ãŒã«è§£æ±ºãæç€ºããæ©èœã远å ã§ããŸãïŒãlodashãïŒ->ãhttps://cdn.com/lodash/4.17.4/lodash.jsãã ãã®ã¢ãããŒãã®å€§ããªå©ç¹ã®1ã€ã¯ãã£ãã·ã¥ã§ããlodashãã€ã³ããŒãããããŒã«ã«app.jsã¯ãlodashã®æŽæ°ã«é¢ä¿ãªããã£ãã·ã¥ã§ããŸãã
- ã¬ãžã¹ããªAPI ïŒã¢ãžã¥ãŒã«ã®åå空éã®URLããããè§£æããã³å€æŽããæ©èœãæäŸããŸãã ã¬ãžã¹ããªã§åçã«äœæãããã¢ãžã¥ãŒã«ãæå®ã§ããŸãã ã¬ãžã¹ããªAPIã¯ãäŸåé¢ä¿ã®ã¡ã¿ããŒã¿ãå©çšå¯èœãªå Žåãäœæ¥ç°å¢ã®ããããªããŒããæå¹ã«ããããšãã§ããŸãã
- ã€ã³ã¹ã¿ã³ã¹åãã㯠ïŒããã¯ãããŒãããã»ã¹ãã€ã³ã¿ãŒã»ããããæå®ãããURLã§ã©ã®ã¢ãžã¥ãŒã«ãè¿ããã瀺ãããšãã§ããããã¯ã§ãã ãŸããããŒãããŒããŒã®ã¬ã¬ã·ãŒã¢ãžã¥ãŒã«ã®ãµããŒãïŒAMDãŸãã¯CommonJSã¢ãžã¥ãŒã«ãããŒãããæ©èœïŒãå«ãŸããŠããŸãã
äžèšã®é¢æ°ã«æ¬ ããŠããã®ã¯ãããã¯ã®æ£èŠåãæ€çŽ¢ãåä¿¡ã翻蚳ãããã³ã€ã³ã¹ã¿ã³ã¹åã§ãã ãã®ãªãªãžãã«ã®ãã€ãã³ã¯ãã¯ããªãµã€ã¯ã«ã倿Žããããªãããšãæããã«ãªããŸããã
SystemJSã¯ãã®éã«éåžžã«è¿ãã®ã§ããããã®ããã¯ãåé€ããããšã¯ãäºææ§ãSystem.fetch
èšèšå€æŽã®1ã€ã§ãSystem.fetch
ãŸãã¯System.transate
ããã£ããããæ¹æ³ã¯ãªããªãSystem.transate
ã System[System.constructor.resolve]
ãšSystem.instantiate[System.constructor.instantiate]
代ããã«ã2ã€ã®ããã¯ã®ã¿ãæ°ãããªããŸããã
èŠããã«ãSystemJS 0.20ã¯ã仿§ããŒã¹ã®ãã©ãŠã¶ãŒã§ã®ãªãŸã«ããŒããã¯ãšã¬ãžã¹ããªAPIã®åçŽåãããä»®å®ã«åºã¥ããŠããŸãã ãããã®APIã®è©³çްã«ã€ããŠã¯ã httpsïŒ//github.com/ModuleLoader/es-module-loaderã§ã¢ãžã¥ãŒã«ããŒããŒãããžã§ã¯ãã調ã¹ãŠãã ãã ããããã®ä»æ§ãœãªã¥ãŒã·ã§ã³ãšãã¬ãŒããªãã®ãã¹ãŠãæ³šææ·±ã詳现ã«èª¬æãããŠããŸã ã
NodeJSã¢ãžã¥ãŒã«ãšã®äºææ§
NodeJSåŽã¯ãã¢ãžã¥ãŒã«ãã¹ã®æ¡çšã§å€§ããªé²æ©ãéããŸããã SystemJSã¢ãžã¥ãŒã«ã®åœ¢åŒã¯ãããã®é åãšã»ãŒäžè²«ããŠããŸããã1ã€ã®èª¿æŽããããŸããããã¯ãäºææ§ã«éåãããªãªãŒã¹ã§ã®æå€§ã®å€æŽã®1ã€ã§ãã
ãã®å€æŽã¯ãESã¢ãžã¥ãŒã«ããCommonJSã¢ãžã¥ãŒã«ãã€ã³ããŒããããšãã«ååä»ããšã¯ã¹ããŒããèš±å¯ãããªããªãããšã§ããããã¯ãã¹ãŠhttps://github.com/nodejs/CTC/pull/60/files#diff-2b572743d67d8a47685ae4bcb9bec651R217ã§èª¬æãããŠããŸã
ã€ãŸãimport { name } from 'cjs.js
ïŒcjs.jsã¯CommonJSã¢ãžã¥ãŒã«ïŒ import { name } from 'cjs.js
ã®import { name } from 'cjs.js
ã¯ãµããŒããããªããªããŸãã代ããã«import cjs from 'cjs.js'; cjs.name
ãèšè¿°ããå¿
èŠãããimport cjs from 'cjs.js'; cjs.name
import cjs from 'cjs.js'; cjs.name
ã ããã¯å€ãã®å Žæã§NodeJSãšBabelã®ãŠãŒã¶ãŒã«åœ±é¿ãäžãã倧ããªã®ã£ããã«ãªãã®ã§ãSystemJSã¯ä»ãã®ããããåããŠããŸãã
Interopã§__esModule
ãã©ã°ãåŒãç¶ããµããŒããããã®ãããªç¶æ³ã§ååä»ããšã¯ã¹ããŒããçºçãããããšãã§ããŸãã
ãããã£ãŠã cjs.js
ã¢ãžã¥ãŒã«cjs.js
次ã®ããã«èšè¿°ãããŠããå ŽåïŒ
exports.__esModule = true; exports.name = function ()
ããã«ããã cjs.js
ãCommonJSã¢ãžã¥ãŒã«ã§ãã£ãŠãã import { name } from 'cjs.js'
ãååŸã§ããããã«ãªããŸãããé·æçã«ã¯çµæãšããŠåé€ãããŸãã
æ¬çªçšãã«ã
ãããžã§ã¯ãã®èŠæš¡ãçž®å°ãããããæ°ããSystemJSãããã¯ã·ã§ã³ãã«ãã¯ãæé©ãªããŒããšãããã¯ã·ã§ã³ããã©ãŒãã³ã¹ã®ããã«èšèšãããŸããã
éçºç°å¢ã§ã¯ãããŒããŒã¯äžæãªã¢ãžã¥ãŒã«ã®ããŒãã®åé¡ãåŠçããŸãã æ§æã«åé¡ããããŸã-ãŸã ããŒããããŠããªãããã±ãŒãžã®æ§æãååŸããã«ã¯ã©ãããã°ããã§ããïŒ ãã®ãããSystemJSã¯ãNodeJSã«èªã¿èŸŒãŸããpackage.jsonãã¡ã€ã«ã®ããã«ãè§£å床ã®äžéšãšããŠãã©ãŠã¶ãŒã®ãã¡ã€ã«ã®æ§æãåçã«èªã¿èŸŒãæ©èœãå«ããæ¬æ Œçãªæ§æç®¡çã·ã¹ãã ãåãåããŸããã
ãããã®éçºã¢ã¡ããã£ããã¹ãŠåé€ãããšãçç£ãã«ããããã5 KBã«åæžãããŸãã ãã®ããªã¥ãŒã ã¯ã System.register
ããã³System.registerDynamic
ããŒããæäŸããããã«ããŒã¹URLãã¢ãžã¥ãŒã«ãã¹ãããããã³ã³ããã¹ããããããã³ãã«ãããã³äŸåé¢ä¿ãã£ãã·ã¥ã®ãµããŒãã®æ©èœãå«ã¿ãŸãã
å圢ãã©ãŠã¶ã¢ãžã¥ãŒã«-ããªãã£ã«ã®ãããªã¢ãããŒã
SystemJSã¯ããã©ãŠã¶ãŒã§ãµããŒããããããã«ãªã£ãã¢ãžã¥ãŒã«ã®ããªãã£ã«ãæå¹ã«ãããšåæã«ãããããã³ã³ããã¹ãããããããã³äŸåé¢ä¿ãã£ãã·ã¥ã®åºæ¬æ©èœãåŒãç¶ããµããŒãããããšãç®æããŠããŸãã
ããšãã°ããã©ãŠã¶ã«ESã¢ãžã¥ãŒã«ãæäŸããESã¢ãžã¥ãŒã«ããµããŒããããå Žåã
åæã«ãSystemJSããŒããŒã¯ãå€ã芪åããŒã¹ã®ãã©ãŠã¶ãŒã§åäœããŸãã
System.register
ãã¢ãžã¥ãŒã«åœ¢åŒãšããŠäœ¿çšãããããpolyphilããŒãžã§ã³ã¯ãµããŒããããŠãããã©ãŠã¶ãŒã§ESã¢ãžã¥ãŒã«ã®æ£ç¢ºãªå®è¡ã»ãã³ãã£ã¯ã¹ããµããŒãã§ããããããã®ã¢ãããŒããå圢ãã©ãŠã¶ãŒã¢ãžã¥ãŒã«ãšSystem.register
ãŸãã
SystemJS 0.20ãã«ããã«ãã«åºã¥ããŠã httpsïŒ//github.com/guybedford/isomorphic-browser-modulesã§ãã¢ãäœæãããŸãããããã¯ããã®ESã¢ãžã¥ãŒã«ããŒãã¡ã«ããºã ãSafariãã¯ãããžãŒãã¬ãã¥ãŒã§ã©ã®ããã«æ©èœãããã€ãã£ãã¢ãžã¥ãŒã«ããªãå Žåã«SystemJSã«æ»ãæ¹æ³ã瀺ããŠããŸããµããŒããããŠããŸãã
ã¢ãžã¥ãŒã«éçºã¢ãããŒãã®æ¹å
SystemJSã¯åŒãç¶ããã®éãæ©ã¿ãå®çšŒåç°å¢ã§ã®èªã¿èŸŒã¿ãæé©åãããã€ãã£ãã¢ãžã¥ãŒã«ã«å²ãŸãããã©ãŠã¶ãŒã§ã¢ãžã¥ãŒã«ãæäœããŸãã çŸæç¹ã§ã®SystemJSã®åŒ±ç¹ã®1ã€ã¯ãéçºãµãŒããŒããæé©åããããããã¯ã·ã§ã³ãŸã§ã®ãããžã§ã¯ãã«ããŒã«ãäžè¶³ããŠããããšã§ãã
ãã®åéã§ã¯å€ãã®è峿·±ãäœæ¥ãæ®ã£ãŠããããã¡ãããããŒã«ã®ãšã³ã·ã¹ãã ãžã®ã¢ã€ãã¢ãšè²¢ç®ã®äœå°ã¯åžžã«ãããŸãã
DotJSãšã®äŒè°ã§ã®ææ°ã®è°è«ãã芧ãã ãããESã¢ãžã¥ãŒã«ããµããŒããããã©ãŠã¶ãŒã®ã¢ã»ã³ããªæé©åææ³ã«ã€ããŠè°è«ããŠããŸãã
SystemJSã®éçºããµããŒãããæè³ããŠããããã¹ãŠã®äººã«æè¬ããŸãã äœããã®åœ¢ã§ãããžã§ã¯ãããµããŒããããå Žåã¯ã å¯ä»ãå«ãä»äºã®äœå°ãåžžã«ãããŸãã