æ¬ç« ã§ã¯ãJavaScript ã®ã¢ã¸ã¥ã¼ã«ã使ãå§ããããã«å¿ è¦ãªãã¨ãã¹ã¦ãç´¹ä»ãã¾ãã
ã¢ã¸ã¥ã¼ã«ã®èæ¯JavaScript ã®ããã°ã©ã ã¯ã¨ã¦ãå°ãããã®ããå§ã¾ãã¾ãããåæã®ç¨éã¯ãå¿ è¦ã«å¿ãã¦ã¦ã§ããã¼ã¸ã«ã¡ãã£ã¨ãã対話çãªæ©è½ã追å ããç¬ç«ããã¹ã¯ãªããå¦çãã»ã¨ãã©ã§ãã£ãããã大ããªã¹ã¯ãªããã¯éå¸¸å¿ è¦ããã¾ããã§ãããããã¦ä½å¹´ããéããä»ã大éã® JavaScript ãæã¤å®å ¨ãªã¢ããªã±ã¼ã·ã§ã³ããã©ã¦ã¶ã¼ã§å®è¡ãããã¨ã¯ãã¡ãããJavaScript ãä»ã®ã³ã³ããã¹ãï¼ä¾ãã° Node.jsï¼ã§ä½¿ããã¨ãããã¾ãã
è¤éãªããã¸ã§ã¯ãã§ã¯ãå¿ è¦ã«å¿ã㦠JavaScript ããã°ã©ã ãå¥åã®ã¢ã¸ã¥ã¼ã«ã«åå²ããã¤ã³ãã¼ãã§ããä»çµã¿ãå¿ è¦ã§ãã Node.js ã¯é·å¹´ãã®æ©è½ãæä¾ãã¦ãããã¢ã¸ã¥ã¼ã«ã®å©ç¨ãå¯è½ã«ãã JavaScript ã©ã¤ãã©ãªã¼ããã¬ã¼ã ã¯ã¼ã¯ãæ°å¤ãããã¾ãï¼ä¾ãã°ãä»ã® CommonJS ããAMD ãã¼ã¹ã®ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã§ãã RequireJSã webpack ã Babelï¼ã
ç¾è¡ã®ãã©ã¦ã¶ã¼ã¯ãã¹ã¦ããã©ã³ã¹ãã¤ã«ãå¿ è¦ã¨ããã«ã¢ã¸ã¥ã¼ã«æ©è½ã«ãã¤ãã£ãã§å¯¾å¿ãã¦ãã¾ããããã¯è¯ããã¨ã§ããã«éãããã¾ããããã©ã¦ã¶ã¼ã¯ã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ãæé©åãããã¨ãã§ããã©ã¤ãã©ãªã¼ã使ç¨ãã¦ã¯ã©ã¤ã¢ã³ãå´ã§ä½åãªå¦çãä½åãªã©ã¦ã³ãããªãããè¡ããããå¹ççã§ãããããã webpack ã®ãããªãã³ãã©ã¼ãä¸è¦ã«ãªãããã§ã¯ããã¾ããããã³ãã©ã¼ã¯ãã³ã¼ããåççãªãµã¤ãºã®å¡ã«åå²ãã使¥ã«ä¾ç¶ã¨ãã¦åªãã¦ãããã¾ãããããã¡ã¤ããããã³ã¼ãã®æé¤ãããªã¼ã·ã§ã¤ã¯ãªã©ã®æé©åãå¯è½ã§ãã
ä¾ã®ç´¹ä»ã¢ã¸ã¥ã¼ã«ã®ä½¿ãæ¹ãç´¹ä»ããããã«ãGitHub ä¸ã«ä¸é£ã®ä¾ãä½ãã¾ããããããã¯ãã¦ã§ããã¼ã¸ã« <canvas>
è¦ç´ ã追å ãããã®ãã£ã³ãã¹ä¸ã«ããã¤ãã®ç°ãªãå³å½¢ï¼ã¨ãããã«é¢ããã¬ãã¼ãï¼ãæç»ããã¢ã¸ã¥ã¼ã«ã®ä¾ã§ãã
ãã®ãããªæ©è½ã¯ãã¾ãå½¹ã«ç«ã¡ã¾ããããã¢ã¸ã¥ã¼ã«ã®èª¬æãæç¢ºã«ãªãããã«æå³çã«åç´ã«ãã¦ãã¾ãã
ã¡ã¢: 使ç¨ä¾ããã¦ã³ãã¼ããã¦ãã¼ã«ã«å®è¡ããå ´åããã¼ã«ã«ã®ã¦ã§ããµã¼ãã¼ä¸ã§å®è¡ããå¿ è¦ãããã¾ãã
åºæ¬çãªæ§é ã®ä¾æåã®ä¾ (basic-modules ãåç §) ã¯ã次ã®ãããªãã¡ã¤ã«æ§é ã«ãªã£ã¦ãã¾ãã
index.html main.js modules/ canvas.js square.js
ã¡ã¢: ãã®ã¬ã¤ãã®ä½¿ç¨ä¾ã®ãã¡ã¤ã«æ§é ã¯ãå ¨ã¦åºæ¬çã«åä¸ã§ãã®ã§ãä¸è¨ã®ãã¡ã¤ã«æ§é ãããè¦ããã¨ã«ãªãã§ãããã
modules ãã£ã¬ã¯ããªã¼ã«ã¯ã次㮠2 ã¤ã®ã¢ã¸ã¥ã¼ã«ãããã¾ãã
canvas.js
â ãã£ã³ãã¹ã®è¨å®ã«é¢ããæ¬¡ã®é¢æ°ãæã¡ã¾ãã
create()
â æå®ããã width
㨠height
ãæã¤ãã£ã³ãã¹ããæå®ããã ID ãæã¤ã©ããã¼ <div>
ã®ä¸ã«ä½æãããã®ã©ããã¼ div èªä½ãæå®ããã親è¦ç´ ã®ä¸ã«è¿½å ãã¾ããè¿å¤ã¯ããã£ã³ãã¹ã® 2D ã³ã³ããã¹ãã¨ã©ããã¼ã® ID ãæã¤ãªãã¸ã§ã¯ãã§ããcreateReportList()
â é åºãªããªã¹ããæå®ãããã©ããã¼è¦ç´ ã®ä¸ã«ä½æãããããã¬ãã¼ããã¼ã¿ãåºåããããã«ä½¿ããã¨ãã§ãã¾ããè¿å¤ã¯ããªã¹ãã® ID ã§ããsquare.js
â æ¬¡ã®ãã®ãæã¡ã¾ãã
name
âæåå 'square' ãå
容ã¨ãã宿°ã§ããdraw()
â æ£æ¹å½¢ããæå®ããããã£ã³ãã¹ä¸ã«ãæå®ããã辺ã®é·ããä½ç½®ãè²ã使ã£ã¦æç»ãã¾ããè¿å¤ã¯ãæ£æ¹å½¢ã®è¾ºã®é·ããä½ç½®ãè²ãæã¤ãªãã¸ã§ã¯ãã§ããreportArea()
â æå®ããã辺ã®é·ããæã¤æ£æ¹å½¢ã®é¢ç©ããæå®ãããã¬ãã¼ãç¨ã®ãªã¹ãã«æ¸ãåºãã¾ããreportPerimeter()
â æå®ããã辺ã®é·ããæã¤æ£æ¹å½¢ã®å¨å²ã®é·ãããæå®ãããã¬ãã¼ãç¨ã®ãªã¹ãã«æ¸ãåºãã¾ãããã®è¨äºã§ã¯ã¢ã¸ã¥ã¼ã«ãã¡ã¤ã«ã« .js
ã®æ¡å¼µåã使ç¨ãã¦ãã¾ãããä»ã®è¨äºã§ã¯ .mjs
ã¨ããæ¡å¼µåã使ç¨ããã¦ããã®ãç®ã«ãããã¨ãããããããã¾ãããä¾ãã°ãV8 ã®ããã¥ã¡ã³ãã§ã¯ãããæ¨å¥¨ãã¦ãã¾ããçç±ã¯ä»¥ä¸ã®éãã§ãã
ããããå°ãªãã¨ãä»ã®ã¨ãã㯠.js
ã使ãç¶ãããã¨ã«ãã¾ããããã©ã¦ã¶ã¼ã§ã¢ã¸ã¥ã¼ã«ãæ£ããåä½ãããããã«ã¯ããµã¼ãã¼ã Content-Type
ãããã¼ã§ JavaScript ã® MIME ã¿ã¤ããä¾ãã° text/javascript
ãªã©ãå«ãã¦æä¾ãã¦ãããã¨ã確èªããå¿
è¦ãããã¾ããããããªãã¨ã"The server responded with a non-JavaScript MIME type" ã®ãããªå³æ ¼ãª MIME ã¿ã¤ããã§ãã¯ã¨ã©ã¼ã表示ããããã©ã¦ã¶ã¼ã¯ JavaScript ãå®è¡ãã¾ãããã»ã¨ãã©ã®ãµã¼ãã¼ã§ã¯ã.js
ãã¡ã¤ã«ã«ã¯ãã§ã«æ£ãã MIME ã¿ã¤ããè¨å®ããã¦ãã¾ããã.mjs
ãã¡ã¤ã«ã«ã¯ã¾ã è¨å®ããã¦ãã¾ããããã§ã« .mjs
ãã¡ã¤ã«ãæ£ããæä¾ãã¦ãããµã¼ãã¼ã«ã¯ãGitHub Pages ã Node.js ã® http-server
ãªã©ãããã¾ãã
ããã¯ããã§ã«ãã®ãããªç°å¢ã使ç¨ãã¦ããå ´åããä»ã¯ã¾ã 使ç¨ãã¦ããªãããä½ããã¦ãããç¥ã£ã¦ãã¦ã¢ã¯ã»ã¹ã§ããå ´åã«ã¯åé¡ããã¾ããï¼ã¤ã¾ãã.mjs
ãã¡ã¤ã«ã«æ£ãã Content-Type
ãè¨å®ããããã«ãµã¼ãã¼ãè¨å®ãããã¨ãã§ãã¾ãï¼ãããããããªãããã¡ã¤ã«ãæä¾ãã¦ãããµã¼ãã¼ãå¶å¾¡ã§ããªãå ´åã«ã¯ãæ··ä¹±ãå¼ãèµ·ããå¯è½æ§ãããã¾ãã
ãã®è¨äºã§ã¯å¦ç¿ã¨ç§»æ¤æ§ãèæ
®ãã¦ã.js
ã使ç¨ãããã¨ã«ãã¾ããã
é常㮠JavaScript ãã¡ã¤ã«ã« .js
ã使ç¨ããã®ã¨æ¯è¼ãã¦ãã¢ã¸ã¥ã¼ã«ã« .mjs
ã使ç¨ãããã¨ã®æç¢ºããæ¬å½ã«éè¦ãã¦ããããä¸è¨ã®åé¡ã«ç´é¢ããããªãå ´åã¯ãéçºä¸ã« .mjs
ã使ç¨ãããã«ãã¹ãããã§ .js
ã«å¤æãããã¨ããããããã¾ãã
ã¾ããæ¬¡ã®ç¹ã«ã注æãã¦ãã ããã
.mjs
ã«å¯¾å¿ãã¦ããªããã¨ãããã¾ãã<script type="module">
屿§ã使ç¨ãã¦ãã ãããã¢ã¸ã¥ã¼ã«ãæã¤æ©è½ã«ã¢ã¯ã»ã¹ããããã«æåã«å¿
è¦ãªãã¨ã¯ããã®ãããªæ©è½ãã¨ã¯ã¹ãã¼ããããã¨ã§ãããã㯠export
æã使ã£ã¦è¡ãã¾ãã
æãç°¡åãªä½¿ãæ¹ã¯ãã¢ã¸ã¥ã¼ã«å¤é¨ã«å
¬éãããé
ç®ã®åã« export
ãã¤ãããã¨ã§ãã
export const name = "square";
export function draw(ctx, length, x, y, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, length, length);
return { length, x, y, color };
}
ã¨ã¯ã¹ãã¼ãã§ãããã®ã¯ã颿°ãvar
ãlet
ãconst
ãããã³å¾è¿°ããã¯ã©ã¹ã§ãããããã¯æä¸ä½ã®é層ã«ããå¿
è¦ãããã¾ããä¾ãã°ã颿°å
ã§ export
ã使ããã¨ã¯ã§ãã¾ããã
ã¨ã¯ã¹ãã¼ããããå ¨ã¦ã®é ç®ãã¨ã¯ã¹ãã¼ããããã便å©ãªæ¹æ³ã¯ãã¢ã¸ã¥ã¼ã«ãã¡ã¤ã«ã®æ«å°¾ã«åä¸ã® export æã追å ãããã®å¾ã«ã¨ã¯ã¹ãã¼ããããæ©è½ã®ã«ã³ãåºåããªã¹ããä¸ãã£ãã§å²ãã§ç¶ãããã¨ã§ããä¾ãã°æ¬¡ã®ããã«ãã¾ãã
export { name, draw, reportArea, reportPerimeter };
ã¹ã¯ãªããã¸ã®æ©è½ã®ã¤ã³ãã¼ã
ã¢ã¸ã¥ã¼ã«ããä½ããã®æ©è½ãã¨ã¯ã¹ãã¼ãããå¾ã¯ããããã使ããããã«ããããã«ã¹ã¯ãªããã«ã¤ã³ãã¼ãããå¿ è¦ãããã¾ãããã®æãåç´ãªæ¹æ³ã¯æ¬¡ã®ã¨ããã§ãã
import { name, draw, reportArea, reportPerimeter } from "./modules/square.js";
import
æã®å¾ãã«ãä¸ãã£ãã§å²ã¾ããã¤ã³ãã¼ããããæ©è½ã®ã«ã³ãåºåããªã¹ããç¶ãããã®å¾ãã« from
ãã¼ã¯ã¼ãã¨ãã¢ã¸ã¥ã¼ã«æå®åãç¶ãã¾ãã
ã¢ã¸ã¥ã¼ã«æå®åã¯ãJavaScript ç°å¢ãã¢ã¸ã¥ã¼ã«ãã¡ã¤ã«ã¸ã®ãã¹ã解決ã§ããæååãæä¾ãã¾ãã ãã©ã¦ã¶ã¼ã§ã¯ãããã¯ãµã¤ãã«ã¼ãããã®ç¸å¯¾ãã¹ã¨ãªããbasic-modules
ã®ä¾ã§ã¯ /js-examples/module-examples/basic-modules
ã¨ãªãã¾ãã ããããããã§ã¯ä»£ããã«ãããï¼.
ï¼æ§æã使ç¨ãã¦ããç¾å¨ã®å ´æããæå³ãã¦ããããã®å¾ã«æ¢ããã¨ãã¦ãããã¡ã¤ã«ã¸ã®ç¸å¯¾ãã¹ãè¨è¿°ãã¦ãã¾ããç¸å¯¾ãã¹ã®æ¹ãçãããURL ã®ç§»æ¤æ§ãé«ãã®ã§ããã®ä¾ã¯ãµã¤ãé層ã®å¥ã®å ´æã«ç§»ãã¦ã使¥ãããã¨ãã§ãã¾ãããã絶対ãã¹å
¨ä½ãæ¯åæ¸ãåºãããããã£ã¨ããã§ãããã
ãã®ãããæ¬¡ã®ãããªãã¹ã¯ã
/js-examples/module-examples/basic-modules/modules/square.js
次ã®ããã«æ¸ããã¨ãã§ãã¾ãã
ãã®ãããªæ¸ãæ¹ã®åä½ãã¦ããä¾ã¯ main.js
ã«ããã¾ãã
ã¡ã¢: ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã®ä¸ã«ã¯ãç¸å¯¾ãã¹ã§ã絶対ãã¹ã§ããªãããã¡ã¤ã«æ¡å¼µåããªã modules/square
ã®ãããªã¢ã¸ã¥ã¼ã«æå®ã使ç¨ãããã®ãããã¾ãã ãã®ãããªæå®åã¯ãæåã«ã¤ã³ãã¼ãããããå®ç¾©ãã¦ããã°ããã©ã¦ã¶ã¼ç°å¢ã§ã使ç¨ã§ãã¾ãã
ã¹ã¯ãªããã¸æ©è½ãã¤ã³ãã¼ãããã¨ãåããã¡ã¤ã«å
ã§å®ç¾©ããã¦ããã®ã¨åãããã«ä½¿ããã¨ãã§ãã¾ããæ¬¡ã®ã³ã¼ãã¯ãmain.js
ã§ã¤ã³ãã¼ãã«ç¶ãé¨åã§ãã
const myCanvas = create("myCanvas", document.body, 480, 320);
const reportList = createReportList(myCanvas.id);
const square1 = draw(myCanvas.ctx, 50, 50, 100, "blue");
reportArea(square1.length, reportList);
reportPerimeter(square1.length, reportList);
ã¡ã¢: ã¤ã³ãã¼ããããå¤ã¯ãã¨ã¯ã¹ãã¼ããããæ©è½ã®èªã¿åãå°ç¨ãã¥ã¼ã¨ãªãã¾ããconst
夿°ã¨åæ§ã«ãã¤ã³ãã¼ãããã夿°ãå代å
¥ãããã¨ã¯ã§ãã¾ãããããªãã¸ã§ã¯ãå¤ã®ããããã£ã夿´ãããã¨ã¯å¯è½ã§ããå¤ãå代å
¥ãããã¨ãã§ããã®ã¯ããã®å¤ãã¨ã¯ã¹ãã¼ããã¦ããã¢ã¸ã¥ã¼ã«ã ãã§ããä¾ã¨ãã¦ãimport
ã®ãªãã¡ã¬ã³ã¹ ãåç
§ãã¦ãã ããã
ãã©ã¦ã¶ã¼ãã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããã®ã«ã絶対 URL ããææ¸ã®ãã¼ã¹ URL ã使ç¨ãã¦è§£æ±ºãããç¸å¯¾ URL ã§ããã¢ã¸ã¥ã¼ã«æå®åã使ç¨ããæ¹æ³ã¯ãåè¿°ããã¨ããã§ãã
import { name as squareName, draw } from "./shapes/square.js";
import { name as circleName } from "https://example.com/shapes/circle.js";
ã¤ã³ãã¼ããããã«ãããã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããã¨ãã«ãã¢ã¸ã¥ã¼ã«æå®åã§ã»ã¼å ¨ã¦ã®å¥½ããªããã¹ãã代ããã«æå®ãããã¨ãã§ãã¾ãããã®ãããã¯ãã¢ã¸ã¥ã¼ã«ã® URL ã解決ãããã¨ãã«ããã¹ããç½®ãæãã対å¿ããå¤ãæä¾ãã¾ãã
ä¾ãã°ãä¸è¨ã®ã¤ã³ãã¼ããããã® imports
ãã¼ã¯ããã¢ã¸ã¥ã¼ã«æå®ããããJSON ãªãã¸ã§ã¯ããå®ç¾©ããããããã£åãã¢ã¸ã¥ã¼ã«æå®åã¨ãã¦ä½¿ç¨ã§ãããã©ã¦ã¶ã¼ãã¢ã¸ã¥ã¼ã« URL ã解決ããéã«å¯¾å¿ããå¤ã代å
¥ããã¾ãã å¤ã¯ã絶対 URL ã¾ãã¯ç¸å¯¾ URL ã§ãªããã°ãªãã¾ããã ç¸å¯¾ URL ã¯ãã¤ã³ãã¼ãããããå«ãææ¸ã®ãã¼ã¹ URL ã使ç¨ãã¦çµ¶å¯¾ URL ã¢ãã¬ã¹ã«è§£æ±ºããã¾ãã
<script type="importmap">
{
"imports": {
"shapes": "./shapes/square.js",
"shapes/square": "./modules/shapes/square.js",
"https://example.com/shapes/square.js": "./shapes/square.js",
"https://example.com/shapes/": "/shapes/square/",
"../shapes/square": "./shapes/square.js"
}
}
</script>
ã¤ã³ãã¼ãããã㯠<script>
è¦ç´ ã®ä¸ã® JSON ãªãã¸ã§ã¯ã ã§ã type
屿§ã importmap
ã«è¨å®ãã¦å®ç¾©ãããã¨ãã§ãã¾ãã ææ¸å
ã«ç½®ããã¤ã³ãã¼ãããã㯠1 ã¤ã ãã§ãéçã¤ã³ãã¼ãã¨åçã¤ã³ãã¼ãã®ä¸¡æ¹ã§ã©ã®ã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¾ãããã解決ããããã«ä½¿ç¨ã§ããã®ã§ãã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããã <script>
è¦ç´ ã®åã«å®£è¨ããå¿
è¦ãããã¾ãã ã¤ã³ãã¼ããããã¯ææ¸å
ã®ç¹å®ã®è¦ç´ ã«ã®ã¿é©ç¨ããããã¨ã«æ³¨æãã¦ãã ããã仿§ã§ã¯ãã¯ã¼ã«ã¼ãã¯ã¼ã¯ã¬ããã®ã³ã³ããã¹ãã§ã¤ã³ãã¼ãããããé©ç¨ããæ¹æ³ã«ã¤ãã¦ã¯ã«ãã¼ããã¦ãã¾ããã
ãã®ãããã§ãä¸è¨ã®ããããã£åãã¢ã¸ã¥ã¼ã«æå®åã¨ãã¦ä½¿ç¨ãããã¨ãã§ããããã«ãªãã¾ããã ã¢ã¸ã¥ã¼ã«æå®åãã¼ã«æ«å°¾ã®ã¹ã©ãã·ã¥ããªãå ´åã¯ãã¢ã¸ã¥ã¼ã«æå®åãã¼å ¨ä½ãç §åããã¦ç½®æããã¾ãã ä¾ã説æããã¨ãä¸è¨ã¯ã¢ã¸ã¥ã¼ã«åã¨ä¸è´ããURL ãå¥ã®ãã¹ã«åããããã¦ãã¾ãã
// Bare module names as module specifiers
import { name as squareNameOne } from "shapes";
import { name as squareNameTwo } from "shapes/square";
// Remap a URL to another URL
import { name as squareNameThree } from "https://example.com/shapes/square.js";
ã¢ã¸ã¥ã¼ã«æå®åãæ«å°¾ã«ã¹ã©ãã·ã¥ãããå ´åãå¤ãåæ§ã«ã¹ã©ãã·ã¥ãæã¤å¿ è¦ãããããã¼ã¯ããã¹æ¥é è¾ãã¨ãã¦ç §åããã¾ãã ããã«ãããURL ã®å ¨ã¯ã©ã¹ãåãããã³ã°ãããã¨ãã§ãã¾ãã
// Remap a URL as a prefix ( https://example.com/shapes/)
import { name as squareNameFour } from "https://example.com/shapes/moduleshapes/square.js";
ã¤ã³ãã¼ããããå
ã®è¤æ°ã®ãã¼ãã¢ã¸ã¥ã¼ã«æå®åãæå¹ã«ä¸è´ãããã¨ãããã¾ãã ä¾ãã°ãshapes/circle/
ã¨ããã¢ã¸ã¥ã¼ã«æå®åã¯ãshapes/
㨠shapes/circle/
ã¨ããã¢ã¸ã¥ã¼ã«æå®åãã¼ã¨ä¸è´ããå¯è½æ§ãããã¾ãã ãã®å ´åããã©ã¦ã¶ã¼ã¯æãå
·ä½çãªï¼æãé·ãï¼ã¢ã¸ã¥ã¼ã«æå®ãã¼ã«ä¸è´ãããã®ã鏿ãã¾ãã
ã¤ã³ãã¼ããããã¯ãï¼Node.js ã®ããã«ï¼ç´ ã®ã¢ã¸ã¥ã¼ã«åã使ç¨ãã¦ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ãã§ãããã¡ã¤ã«æ¡å¼µåã®æç¡ã«ããããããããã±ã¼ã¸ããã®ã¤ã³ãã¼ããã·ãã¥ã¬ã¼ããããã¨ãå¯è½ã§ãã ä¸è¨ã§ã¯ç¤ºãã¦ãã¾ããããã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããã¹ã¯ãªããã®ãã¹ã«åºã¥ãã¦ãç¹å®ã®ãã¼ã¸ã§ã³ã®ã©ã¤ãã©ãªã¼ãã¤ã³ãã¼ããããã¨ãã§ãã¾ãã ä¸è¬çã«ããããã¯éçºè ããã人éã«åªããã¤ã³ãã¼ãã³ã¼ããæ¸ããã¨ãå¯è½ã«ãããµã¤ãã§ä½¿ç¨ãããã¢ã¸ã¥ã¼ã«ã®ç°ãªããã¼ã¸ã§ã³ã¨ä¾åé¢ä¿ã管çãããã¨ã容æã«ãã¾ãã ããã«ããããã©ã¦ã¶ã¼ã¨ãµã¼ãã¼ã®ä¸¡æ¹ã§åã JavaScript ã©ã¤ãã©ãªã¼ã使ç¨ããããã«å¿ è¦ãªå´åã縮å°ãããã¨ãã§ãã¾ãã
以ä¸ã®ç¯ã§ã¯ãä¸è¨ã§èª¬æããæ§ã ãªæ©è½ã«ã¤ãã¦ãããã«è©³ãã説æãã¾ãã
æ©è½æ¤åºã¤ã³ãã¼ããããã«å¯¾å¿ãã¦ãããã©ããã¯ãHTMLScriptElement.supports()
éçã¡ã½ããã使ç¨ãã¦ãã§ãã¯ãããã¨ãã§ãã¾ãï¼ããèªä½ã¯åºã対å¿ãã¦ãã¾ãï¼ã
if (HTMLScriptElement.supports?.("importmap")) {
console.log("Browser supports import maps.");
}
ã¢ã¸ã¥ã¼ã«ã®ç´ ã®ååã§ã®ã¤ã³ãã¼ã
Node.js ã®ãããªä¸é¨ã® JavaScript ç°å¢ã§ã¯ãã¢ã¸ã¥ã¼ã«æå®åã«ç´ ã®ååã使ç¨ãããã¨ãã§ãã¾ãã ããã¯ãç°å¢ãã¢ã¸ã¥ã¼ã«åããã¡ã¤ã«ã·ã¹ãã å ã®æ¨æºçãªå ´æã«è§£æ±ºãããã¨ãã§ãããããåä½ãã¾ãã ä¾ãã°ã "square" ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããããã«ã以ä¸ã®æ§æã使ç¨ãããã¨ãã§ãã¾ãã
import { name, draw, reportArea, reportPerimeter } from "square";
ãã©ã¦ã¶ã¼ã§ç´ ã®ååã使ç¨ããã«ã¯ãã¤ã³ãã¼ãããããå¿
è¦ã§ããããã¯ããã©ã¦ã¶ã¼ãã¢ã¸ã¥ã¼ã«æå®åã URL ã«è§£æ±ºããããã«å¿
è¦ãªæ
å ±ãæä¾ãã¾ãï¼JavaScript ã¯ãã¢ã¸ã¥ã¼ã«ã®å ´æã«è§£æ±ºã§ããªãã¢ã¸ã¥ã¼ã«æå®åãã¤ã³ãã¼ããããã¨ãã㨠TypeError
ãçºçãã¾ãï¼ã
ä¸è¨ã¯ square
ã¨ããã¢ã¸ã¥ã¼ã«æå®åã®ãã¼ãå®ç¾©ãããããã§ããããã®å ´åãç¸å¯¾ã¢ãã¬ã¹ã®å¤ã«å²ãå½ã¦ããã¾ããã
<script type="importmap">
{
"imports": {
"square": "./shapes/square.js"
}
}
</script>
ãã®ãããã«ãããã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããã¨ãã«ç´ ã®ååã使ç¨ãããã¨ãã§ããããã«ãªãã¾ããã
import { name as squareName, draw } from "square";
ã¢ã¸ã¥ã¼ã«ã®ãã¹ã®åãããã³ã°
ã¢ã¸ã¥ã¼ã«æå®åãããã®é
ç®ã§ãæå®åãã¼ã¨ãã®é¢é£å¤ã«æ«å°¾ã®ãã©ã¯ã¼ãã¹ã©ãã·ã¥ (/
) ãããå ´åããã¹æ¥é è¾ã¨ãã¦ä½¿ç¨ãããã¨ãã§ãã¾ãã ããã«ãããã¤ã³ãã¼ã URL ã®éåå
¨ä½ããããå ´æããå¥ã®å ´æã«åãããã³ã°ãããã¨ãã§ãã¾ãã ã¾ããNode ã®ç°å¢ã§è¦ããããããªãããã±ã¼ã¸ã¨ã¢ã¸ã¥ã¼ã«ãã®ä½æ¥ãã¨ãã¥ã¬ã¼ãããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
ã¡ã¢: æ«å°¾ã® /
ã¯ãã¢ã¸ã¥ã¼ã«æå®åãã¼ãã¢ã¸ã¥ã¼ã«æå®åã®ä¸é¨ã¨ãã¦æå®ãããã¨ãã§ãããã¨ã示ãã¾ãã ãããåå¨ããªãå ´åããã©ã¦ã¶ã¼ã¯ã¢ã¸ã¥ã¼ã«æå®åãã¼å
¨ä½ã«ã®ã¿ä¸è´ãã¾ãï¼ç½®æãã¾ãï¼ã
以ä¸ã® JSON ã¤ã³ãã¼ããããå®ç¾©ã¯ãlodash
ãç´ ã®ååã¨ãã¦ãã¢ã¸ã¥ã¼ã«æå®è¾ lodash/
ããã¹ /node_modules/lodash-es/
ï¼ææ¸ã®ãã¼ã¹ URL ã«è§£æ±ºï¼ã«å²ãå½ã¦ããã®ã§ãã
{
"imports": {
"lodash": "/node_modules/lodash-es/lodash.js",
"lodash/": "/node_modules/lodash-es/"
}
}
ãã®ãããã³ã°ã使ç¨ããã¨ãç´ ã®ååã使ç¨ãããããã±ã¼ã¸ãå ¨ä½ã¨ãï¼ãã¹ãããã³ã°ã使ç¨ããï¼ãã®ä¸ã®ã¢ã¸ã¥ã¼ã«ã®ä¸¡æ¹ãã¤ã³ãã¼ããããã¨ãã§ãã¾ãã
import _ from "lodash";
import fp from "lodash/fp.js";
ä¸è¨ã® fp
ã .js
ã¨ãããã¡ã¤ã«æ¡å¼µåãªãã§ã¤ã³ãã¼ããããã¨ã¯å¯è½ã§ããããã¹ã使ç¨ããã®ã§ã¯ãªããlodash/fp
ã¨ããããã«ããã®ãã¡ã¤ã«ã«å¯¾ãã¦ç´ ã®ã¢ã¸ã¥ã¼ã«æå®åãã¼ã使ããå¿
è¦ãããã¾ãã ããã¯ã1 ã¤ã®ã¢ã¸ã¥ã¼ã«ã ããªã妥å½ããããã¾ããããå¤ãã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããå ´åã«ã¯ãæ¡å¤§ç¸®å°ãããã¨ã«ãªãã¾ãã
ã¢ã¸ã¥ã¼ã«æå®ãã¼ã¯ãã¹ã§ããå¿
è¦ã¯ãªãã絶対 URLï¼ã¾ã㯠./
, ../
, /
ã®ãã㪠URL ã©ã¤ã¯ãªç¸å¯¾ãã¹ï¼ã§ãã£ã¦ããã¾ãã¾ããã ããã¯ããªã½ã¼ã¹ã¸ã®çµ¶å¯¾ãã¹ãæã¤ã¢ã¸ã¥ã¼ã«ãèªåèªèº«ã§ãã¼ã«ã«ãªã½ã¼ã¹ã¨åãããã³ã°ãããå ´åã«æç¨ãªå ´åãããã¾ãã
{
"imports": {
"https://www.unpkg.com/moment/": "/node_modules/moment/"
}
}
ãã¼ã¸ã§ã³ç®¡çã®ããã®ã¹ã³ã¼ãä»ãã¢ã¸ã¥ã¼ã«
Node ã®ãããªç°å¢ã§ã¯ãã¢ã¸ã¥ã¼ã«ã¨ãã®ä¾åé¢ä¿ã管çããããã« npm ã®ãããªããã±ã¼ã¸ããã¼ã¸ã£ã¼ã使ç¨ãã¾ãã ããã±ã¼ã¸ããã¼ã¸ã£ã¼ã¯ãåã¢ã¸ã¥ã¼ã«ãä»ã®ã¢ã¸ã¥ã¼ã«ããã®ä¾åé¢ä¿ãã確å®ã«åºåãããããã«ãã¾ãã ãã®çµæãè¤éãªã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãã¢ã¸ã¥ã¼ã«ã°ã©ãã®ç°ãªãé¨åã«è¤æ°ã®ç°ãªããã¼ã¸ã§ã³ã§åãã¢ã¸ã¥ã¼ã«ãè¤æ°åè¨è¼ãããã¨ãã§ãã¾ãããã¦ã¼ã¶ã¼ã¯ãã®è¤éãã«ã¤ãã¦èããå¿ è¦ã¯ããã¾ããã
ã¡ã¢: ç¸å¯¾ãã¹ã使ç¨ãã¦ãã¼ã¸ã§ã³ç®¡çãè¡ããã¨ãã§ãã¾ããããã®æ¹æ³ã¯ä»ã«ããèªåã®ããã¸ã§ã¯ãã«ç¹å®ã®æ§é ãå¼·å¶ããç´ ã®ã¢ã¸ã¥ã¼ã«åã使ç¨ãããã¨ãã§ããªããªã©ã®ç¹ã§å£ãã¾ãã
ã¤ã³ãã¼ãããããåæ§ã«ãã¢ããªã±ã¼ã·ã§ã³ã«è¤æ°ã®ãã¼ã¸ã§ã³ã®ä¾åé¢ä¿ãä¿æããåãã¢ã¸ã¥ã¼ã«æå®åã使ç¨ãã¦ããããåç
§ãããã¨ãã§ãã¾ãã ãããå®è£
ããããã« scopes
ãã¼ã使ç¨ãã¾ãããã®ãã¼ã§ã¯ãã¤ã³ãã¼ããå®è¡ããã¹ã¯ãªããã®ãã¹ã«å¿ãã¦ä½¿ç¨ãããã¢ã¸ã¥ã¼ã«æå®åããããæä¾ãããã¨ãã§ãã¾ãã ä¸è¨ã®ä¾ã§ã¯ãããã宿¼ãã¦ãã¾ãã
{
"imports": {
"cool-module": "/node_modules/cool-module/index.js"
},
"scopes": {
"/node_modules/dependency/": {
"cool-module": "/node_modules/some/other/location/cool-module/index.js"
}
}
}
ãã®ãããã³ã°ã§ã¯ã /node_modules/dependency/
ãæ ¼ç´ãã URL ã®ã¹ã¯ãªããã cool-module
ãã¤ã³ãã¼ããã¦ããå ´åã /node_modules/some/other/location/cool-module/index.js
ã«ãããã¼ã¸ã§ã³ã使ç¨ããã¾ãã imports
ã®ãããã¯ãã¹ã³ã¼ãããããããã«ä¸è´ããã¹ã³ã¼ãããªãå ´åãã¾ãã¯ä¸è´ããã¹ã³ã¼ãã«ä¸è´ããæå®ãããã®ãæ ¼ç´ããã¦ããªãå ´åã«ãäºåã¨ãã¦ä½¿ç¨ããã¾ããä¾ãã°ãcool-module
ãã¹ã³ã¼ããã¹ã«ä¸è´ããªãã¹ã¯ãªããããã¤ã³ãã¼ããããå ´åã代ããã« imports
ã®ã¢ã¸ã¥ã¼ã«æå®åãããã使ç¨ãã /node_modules/cool-module/index.js
ã«ãããã¼ã¸ã§ã³ã«ãããã³ã°ãã¾ãã
ãªããã¹ã³ã¼ãã鏿ããããã«ä½¿ç¨ããããã¹ã¯ãã¢ãã¬ã¹ã®è§£æ±ºæ¹æ³ã«ã¯å½±é¿ãã¾ããã å²ãå½ã¦ããããã¹ã®å¤ãã¹ã³ã¼ãã®ãã¹ã¨ä¸è´ããå¿ è¦ã¯ããã¾ããããç¸å¯¾ãã¹ã¯ä¾ç¶ã¨ãã¦ã¤ã³ãã¼ãããããæ ¼ç´ããã¹ã¯ãªããã®ãã¼ã¹ URL ã«è§£æ±ºããã¾ãã
ã¢ã¸ã¥ã¼ã«æå®åãããã®å ´åã¨åæ§ã«ãå¤ãã®ã¹ã³ã¼ããã¼ãä¿æãããã¨ãã§ãããããã«ã¯éè¤ãããã¹ãæ ¼ç´ãããå¯è½æ§ãããã¾ãã è¤æ°ã®ã¹ã³ã¼ãããªãã¡ã©ã¼URLã«ä¸è´ããå ´åãæãåºæã®ã¹ã³ã¼ããã¹ãæåã«ï¼æãé·ãã¹ã³ã¼ããã¼ãï¼æå®åãæå®ããªãã調ã¹ããã¾ãã ãã©ã¦ã¶ã¼ã¯ãä¸è´ãã仿§ããªãå ´åãæ¬¡ã«ä¸è´ããã»ã¨ãã©ã®ã¹ã³ã¼ããã¹ã«ãã©ã¼ã«ããã¯ããããã«ãã®å
ã«é²ã¿ã¾ãã ä¸è´ããã¹ã³ã¼ãã®ãããã«ãä¸è´ããæå®åããªãå ´åããã©ã¦ã¶ã¼ã¯ imports
ãã¼ã®ã¢ã¸ã¥ã¼ã«æå®åãããã«ä¸è´ããæå®åããããã©ããã調ã¹ã¾ãã
ã¦ã§ããµã¤ãã§ä½¿ç¨ãããã¹ã¯ãªãããã¡ã¤ã«ã¯ããã£ãã·ã¥ã容æã«ããããã«ããã·ã¥åããããã¡ã¤ã«åã«ãããã¨ãããããã¾ãã ãã®ææ³ã®æ¬ ç¹ã¯ãã¢ã¸ã¥ã¼ã«ã夿´ãããå ´åããã®ããã·ã¥åããããã¡ã¤ã«åã使ç¨ãã¦ãããã¤ã³ãã¼ããããã¹ã¦ã®ã¢ã¸ã¥ã¼ã«ãæ´æ°/åçæããå¿ è¦ããããã¨ã§ãã ãã®ãããæ½å¨çã«æ´æ°ã®ã«ã¹ã±ã¼ããçºçãããããã¯ã¼ã¯ãªã½ã¼ã¹ã浪費ãããã¨ã«ãªãã¾ãã
ã¤ã³ãã¼ããããã¯ããã®åé¡ã«å¯¾ãã便å©ãªè§£æ±ºçãæä¾ãã¾ãã ã¢ããªã±ã¼ã·ã§ã³ãã¹ã¯ãªããã¯ãåºæã®ããã·ã¥åããããã¡ã¤ã«åã§ã¯ãªãã代ããã«ã¢ã¸ã¥ã¼ã«åï¼ã¢ãã¬ã¹ï¼ã®ããã·ã¥åããã¦ããªããã¼ã¸ã§ã³ã«ä¾åãã¾ãã ä¸è¨ã®ãããªã¤ã³ãã¼ããããã¯ãå®éã®ã¹ã¯ãªãããã¡ã¤ã«ã¸ã®ãããã³ã°ãæä¾ãã¾ãã
{
"imports": {
"main_script": "/node/srcs/application-fg7744e1b.js",
"dependency_script": "/node/srcs/dependency-3qn7e4b1q.js"
}
}
ãã dependency_script
ã夿´ãããå ´åããã¡ã¤ã«åã«æ ¼ç´ããã¦ããããã·ã¥ã夿´ããã¾ãããã®å ´åãã¢ã¸ã¥ã¼ã«ã®ååã®å¤æ´ãåæ ããããã«ã¤ã³ãã¼ã ããããæ´æ°ããã ãã§ãããªãã¾ãã import æã®æå®åã¯å¤ãããªãã®ã§ãããã«ä¾åãã JavaScript ã³ã¼ãã®ã½ã¼ã¹ãæ´æ°ããå¿
è¦ã¯ããã¾ããã
çµ±ä¸ãããã¢ã¸ã¥ã¼ã«ã¢ã¼ããã¯ãã£ãããããé
åçãªæ©è½ã®ã²ã¨ã¤ã«ãJavaScript以å¤ã®ãªã½ã¼ã¹ãã¢ã¸ã¥ã¼ã«ã¨ãã¦èªã¿è¾¼ãæ©è½ãããã¾ããä¾ãã°ã JSON ã JavaScript ãªãã¸ã§ã¯ãã¨ãã¦ãã¾ã㯠CSS ã CSSStyleSheet
ãªãã¸ã§ã¯ãã¨ãã¦ã¤ã³ãã¼ããããã¨ãã§ãã¾ãã
ã¤ã³ãã¼ããããªã½ã¼ã¹ã®ç¨®é¡ãæç¤ºçã«å®£è¨ããå¿ è¦ãããã¾ãã æ¢å®ã§ã¯ããã©ã¦ã¶ã¼ã¯ãªã½ã¼ã¹ã JavaScript ã§ããã¨æ³å®ãã解決ããããªã½ã¼ã¹ããã以å¤ã®å ´åã«ã¯ã¨ã©ã¼ãçºçãã¾ãã JSONãCSSãã¾ãã¯ãã®ä»ã®ãªã½ã¼ã¹ãã¤ã³ãã¼ãããã«ã¯ãimport 屿§æ§æã使ç¨ãã¾ãã
import colors from "./colors.json" with { type: "json" };
import styles from "./styles.css" with { type: "css" };
ãã©ã¦ã¶ã¼ã¯ã¢ã¸ã¥ã¼ã«åã®æ¤è¨¼ãè¡ãã¾ããä¾ãã°ã./data.json
ã JSON ãã¡ã¤ã«ã«è§£æ±ºãããªãå ´åã¯å¤±æãã¾ããããã«ããããã¼ã¿ãã¤ã³ãã¼ãããã ãã§ã誤ã£ã¦ã³ã¼ããå®è¡ãããªããã¨ãä¿è¨¼ãã¾ããã¤ã³ãã¼ããæ£å¸¸ã«å®äºããã¨ãã¤ã³ãã¼ãããå¤ãé常㮠JavaScript ãªãã¸ã§ã¯ãã¾ã㯠CSSStyleSheet
ãªãã¸ã§ã¯ãã¨ãã¦ä½¿ç¨ãããã¨ãã§ãã¾ãã
console.log(colors.map((color) => color.value));
document.adoptedStyleSheets = [styles];
HTML ã«ã¢ã¸ã¥ã¼ã«ãé©ç¨ãã
次㫠main.js
ã¢ã¸ã¥ã¼ã«ã HTML ãã¼ã¸ã«é©ç¨ããå¿
è¦ãããã¾ããããã¯å°ãéè¦ãªç¹ã«éããããã¾ãããé常ã®ã¹ã¯ãªããããã¼ã¸ã«é©ç¨ããæ¹æ³ã¨ã¨ã¦ãããä¼¼ã¦ãã¾ãã
æåã« type="module"
ã <script>
è¦ç´ ã«å«ãããã¨ã§ããã®ã¹ã¯ãªãããã¢ã¸ã¥ã¼ã«ã§ãããã¨ã宣è¨ãã¾ããmain.js
ãã¤ã³ãã¼ãããã«ã¯ã次ã®ããã«ãã¾ãã
<script type="module" src="main.js"></script>
ã¾ããJavaScript ã³ã¼ãã <script>
è¦ç´ ã®æ¬æå
ã«é
ç½®ãããã¨ã§ãã¢ã¸ã¥ã¼ã«ã®ã¹ã¯ãªããã HTML ãã¡ã¤ã«ã«ç´æ¥åãè¾¼ããã¨ãã§ãã¾ãã
<script type="module">
/* ããã« JavaScript ã¢ã¸ã¥ã¼ã«ã³ã¼ã */
</script>
import
ããã³ export
æã¯ã¢ã¸ã¥ã¼ã«å
ã§ã®ã¿ä½¿ç¨ãããã¨ãã§ããé常ã®ã¹ã¯ãªããã§ã¯ä½¿ç¨ã§ãã¾ããã <script>
è¦ç´ ã« type="module"
屿§ããªããä»ã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ããå ´åãã¨ã©ã¼ãçºçãã¾ããä¾ãã°æ¬¡ã®ãããªå ´åã§ãã
<script>
import _ from "lodash"; // SyntaxError: import declarations may only appear at top level of a module
// ...
</script>
<script src="a-module-using-import-statements.js"></script>
<!-- SyntaxError: import declarations may only appear at top level of a module -->
é常ããã¹ã¦ã®ã¢ã¸ã¥ã¼ã«ãåå¥ã®ãã¡ã¤ã«ã§å®ç¾©ããå¿ è¦ãããã¾ãã HTML ã«ã¤ã³ã©ã¤ã³ã§å®£è¨ãããã¢ã¸ã¥ã¼ã«ã¯ãä»ã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ã¯ã§ãã¾ãããããããã¨ã¯ã¹ãã¼ãããä½ããã®æ å ±ã¯ãä»ã®ã¢ã¸ã¥ã¼ã«ããã¢ã¯ã»ã¹ãããã¨ã¯ã§ãã¾ããï¼URL ãä¿æãã¦ããªãããï¼ã
ã¡ã¢: ã¢ã¸ã¥ã¼ã«ã¨ãã®ä¾åé¢ä¿ã¯ <link>
è¦ç´ ã§ rel="modulepreload"
ãæå®ãããã¨ã§ãäºåèªã¿è¾¼ã¿ãããã¨ãã§ãã¾ãã ããã«ãããã¢ã¸ã¥ã¼ã«ã使ç¨ããæç¹ã§ã®èªã¿è¾¼ã¿æéã大å¹
ã«ç¸®å°ãããã¨ãã§ãã¾ãã
file://
URL ã使ã£ã¦ï¼HTML ãã¡ã¤ã«ãèªã¿è¾¼ããã¨ããã¨ãJavaScript ã¢ã¸ã¥ã¼ã«ã®ã»ãã¥ãªãã£è¦ä»¶ã®ããã«ãCORS ã¨ã©ã¼ãçºçãã¾ãããã¹ãã¯ãµã¼ãã¼çµç±ã§è¡ãå¿
è¦ãããã¾ããdefer
屿§ï¼<script>
ã®å±æ§ ãåç
§ï¼ã使ãå¿
è¦ã¯ããã¾ãããã¢ã¸ã¥ã¼ã«ã¯èªåçã«é
å»¶å®è¡ããã¾ãã<script>
ã¿ã°ã§åç
§ããã¦ãã¦ãä¸åº¦ããå®è¡ããã¾ãããã¢ã¸ã¥ã¼ã«ã§å®ç¾©ãã夿°ã¯ãã°ãã¼ãã«ãªãã¸ã§ã¯ãã«æç¤ºçã«å²ãå½ã¦ãããªãéãããã®ã¢ã¸ã¥ã¼ã«ã®ã¹ã³ã¼ãã«å±ãã¾ããä»ã«ããã°ãã¼ãã«å®ç¾©ãã夿°ã¯ãã¢ã¸ã¥ã¼ã«å ã§å©ç¨ã§ãã¾ããä¾ãã°ã以ä¸ã®ã³ã¼ããæå®ãããå ´åã¯æ¬¡ã®ããã«ãªãã¾ãã
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title></title>
<link rel="stylesheet" href="" />
</head>
<body>
<div id="main"></div>
<script>
// A var statement creates a global variable.
var text = "Hello";
</script>
<script type="module" src="./render.js"></script>
</body>
</html>
/* render.js */
document.getElementById("main").innerText = text;
ã°ãã¼ãã«å¤æ° text
㨠document
ã¯ã¢ã¸ã¥ã¼ã«å
ã§å©ç¨ã§ããã®ã§ããã¼ã¸ã«ã¯ã¾ã Hello
ã表示ããã¾ããï¼ãã®ä¾ãããã¢ã¸ã¥ã¼ã«ã¯å¿
ããã import/export æãå¿
è¦ã¨ããªããã¨ã«ã注æãã¦ãã ãããå¿
è¦ãªãã¨ã¯ãã¨ã³ããªã¼ãã¤ã³ãã« type="module"
ããããã¨ã ãã§ãï¼ã
ããã¾ã§ã¨ã¯ã¹ãã¼ãããæ©è½ã¯ãååä»ãã¨ã¯ã¹ãã¼ã (named export) ã¨ãããã®ã§ããããããã®é
ç®ï¼é¢æ°ãconst
ãªã©ï¼ã¯ãã¨ã¯ã¹ãã¼ãæã«ãã®ååãåç
§ããã¦ãã¤ã³ãã¼ãæã«ããã®ååã§åç
§ããã¾ãã
ã¨ã¯ã¹ãã¼ãã®ç¨®é¡ã«ã¯ãä»ã«ããã©ã«ãã¨ã¯ã¹ãã¼ã (default export) ã¨å¼ã°ãããã®ãããã¾ããããã¯ãã¢ã¸ã¥ã¼ã«ãããã©ã«ãã®æ©è½ãç°¡åã«æã¤ãã¨ãã§ããããã«è¨è¨ããããã®ã§ãã¾ã JavaScript ã®ã¢ã¸ã¥ã¼ã«ãæ¢åã® CommonJS ã AMD ã®ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã¨ç¸äºéç¨ã§ããããã«ãªãã¾ã (Json Orendorff ã«ãã ES6 In Depth: Modules ã§ä¸æã説æããã¦ãã¾ãã"Default exports" ã§æ¤ç´¢ãã¦ã¿ã¦ãã ãã)ã
ã©ã®ããã«åä½ããã説æããã®ã§ã使ç¨ä¾ãã¿ã¦ã¿ã¾ããããbasic-modules ã® square.js
ã«ãã©ã³ãã ãªè²ã大ãããä½ç½®ã®æ£æ¹å½¢ãæã randomSquare()
ã¨ãã颿°ãããã¾ãããã®é¢æ°ãããã©ã«ãã¨ãã¦ã¨ã¯ã¹ãã¼ããããã®ã§ããã¡ã¤ã«ã®æ«å°¾ã«æ¬¡ã®å
å®¹ãæ¸ãã¾ãã
export default randomSquare;
ä¸ãã£ãããªããã¨ã«æ³¨æãã¦ãã ããã
ã¾ãã¯ãexport default
ã颿°ã«è¿½å ãã¦ã次ã®ããã«å¿å颿°ã®ããã«å®ç¾©ãããã¨ãã§ãã¾ãã
export default function (ctx) {
// â¦
}
main.js
ã§ã¯ã次ã®ããã«ãã¦ããã©ã«ãã®é¢æ°ãã¤ã³ãã¼ããã¾ãã
import randomSquare from "./modules/square.js";
ã¤ã³ãã¼ãã®æã«ãä¸ãã£ãããªããã¨ã«æ³¨æãã¦ãã ãããããã¯ãããã©ã«ãã¨ã¯ã¹ãã¼ãã¯ã¢ã¸ã¥ã¼ã«ãã¨ã«ã²ã¨ã¤ããä½ãããrandomSquare
ãããã§ãããã¨ãããã£ã¦ããããã§ããä¸è¨ã¯ãåºæ¬çã«æ¬¡ã®ç°¡ç¥è¡¨ç¾ã§ãã
import { default as randomSquare } from "./modules/square.js";
ã¡ã¢: ã¨ã¯ã¹ãã¼ããããé ç®ã®ååã夿´ããããã«ä½¿ããã as æ§æã«ã¤ãã¦ã¯ã以ä¸ã® ã¤ã³ãã¼ããã¨ã¯ã¹ãã¼ãã®ååã夿´ããã®ç¯ã§èª¬æãã¾ãã
ååã®è¡çªãé¿ããããã¾ã§ã®ã¨ããããã£ã³ãã¹ã«å³å½¢ãæãç§ãã¡ã®ã¢ã¸ã¥ã¼ã«ã¯æ£å¸¸ã«åä½ãã¦ããããã§ããããããåãä¸è§å½¢ãªã©å¥ã®å³å½¢ãæãã¢ã¸ã¥ã¼ã«ã追å ãããã¨ãããã©ããªãã§ãããï¼ ãã®ãããªå³å½¢ã«ã draw()
ã reportArea()
ã®ãããªé¢æ°ãããããããã¾ãããããåãååãæã¤ç°ãªã颿°ãåããããã¬ãã«ã®ã¢ã¸ã¥ã¼ã«ãã¡ã¤ã«ã«ã¤ã³ãã¼ããããã¨ããã¨ãæçµçã«ååã®è¡çªã«ããã¨ã©ã¼ãèµ·ããã§ãããã
幸ããªãã¨ã«ãããã«å¯¾å¦ããæ¹æ³ã¯ããã¤ãããã¾ãããããã«ã¤ãã¦ã次ã®ã»ã¯ã·ã§ã³ã§è¦ã¦ããã¾ãããã
ã¤ã³ãã¼ããã¨ã¯ã¹ãã¼ãã®ååã夿´ããimport
æã export
æã®ä¸ãã£ãã®ä¸ã§ã¯ããã¼ã¯ã¼ã as
ã¨æ°ããååã使ããã¨ã§ããããã¬ãã«ã®ã¢ã¸ã¥ã¼ã«ã§ãã®æ©è½ã使ãã¨ãã®ååã夿´ãããã¨ãã§ãã¾ãã
ä¾ãã°ã次ã®ã©ã¡ããåãä»äºããã¾ãããå°ãç°ãªãæ¹æ³ã§è¡ãã¾ãã
// module.js ã®å
é¨
export { function1 as newFunctionName, function2 as anotherNewFunctionName };
// main.js ã®å
é¨
import { newFunctionName, anotherNewFunctionName } from "./modules/module.js";
// module.js ã®å
é¨
export { function1, function2 };
// main.js ã®å
é¨
import {
function1 as newFunctionName,
function2 as anotherNewFunctionName,
} from "./modules/module.js";
å®éã®ä¾ãè¦ã¦ã¿ã¾ããããrenaming ãã£ã¬ã¯ããªã¼ã§ã¯ãåã®ä½¿ç¨ä¾ã¨åãã¢ã¸ã¥ã¼ã«ã使ã£ã¦ãã¾ãããåãä¸è§å½¢ãæç»ããããã®ã¢ã¸ã¥ã¼ã«ã§ãã circle.js
㨠triangle.js
ã追å ãã¦ãã¾ãã
ããããã®ã¢ã¸ã¥ã¼ã«å
é¨ã§ã¯ãåãååãæã¤æ©è½ãã¨ã¯ã¹ãã¼ãããã¦ãããããããããããã®æ«å°¾ã® export
æã¯æ¬¡ã®ããã«åä¸ã§ãããã¨ããããã¾ãã
export { name, draw, reportArea, reportPerimeter };
ãããã main.js
ã«ã¤ã³ãã¼ãããããã«ã次ã®ããã«ããã¨ãã¾ãã
import { name, draw, reportArea, reportPerimeter } from "./modules/square.js";
import { name, draw, reportArea, reportPerimeter } from "./modules/circle.js";
import { name, draw, reportArea, reportPerimeter } from "./modules/triangle.js";
ããã¨ããã©ã¦ã¶ã¼ã¯ "SyntaxError: redeclaration of import name" (æ§æã¨ã©ã¼: ã¤ã³ãã¼ãåã®å宣è¨) (Firefox ã®å ´å) ã®ãããªã¨ã©ã¼ãçºçãããã§ãããã
ãã®ããããããããåºæã®ååãæã¤ããã«ããããã«ã次ã®ããã«ã¤ã³ãã¼ãã®ååãå¤ããå¿ è¦ãããã¾ãã
import {
name as squareName,
draw as drawSquare,
reportArea as reportSquareArea,
reportPerimeter as reportSquarePerimeter,
} from "./modules/square.js";
import {
name as circleName,
draw as drawCircle,
reportArea as reportCircleArea,
reportPerimeter as reportCirclePerimeter,
} from "./modules/circle.js";
import {
name as triangleName,
draw as drawTriangle,
reportArea as reportTriangleArea,
reportPerimeter as reportTrianglePerimeter,
} from "./modules/triangle.js";
ä»ã®æ¹æ³ã¨ãã¦ãä¾ãã°æ¬¡ã®ããã«ãããã¨ã§ãã¢ã¸ã¥ã¼ã«ãã¡ã¤ã«å´ã§ãã®åé¡ã解決ãããã¨ãã§ãã¾ãã
// in square.js
export {
name as squareName,
draw as drawSquare,
reportArea as reportSquareArea,
reportPerimeter as reportSquarePerimeter,
};
// in main.js
import {
squareName,
drawSquare,
reportSquareArea,
reportSquarePerimeter,
} from "./modules/square.js";
ãããåãããã«æ©è½ãã¾ããã©ã¡ãã®ã¹ã¿ã¤ã«ãåããã¯ããªã次第ã§ãããã¢ã¸ã¥ã¼ã«å´ã®ã³ã¼ãã¯ãã®ã¾ã¾ã«ãã¦ã¤ã³ãã¼ãå´ã夿´ããæ¹ããééããªãè³¢æã§ããããã¯ãå¶å¾¡ã§ããªããµã¼ããã¼ãã£ã¼ã®ã¢ã¸ã¥ã¼ã«ããã¤ã³ãã¼ãããã¨ãã«ã¯ãç¹ã«æå³ãããã¾ãã
ã¢ã¸ã¥ã¼ã«ãªãã¸ã§ã¯ãã®ä½æä¸è¨ã®ã¤ã³ãã¼ãæ¹æ³ã¯æ£å¸¸ã«åä½ãã¾ãããå°ã使ãã¥ããåé·ã§ããããããæ¹æ³ã¯ãã¢ã¸ã¥ã¼ã«å ã®ããããã®æ©è½ããã¢ã¸ã¥ã¼ã«ãªãã¸ã§ã¯ãã®ä¸ã«ã¤ã³ãã¼ããããã¨ã§ãããã®æ§æã¯æ¬¡ã®ã¨ããã§ãã
import * as Module from "./modules/module.js";
ããã¯ãmodule.js
ã®ä¸ã«ããå
¨ã¦ã®ã¨ã¯ã¹ãã¼ããåå¾ãã¦ããããã Module
ã¨ãããªãã¸ã§ã¯ãã®ã¡ã³ãã¼ã¨ãã¦å©ç¨ã§ããããã«ãããã¨ã§ãç¬èªã®åå空éãæããããããªå¹æãããã¾ããæ¬¡ã®ããã«ãã¦ä½¿ãã¾ãã
Module.function1();
Module.function2();
å®éã®ä½¿ç¨ä¾ãè¦ã¦ã¿ã¾ããããmodule-objects ãã£ã¬ã¯ããªã¼ã§ã¯ãã¾ãåãä¾ã使ã£ã¦ãã¾ããããã®æ°ããæ§æãå©ç¨ããããã«æ¸ãç´ããã¦ãã¾ããã¢ã¸ã¥ã¼ã«å ã®ã¨ã¯ã¹ãã¼ãã¯ãããããæ¬¡ã®åç´ãªæ§æã使ã£ã¦ãã¾ãã
export { name, draw, reportArea, reportPerimeter };
䏿¹ã§ã¤ã³ãã¼ãã¯æ¬¡ã®ãããªãã®ã§ãã
import * as Canvas from "./modules/canvas.js";
import * as Square from "./modules/square.js";
import * as Circle from "./modules/circle.js";
import * as Triangle from "./modules/triangle.js";
ã©ã®å ´åãããã®æå®ããããªãã¸ã§ã¯ãåã®é ä¸ããã¢ã¸ã¥ã¼ã«ã®ã¤ã³ãã¼ãã«ã¢ã¯ã»ã¹ã§ãã¾ããä¾ãã°æ¬¡ã®ããã«ãã¦ä½¿ãã¾ãã
const square1 = Square.draw(myCanvas.ctx, 50, 50, 100, "blue");
Square.reportArea(square1.length, reportList);
Square.reportPerimeter(square1.length, reportList);
ãã®ããã« (å¿ è¦ãªç®æã«ãªãã¸ã§ã¯ãã®ååãå«ãããã«ããããã°) ã³ã¼ãã¯ä»¥åã¨åãããã«æ¸ããã¨ãã§ããããã¦ã¤ã³ãã¼ãã¯ããç°¡æ½ã«ãªãã¾ãã
ã¢ã¸ã¥ã¼ã«ã¨ã¯ã©ã¹æåã®æ¹ã§è§¦ãã¾ããããã¯ã©ã¹ãã¨ã¯ã¹ãã¼ããããã¤ã³ãã¼ããããã¨ãã§ãã¾ãããããã³ã¼ãä¸ã§ååã®è¡çªãé¿ããããä¸ã¤ã®æ¹æ³ã§ãããèªåã®ã¢ã¸ã¥ã¼ã«ãæ¢ã«ãªãã¸ã§ã¯ãæåã®ã¹ã¿ã¤ã«ã§æ¸ãã¦ããã®ã§ããã°ãç¹ã«ä¾¿å©ã§ãã
classes ãã£ã¬ã¯ããªã¼ã®ä¸ã«ã¯ãç§ãã¡ã®å³å½¢ãæãã¢ã¸ã¥ã¼ã«ã ES ã¯ã©ã¹ã使ã£ã¦æ¸ãç´ããä¾ãããã¾ããä¾ãã° square.js
ãã¡ã¤ã«ã§ã¯ã次ã®ããã«å
¨ã¦ã®æ©è½ãä¸ã¤ã®ã¯ã©ã¹ã®ä¸ã«æããã¦ãã¾ãã
class Square {
constructor(ctx, listId, length, x, y, color) {
// â¦
}
draw() {
// â¦
}
// â¦
}
ããã¦ã次ã®ããã«ã¨ã¯ã¹ãã¼ããã¾ãã
main.js
ã§ã¯ããããæ¬¡ã®ããã«ã¤ã³ãã¼ããã¾ãã
import { Square } from "./modules/square.js";
ããã¦ãæ£æ¹å½¢ãæãããã«æ¬¡ã®ããã«ã¯ã©ã¹ã使ãã¾ãã
const square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, "blue");
square1.draw();
square1.reportArea();
square1.reportPerimeter();
ã¢ã¸ã¥ã¼ã«ã®éç´
è¤æ°ã®ã¢ã¸ã¥ã¼ã«ãã²ã¨ã¤ã«éç´ããããã¨æããã¨ãããããããã¾ãããä¾åæ§ã®é層ã¯è¤æ°ã«ãªããã¨ããããããã¤ããããµãã¢ã¸ã¥ã¼ã«ãã²ã¨ã¤ã®è¦ªã¢ã¸ã¥ã¼ã«ã«ã¾ã¨ãã¦ç®¡çãåç´åãããã¨æãããããã¾ãããããã¯ã親ã¢ã¸ã¥ã¼ã«ã§æ¬¡ã®å½¢å¼ã«ããã¨ã¯ã¹ãã¼ãæ§æã使ããã¨ã§å¯è½ã§ãã
export * from "x.js";
export { name } from "x.js";
使ç¨ä¾ã¯ module-aggregation ãã£ã¬ã¯ããªã¼ãåç
§ãã¦ãã ããããã®ä¾ (ã¯ã©ã¹ã使ã£ã以åã®ä¾ãå
ã«ãã¦ãã¾ã) ã«ã¯ãshapes.js
ã¨ããã¢ã¸ã¥ã¼ã«ã追å ããã¦ãã¾ãããã㯠circle.js
ãsquare.js
ãtriangle.js
ã®å
¨ã¦ã®æ©è½ãã²ã¨ã¤ã«éç´ãããã®ã§ããã¾ãããµãã¢ã¸ã¥ã¼ã«ã modules
ãã£ã¬ã¯ããªã¼ã®ä¸ã«ãã shapes
ã¨ãããµããã£ã¬ã¯ããªã¼ã«ç§»åããã¦ãã¾ããã¤ã¾ãããã®ä¾ã®ã¢ã¸ã¥ã¼ã«æ§é ã¯æ¬¡ã®ãããªãã®ã§ãã
modules/ canvas.js shapes.js shapes/ circle.js square.js triangle.js
ããããã®ãµãã¢ã¸ã¥ã¼ã«ã§ã¯ãä¾ãã°æ¬¡ã®ãããªåãå½¢å¼ã®ã¨ã¯ã¹ãã¼ããè¡ããã¦ãã¾ãã
ãã®æ¬¡ã¯éç´ãè¡ãé¨åã§ããshapes.js
ã®å
é¨ã«ã¯æ¬¡ã®ãããªè¡ãããã¾ãã
export { Square } from "./shapes/square.js";
export { Triangle } from "./shapes/triangle.js";
export { Circle } from "./shapes/circle.js";
ãããã¯ãåã
ã®ãµãã¢ã¸ã¥ã¼ã«ã®ã¨ã¯ã¹ãã¼ããåå¾ãã¦ããããããshapes.js
ã¢ã¸ã¥ã¼ã«ããå©ç¨ã§ããããã«ãã广ãããã¾ãã
ã¡ã¢: shapes.mjs
ã®ä¸ã§åç
§ããã¦ããã¨ã¯ã¹ãã¼ãã¯ãåºæ¬çã«ãã®ãã¡ã¤ã«ãçµç±ãã¦è»¢éãããã ãã§ããã¡ã¤ã«ã®ä¸ã«ã¯åå¨ãã¾ããããã®ãããåããã¡ã¤ã«ã®ä¸ã§ãããã使ã£ãã³ã¼ããæ¸ããã¨ã¯ã§ãã¾ããã
æå¾ã« main.js
ãã¡ã¤ã«ã§ã¯ãå
¨ã¦ã®ã¢ã¸ã¥ã¼ã«ã®ã¯ã©ã¹ã«ã¢ã¯ã»ã¹ããããã«ã次ã®ã¤ã³ãã¼ããæ¸ãæãã¦ãã¾ãã
import { Square } from "./modules/square.js";
import { Circle } from "./modules/circle.js";
import { Triangle } from "./modules/triangle.js";
æ¸ãæãå¾ã¯ã次ã®ãã㪠1 è¡ã«ãªãã¾ãã
import { Square, Circle, Triangle } from "./modules/shapes.js";
åçãªã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿
ãã©ã¦ã¶ã¼ã§å©ç¨ã§ãã JavaScript ã¢ã¸ã¥ã¼ã«ã®ææ°æ©è½ã¯ãåçãªã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ã§ããããã«ãããå ¨ã¦ãæåã«èªã¿è¾¼ãã§ãã¾ãã®ã§ã¯ãªããå¿ è¦ãçããã¨ãã«ã®ã¿åçã«ã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ããã¨ãã§ãã¾ããããã«ã¯æãããªããã©ã¼ãã³ã¹ä¸ã®å©ç¹ãããã¾ããã©ã®ããã«åä½ããã®ããèªãã§è¦ã¦ã¿ã¾ãããã
ãã®æ°ããæ©è½ã«ãããimport()
ã颿°ã¨ãã¦å¼ã³åºãããã®ã¨ãã®å¼æ°ã¨ãã¦ã¢ã¸ã¥ã¼ã«ã¸ã®ãã¹ãæå®ãããã¨ãã§ãã¾ããããã¯æ¬¡ã®ããã« Promise
ãè¿ããã¨ã¯ã¹ãã¼ãã«ã¢ã¯ã»ã¹ã§ããã¢ã¸ã¥ã¼ã«ãªãã¸ã§ã¯ãï¼ã¢ã¸ã¥ã¼ã«ãªãã¸ã§ã¯ãã®ä½æãåç
§ï¼ã使ã£ã¦å±¥è¡ç¶æ
ã«ãªãã¾ãã
import("./modules/myModule.js").then((module) => {
// ã¢ã¸ã¥ã¼ã«ã使ã£ã¦ä½ããããã
});
ã¡ã¢: åçã¤ã³ãã¼ãã¯ããã©ã¦ã¶ã¼ã®ã¡ã¤ã³ã¹ã¬ãããå
±æã¯ã¼ã«ã¼ãå°ç¨ã¯ã¼ã«ã¼ã§è¨±å¯ããã¦ãã¾ãã ãããããµã¼ãã¹ã¯ã¼ã«ã¼ãã¯ã¼ã¯ã¬ããã§ import()
ãå¼ã³åºãã¨ãä¾å¤ãçºçãã¾ãã
ä¾ãè¦ã¦ã¿ã¾ããããdynamic-module-imports ãã£ã¬ã¯ããªã¼ã«ã¯ã以åã®ã¯ã©ã¹ã®ä¾ã«åºã¥ããå¥ã®ä½¿ç¨ä¾ãããã¾ããããããä»åã¯ä½¿ç¨ä¾ãèªã¿è¾¼ã¾ããã¨ãã«ã¯ãã£ã³ãã¹ã«ä½ãæç»ãã¾ããããã®ä»£ãã "Circle" (å)ã"Square" (æ£æ¹å½¢)ã"Triangle" (ä¸è§å½¢) ã¨ãã 3 ã¤ã®ãã¿ã³ã表示ããããããæ¼ãããã¨ãã対å¿ããå³å½¢ãæãããã«å¿ è¦ãªã¢ã¸ã¥ã¼ã«ãåçã«èªã¿è¾¼ãã§ä½¿ç¨ãã¾ãã
ãã®ä½¿ç¨ä¾ã§ã¯ index.html
㨠main.js
ã®ã¿ã夿´ãã¦ãããã¢ã¸ã¥ã¼ã«ã®ã¨ã¯ã¹ãã¼ãã¯ä»¥åã¨åãã¾ã¾ã§ãã
main.js
ã§ã¯ãããããã®ãã¿ã³ã¸ã®åç
§ãåå¾ããããã«ã次ã®ããã« document.querySelector()
ã使ã£ã¦ãã¾ãã
const squareBtn = document.querySelector(".square");
ããã¦ããããã®ãã¿ã³ã«ãæ¼ãããã¨ãã«é¢é£ããã¢ã¸ã¥ã¼ã«ãåçã«èªã¿è¾¼ãã§å³å½¢ãæãããã®ã¤ãã³ããªã¹ãã¼ãè¨å®ãã¾ãã
squareBtn.addEventListener("click", () => {
import("./modules/square.js").then((Module) => {
const square1 = new Module.Square(
myCanvas.ctx,
myCanvas.listId,
50,
50,
100,
"blue",
);
square1.draw();
square1.reportArea();
square1.reportPerimeter();
});
});
ãªããå±¥è¡ããããããã¹ã¯ã¢ã¸ã¥ã¼ã«ãªãã¸ã§ã¯ããè¿ãã®ã§ãã¯ã©ã¹ã¯ãã®ãªãã¸ã§ã¯ãã®ãµããã£ã¼ãã£ã¼ã¨ãªããããã§ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ã¯ Module.Square( /* ... */ )
ã®ããã« Module.
ãå
é ã«ä»ãã¦ã¢ã¯ã»ã¹ããå¿
è¦ãããã¾ãã
åçã¤ã³ãã¼ãã®ããä¸ã¤ã®å©ç¹ã¯ãã¹ã¯ãªããç°å¢ã§ãã£ã¦ã常ã«å©ç¨ã§ããã¨ãããã¨ã§ãããããã£ã¦ãHTMLã«æ¢åã® <script>
ã¿ã°ãããããã®ã¿ã°ã« type="module"
ããªãå ´åã§ããã¢ã¸ã¥ã¼ã«ã¨ãã¦é
å¸ããã¦ããã³ã¼ããåçã«ã¤ã³ãã¼ããã¦åå©ç¨ãããã¨ãã§ãã¾ãã
<script>
import("./modules/square.js").then((module) => {
// ã¢ã¸ã¥ã¼ã«ã§ä½ããè¡ã
});
// ä»ã«ããã°ãã¼ãã«ã¹ã³ã¼ãã§å¦çãããã³ã¼ãã§ãã¾ã ã¢ã¸ã¥ã¼ã«ã«ãªãã¡ã¯ã¿ãªã³ã°ããæºåãæ´ã£ã¦ããªãã³ã¼ããããã¾ãã
var btn = document.querySelector(".square");
</script>
æä¸ä½ã® await
æä¸ä½ã® await ã¯ãã¢ã¸ã¥ã¼ã«å
ã§å©ç¨ã§ããæ©è½ã§ããã¤ã¾ããawait
ãã¼ã¯ã¼ãã使ç¨ãããã¨ãã§ãã¾ããããã¯ãã¢ã¸ã¥ã¼ã«ã大ããªéåæé¢æ°ã¨ãã¦åä½ã§ããããã«ãããã®ã§ã親ã¢ã¸ã¥ã¼ã«ã§ä½¿ç¨ããåã«ã³ã¼ããè©ä¾¡ã§ãã¾ãããå
å¼ã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ããããã¯ãããã¨ã¯ãã¾ããã
ä¾ãè¦ã¦ããã¾ãããããã®ç¯ã§è¨è¿°ãããã¹ã¦ã®ãã¡ã¤ã«ã¨ã³ã¼ã㯠top-level-await
ãã£ã¬ã¯ããªã¼ã«ãããååã¾ã§ã®ä¾ããæ¡å¼µããã¦ãã¾ãã
ã¾ãæåã«ãå¥åã® colors.json
ãã¡ã¤ã«ã§ã«ã©ã¼ãã¬ããã宣è¨ãã¾ãã
{
"yellow": "#F4D03F",
"green": "#52BE80",
"blue": "#5499C7",
"red": "#CD6155",
"orange": "#F39C12"
}
次ã«ãgetColors.js
ã¨ããã¢ã¸ã¥ã¼ã«ã使ãã¾ãããã®ã¢ã¸ã¥ã¼ã«ã¯èªã¿åããªã¯ã¨ã¹ãã使ã£ã¦ colors.json
ãã¡ã¤ã«ãèªã¿è¾¼ã¿ããã®ãã¼ã¿ããªãã¸ã§ã¯ãã¨ãã¦è¿ãããã«ãã¾ãã
// èªã¿åããªã¯ã¨ã¹ã
const colors = fetch("../data/colors.json").then((response) => response.json());
export default await colors;
ããã§æå¾ã®ã¨ã¯ã¹ãã¼ãè¡ã«æ³¨ç®ãã¦ãã ããã
ãã¼ã¯ã¼ã await
ãã宿° colors
ãæå®ããã¨ã¯ã¹ãã¼ãã®åã«ä½¿ç¨ãã¦ãã¾ããããã¯ããã®ã¢ã¸ã¥ã¼ã«ãå«ãä»ã®ã¢ã¸ã¥ã¼ã«ã¯ãcolors
ããã¦ã³ãã¼ããããè§£éãããã¾ã§å¾
ã£ã¦ãã使ç¨ãããã¨ãæå³ãã¦ãã¾ãã
ãã®ã¢ã¸ã¥ã¼ã«ã main.js
ãã¡ã¤ã«ã«å«ãã¦ã¿ã¾ãããã
import colors from "./modules/getColors.js";
import { Canvas } from "./modules/canvas.js";
const circleBtn = document.querySelector(".circle");
// â¦
ã·ã§ã¤ã颿°ãå¼ã³åºãéã«ãåå使ç¨ãããæååã®ä»£ããã« colors
ã使ç¨ãããã¨ã«ãã¾ãã
const square1 = new Module.Square(
myCanvas.ctx,
myCanvas.listId,
50,
50,
100,
colors.blue,
);
const circle1 = new Module.Circle(
myCanvas.ctx,
myCanvas.listId,
75,
200,
100,
colors.green,
);
const triangle1 = new Module.Triangle(
myCanvas.ctx,
myCanvas.listId,
100,
75,
190,
colors.yellow,
);
ãã㯠main.js
å
ã®ã³ã¼ãã getColors.js
å
ã®ã³ã¼ããå®è¡ããã¾ã§å®è¡ãããªãã®ã§æçã§ããããããä»ã®ã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¾ããã®ããããã¯ãããã¨ã¯ããã¾ãããä¾ãã°ãcanvas.js
ã¢ã¸ã¥ã¼ã«ã¯ãcolors
ãèªã¿è¾¼ã¾ãã¦ããéãèªã¿è¾¼ã¿ãç¶ç¶ãã¾ãã
ã¤ã³ãã¼ã宣è¨ãå·»ãä¸ããè¡ããã¾ãããã®å ´åãã¤ã³ãã¼ããããå¤ã¯ã宣è¨ããå ´æãããåã«ã¢ã¸ã¥ã¼ã«ã®ã³ã¼ãã§å©ç¨ã§ããã¨ãããã¨ãããã¦ãã¤ã³ãã¼ããããã¢ã¸ã¥ã¼ã«ã®å¯ä½ç¨ã¯ãã¢ã¸ã¥ã¼ã«ã®æ®ãã®ã³ã¼ããå®è¡ãå§ããåã«çããã¨ããã¨ãããã¨ã§ãã
ä¾ãã°ãmain.js
ã§ã³ã¼ãã®éä¸ã§ Canvas
ãã¤ã³ãã¼ããã¦ããããã¯åä½ãã¾ãã
// â¦
const myCanvas = new Canvas("myCanvas", document.body, 480, 320);
myCanvas.create();
import { Canvas } from "./modules/canvas.js";
myCanvas.createReportList();
// â¦
ããã§ããã³ã¼ãã®ä¸çªä¸ã«ã¤ã³ãã¼ãããã¹ã¦é ç½®ãããã¨ã¯è¯ãç¿æ £ã¨ããã¦ãããä¾åé¢ä¿ã®åæã容æã«ãªãã¾ãã
循ç°ã¤ã³ãã¼ãã¢ã¸ã¥ã¼ã«ã¯ä»ã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ãã§ãããããã®ã¢ã¸ã¥ã¼ã«ã¯ä»ã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ãã§ããã¨ãã£ãå ·åã«ãã¢ã¸ã¥ã¼ã«ã¯ä»ã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¨ãã§ãã¾ããããã¯ãä¾åã°ã©ããã¨å¼ã°ããæåã°ã©ããå½¢æãã¾ããçæ³çãªä¸çã§ã¯ããã®ã°ã©ãã¯å¾ªç°ãã¾ããããã®å ´åãæ·±ãåªå æ¢ç´¢ã使ç¨ãã¦ã°ã©ããè©ä¾¡ãããã¨ãã§ãã¾ãã
ãããã循ç°ã¯ãã°ãã°é¿ãããã¾ãããã¢ã¸ã¥ã¼ã« a
ãã¢ã¸ã¥ã¼ã« b
ãã¤ã³ãã¼ããã¦ããå ´åãb
ãç´æ¥ã¾ãã¯éæ¥çã« a
ã«ä¾åãã¦ããã¨ã循ç°ã¤ã³ãã¼ããçºçãã¾ãã
// -- a.js --
import { b } from "./b.js";
// -- b.js --
import { a } from "./a.js";
// Cycle:
// a.js âââ> b.js
// ^ â
// âââââââââââ
循ç°ã¤ã³ãã¼ãã¯å¸¸ã«å¤±æããããã§ã¯ããã¾ãããã¤ã³ãã¼ãããã夿°ã®å¤ã¯ããã®å¤æ°ãå®éã«ä½¿ç¨ããéã«ã®ã¿åå¾ããï¼ãããã£ã¦ãã©ã¤ããã¤ã³ãã£ã³ã°ãå¯è½ã«ãªãã¾ãï¼ããã®æç¹ã«ããã¦å¤æ°ãæªåæåã®ç¶æ
ã§ããå ´åã«ã®ã¿ã ReferenceError
ãçºçãã¾ãã
// -- a.js --
import { b } from "./b.js";
setTimeout(() => {
console.log(b); // 1
}, 10);
export const a = 2;
// -- b.js --
import { a } from "./a.js";
setTimeout(() => {
console.log(a); // 2
}, 10);
export const b = 1;
ãã®ä¾ã§ã¯ãa
㨠b
ã®ä¸¡æ¹ãéåæã§ä½¿ç¨ããã¦ãã¾ãããã®ãããã¢ã¸ã¥ã¼ã«ãè©ä¾¡ãããæç¹ã§ã¯ã b
ã a
ãå®éã«èªã¿è¾¼ã¾ãããã¨ã¯ãªããæ®ãã®ã³ã¼ãã¯é常éãå®è¡ããã 2 ã¤ã® export
宣è¨ã«ãã a
㨠b
ã®å¤ãçæããã¾ãããã®å¾ãã¿ã¤ã ã¢ã¦ãå¾ã« a
㨠b
ã®ä¸¡æ¹ãå©ç¨ã§ããããã«ãªãã 2 ã¤ã® console.log
æãé常éãå®è¡ããã¾ãã
ã³ã¼ãã夿´ã㦠a
ãåæçã«ä½¿ç¨ããã¨ãã¢ã¸ã¥ã¼ã«è©ä¾¡ã¯å¤±æãã¾ãã
// -- a.js (entry module) --
import { b } from "./b.js";
export const a = 2;
// -- b.js --
import { a } from "./a.js";
console.log(a); // ReferenceError: Cannot access 'a' before initialization
export const b = 1;
ããã¯ãJavaScript ã§ a.js
ãè©ä¾¡ããéãa.js
ã®ä¾åé¢ä¿ã§ãã b.js
ãæåã®æ®µéã§è©ä¾¡ããå¿
è¦ãããããã§ããããããb.js
㯠a
ã使ç¨ãã¦ãããa
ã¯ã¾ã å©ç¨ã§ãã¾ããã
䏿¹ãã³ã¼ãã夿´ã㦠b
ãåæçã«ãa
ãéåæçã«ä½¿ç¨ããããã«ããã¨ãã¢ã¸ã¥ã¼ã«è©ä¾¡ã¯æåãã¾ãã
// -- a.js (entry module) --
import { b } from "./b.js";
console.log(b); // 1
export const a = 2;
// -- b.js --
import { a } from "./a.js";
setTimeout(() => {
console.log(a); // 2
}, 10);
export const b = 1;
ããã¯ã b.js
ã®è©ä¾¡ãæ£å¸¸ã«å®äºããããã a.js
ãè©ä¾¡ãããéã« b
ã®å¤ãå©ç¨ã§ããããã§ãã
èªåã®ããã¸ã§ã¯ãã§ã¯ã循ç°ã¤ã³ãã¼ãã¯é常é¿ããã¹ãã§ãããªããªããã³ã¼ãã«ã¨ã©ã¼ã®å¯è½æ§ãçããããã§ããä¸è¬çãªå¾ªç°é¤å»ãã¯ããã¯ã«ã¯ã以ä¸ã®ãããªãã®ãããã¾ãã
ããããã©ã¤ãã©ãªã¼ãäºãã«ä¾åãã¦ããå ´åã«ã循ç°ã¤ã³ãã¼ããçºçãããã¨ããããä¿®æ£ããã®ã¯ããå°é£ã§ãã
ãååãã¢ã¸ã¥ã¼ã«ã®ä½æã¢ã¸ã¥ã¼ã«ã®å°å ¥ã«ãããJavaScript ã®ç°å¢ã§ã¯ãã³ã¼ããã¢ã¸ã¥ã¼ã«æ¹å¼ã§é å¸ããåå©ç¨ãããã¨ã奨å±ããã¦ãã¾ããããããããã¯å¿ ããã JavaScript ã³ã¼ãã®ä¸é¨ããã¹ã¦ã®ç°å¢ã§å®è¡ã§ãããã¨ãæå³ãã¦ããããã§ã¯ããã¾ãããä¾ãã°ãã¦ã¼ã¶ã¼ã®ãã¹ã¯ã¼ãã® SHA ããã·ã¥ãçæããã¢ã¸ã¥ã¼ã«ãéçºããã¨ãã¾ãããã©ã¦ã¶ã¼ã®ããã³ãã¨ã³ãã§ä½¿ç¨ãããã¨ã¯ã§ãã¾ããï¼ Node.js ãµã¼ãã¼ã§ä½¿ç¨ãããã¨ã¯ã§ãã¾ããï¼çãã¯ããå ´åã«ãããã§ãã
åå示ããããã«ãã¢ã¸ã¥ã¼ã«ã¯ä¾ç¶ã¨ãã¦ã°ãã¼ãã«å¤æ°ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããã¢ã¸ã¥ã¼ã«ã window
ã®ãããªã°ãã¼ãã«ãåç
§ããå ´åããã©ã¦ã¶ã¼ã§ã¯å®è¡ã§ãã¾ãããNode.js ãµã¼ãã¼ã§ã¯ window
ãå©ç¨ã§ããªããããã¨ã©ã¼ãçºçãã¾ããåæ§ã«ãã³ã¼ããæ©è½ããããã« process
ã¸ã®ã¢ã¯ã»ã¹ãå¿
è¦ã¨ããå ´åããã㯠Node.js ã§ãã使ç¨ã§ãã¾ããã
ã¢ã¸ã¥ã¼ã«ã®åå©ç¨æ§ãæå¤§åããããã«ãã³ã¼ãããååãã«ãããã¤ã¾ããã©ã®ã©ã³ã¿ã¤ã ã§ãåãæåã示ãããã«ãããã¨ãããæ¨å¥¨ããã¾ããããã¯ãä¸è¬çã«3ã¤ã®æ¹æ³ã§éæããã¾ãã
ã¢ã¸ã¥ã¼ã«ããã³ã¢ãã¨ããã¤ã³ãã£ã³ã°ãã«åå²ãã¾ãããã³ã¢ãã§ã¯ãããã·ã¥ãè¨ç®ãããããªç´ç²ãª JavaScript ã®ãã¸ãã¯ã«ç¦ç¹ãå½ã¦ãDOMããããã¯ã¼ã¯ããã¡ã¤ã«ã·ã¹ãã ã¸ã®ã¢ã¯ã»ã¹ã¯ä¸åè¡ãããã¦ã¼ãã£ãªãã£é¢æ°ãå
¬éãã¾ããããã¤ã³ãã£ã³ã°ãã§ã¯ãã°ãã¼ãã«ã³ã³ããã¹ãããã®èªã¿æ¸ããã§ããããã«ãã¾ããä¾ãã°ãããã©ã¦ã¶ã¼ãã¤ã³ãã£ã³ã°ãã§ã¯å
¥åããã¯ã¹ããããNode ãã¤ã³ãã£ã³ã°ãã§ã¯ process.env
ããå¤ãèªã¿è¾¼ããã¨ãã§ãã¾ãããã©ã¡ãã®é
ç½®ããèªã¿è¾¼ãã å¤ãåãã³ã¢é¢æ°ã«æ¥ç¶ããåãããã«å¦çããããã¨ã«ãã¾ããã³ã¢ã¯ã©ã®ç°å¢ã§ãã¤ã³ãã¼ããã¦åãããã«ä½¿ç¨ãããã¨ãã§ããé常軽éã§ãããã¤ã³ãã£ã³ã°ã ãããã©ãããã©ã¼ã ã«åºæã§ããããã«ãã¾ãã
ç¹å®ã®ã°ãã¼ãã«ã使ç¨ãããåã«åå¨ãããã©ãããæ¤åºãã¾ããä¾ãã°ãtypeof window === "undefined"
ã¨å¤å®ãããå ´åããããã Node.js ç°å¢ã§ãããããDOM ãèªãã¹ãã§ã¯ãªããã¨ãåããã¾ãã
// myModule.js
let password;
if (typeof process !== "undefined") {
// Node.js ã§å®è¡ä¸ã `process.env` ããèªã¿åºã
password = process.env.PASSWORD;
} else if (typeof window !== "undefined") {
// ãã©ã¦ã¶ã¼ã§å®è¡ä¸ãå
¥åããã¯ã¹ããèªã¿åºã
password = document.getElementById("password").value;
}
ããã¯ã2 ã¤ã®åå²ãå®éã«åãåä½ï¼ãååãï¼ã§çµããã®ã§ããã°ãç°å¢è¨å®ã¨ãã¦ã¯å¥½ã¾ãããã®ã§ããåãæ©è½ãæä¾ãããã¨ãä¸å¯è½ãªå ´åããããã¯ãæªä½¿ç¨ã®é¨åãå¤ãã¾ã¾å¤§éã®ã³ã¼ããèªã¿è¾¼ãå¿ è¦ãããå ´åã¯ã代ããã«ç°ãªãããã¤ã³ãã£ã³ã°ãã使ç¨ããã®ãããã§ãããã
è¶³ããªãæ©è½ã®ä»£æ¿ãæä¾ããããã«ãããªãã£ã«ã使ç¨ãã¾ããä¾ãã°ãNode.js ã§ v18 以éãã対å¿ãã¦ããªã fetch
颿°ã使ç¨ãããå ´åã node-fetch
ãæä¾ãããããªåæ§ã® API ã使ç¨ãããã¨ãã§ãã¾ããåçã¤ã³ãã¼ãã«ãã£ã¦æ¡ä»¶ä»ãã§è¡ããã¨ãã§ãã¾ãã
// myModule.js
if (typeof fetch === "undefined") {
// We are running in Node.js; use node-fetch
globalThis.fetch = (await import("node-fetch")).default;
}
// â¦
globalThis
夿°ã¯ãã©ã®ç°å¢ã§ãå©ç¨ã§ããã°ãã¼ãã«ãªãã¸ã§ã¯ãã§ãã¢ã¸ã¥ã¼ã«å
ã§ã°ãã¼ãã«å¤æ°ãèªã¿è¾¼ãã ã使ããããããå ´åã«æçã§ãã
ãããã®å®è·µã¯ãã¢ã¸ã¥ã¼ã«ã«åºæã®ãã®ã§ã¯ããã¾ãããããã§ããã³ã¼ãã®åå©ç¨æ§ãã¢ã¸ã¥ã¼ã«åã®æµãããã使ç¨å¯è½ãªéãå¤ãã®äººã«æ¥½ããã§ããããããã«ãã³ã¼ããã¯ãã¹ãã©ãããã©ã¼ã ã«ãããã¨ãæ¨å¥¨ããã¦ãã¾ããNode.js ã®ãããªã©ã³ã¿ã¤ã ããã¦ã§ãã¨ã®ç¸äºéç¨æ§ãé«ããããã«ã使ç¨å¯è½ãªç¯å²ã§ç©æ¥µçã«ã¦ã§ã API ãå®è£ ãã¦ãã¾ãã
ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ãããã¯ãã¢ã¸ã¥ã¼ã«ã®åä½ã«åé¡ãããã¨ãã«å©ãã«ãªããããããªããã³ãã§ããããä»ã«ããã°èªç±ã«ãªã¹ãã«è¿½å ãã¦ãã ããã
.mjs
ãã¡ã¤ã«ã¯ text/javascript
ã¨ãã MIME ã¿ã¤ãï¼ã¾ã㯠JavaScript äºæã§ãããã以å¤ã®ã¿ã¤ãããã ã text/javascript
ãæ¨å¥¨ï¼ã§èªã¿è¾¼ã¾ããå¿
è¦ããããããã§ãªããã°å³å¯ãª MIME ã¿ã¤ããã§ãã¯ã«ãã£ã¦ "The server responded with a non-JavaScript MIME type" ï¼ãµã¼ãã¼ãé JavaScript ã® MIME ã¿ã¤ããè¿ãã¾ããï¼ã®ãããªã¨ã©ã¼ãçºçããã§ããããfile://
ã® URL ã使ã£ã¦ï¼èªã¿è¾¼ããã¨ããã¨ãJavaScript ã¢ã¸ã¥ã¼ã«ã®ã»ãã¥ãªãã£è¦ä»¶ã«ãã£ã¦ CORS ã¨ã©ã¼ãçºçããã§ããããå使¤è¨¼ã¯ãµã¼ãã¼çµç±ã§è¡ãå¿
è¦ãããã¾ããGitHub 㯠.mjs
ãã¡ã¤ã«ãæ£ãã MIME åã§è¿ãããçæ³çã§ãã.mjs
ã¯æ¯è¼çæ°ããæ¡å¼µåã§ãããOS ã«ãã£ã¦ã¯ãããèªèããªãããä½ãå¥ã®ãã®ã«ç½®ãæãããã¨ãã¦ãã¾ãããããã¾ãããä¾ãã° macOS ã¯ãéç¥ãããã¨ãªã .mjs
ãã¡ã¤ã«ã« .js
ã追å ãã¦èªåçã«æ¡å¼µåãé ããã¨ããããã¾ããããã®ãããå®éã«ãã£ã¦ãããã¡ã¤ã«ã¯å
¨ã¦ x.mjs.js
ã®ãããªãã®ã§ããããã¡ã¤ã«æ¡å¼µåãèªåçã«é ããã¨ããªãã«ãã¦ã.mjs
ãåãå
¥ããããã«è¨å®ããã¨åé¡ã¯ç¡ããªãã¾ããRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4