ã¢ããªã±ã¼ã·ã§ã³ã大ãããªãã«ã¤ãããããè¤æ°ã®ãã¡ã¤ã«ã«åå²ããããªãã¾ãããããã âã¢ã¸ã¥ã¼ã«â ã§ããé常ãã¢ã¸ã¥ã¼ã«ã¯ã¯ã©ã¹ã便å©ãªé¢æ°ã®ã©ã¤ãã©ãªãå«ã¿ã¾ãã
é·ãéãJavaScript ã«ã¯è¨èªã¬ãã«ã®ã¢ã¸ã¥ã¼ã«æ§æã¯åå¨ãã¾ããã§ãããå½åã¯ã¹ã¯ãªãããå°ããã¦åç´ã ã£ãããåé¡ã§ã¯ããã¾ããã§ããããã®ãããã¢ã¸ã¥ã¼ã«ã®ä»çµã¿ãå¿ è¦ããã¾ããã§ããã
ããããã¹ã¯ãªãããå¾ã ã«è¤éã«ãªã£ã¦ãããããã³ãã¥ããã£ã¯ã³ã¼ããã¢ã¸ã¥ã¼ã«ã«ã¾ã¨ããããã®æ§ã ãªæ¹æ³ãçºæãã¾ããã
ããã¤ãæãã¾ã:
- AMD â æãå¤ãã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã®1ã¤ã§ãæåã¯ã©ã¤ãã©ãªrequire.jsã§å®è£ ããã¾ããã
- CommonJS â Node.js ãµã¼ãç¨ã«ä½ãããã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã§ãã
- UMD â ãã1ã¤ã®ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã§ãã¦ããã¼ãµã«ãªãã®ã¨ãã¦ææ¡ããã¦ãã¾ããAMD 㨠CommonJS ã¨äºææ§ãããã¾ãã
ä»ãããããã¯ãã£ããã¨æ´å²ã®ä¸é¨ã«ãªã£ã¦ãã¾ãããä¾ç¶ã¨ãã¦å¤ãã¹ã¯ãªããã®ä¸ã§å©ç¨ããã¦ãã¾ãã
è¨èªã¬ãã«ã®ã¢ã¸ã¥ã¼ã«ã·ã¹ãã ã®æ¨æºã¯ 2015 å¹´ã«ç»å ´ãããã以æ¥å¾ã ã«é²åããä»ã§ã¯ãã¹ã¦ã®ä¸»è¦ãªãã©ã¦ã¶ã¨Node.js ã§ãµãã¼ãããã¦ãã¾ãããªã®ã§ãããããã¯ã¢ãã³ãª JavaScript ã¢ã¸ã¥ã¼ã«ã«ã¤ãã¦å¦ãã§ããã¾ãã
ã¢ã¸ã¥ã¼ã«ã¨ã¯?
ã¢ã¸ã¥ã¼ã«ã¯åãªã1ã¤ã®ãã¡ã¤ã«ã§ãã
ãã£ã¬ã¯ãã£ã export 㨠import ãå©ç¨ãããã¨ã§ãã¢ã¸ã¥ã¼ã«éã§æ©è½ãç¸äºã«ããã¨ããããã¨ãã§ãã¾ãã:
exportãã¼ã¯ã¼ãã¯ããã¡ã¤ã«ã®å¤é¨ããã¢ã¯ã»ã¹å¯è½ã§ããã¹ã夿°ã颿°ã«ã©ãã«ä»ãããã¾ããimportã¯ä»ã®ã¢ã¸ã¥ã¼ã«ããæ©è½ãã¤ã³ãã¼ãã§ããããã«ãã¾ãã
ä¾ãã°ã颿°ãã¨ã¯ã¹ãã¼ããã¦ãããã¡ã¤ã« sayHi.js ãããã¾ã:
// ð sayHi.js
export function sayHi(user) {
alert(`Hello, ${user}!`);
}
â¦ããã¦ãå¥ã®ãã¡ã¤ã«ã§ãããã¤ã³ãã¼ããã¦ä½¿ãã¾ãã:
// ð main.js
import {sayHi} from './sayHi.js';
alert(sayHi); // function...
sayHi('John'); // Hello, John!
import ãã£ã¬ã¯ãã£ãã¯ç¾å¨ã®ãã¡ã¤ã«ããã®ç¸å¯¾ãã¹ ./sayHi.js ã®ã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¿ãã¨ã¯ã¹ãã¼ãããã颿° sayHi ã対å¿ãã夿°ã«å²ãå½ã¦ã¾ãã
ãã©ã¦ã¶ã§ä¾ãå®è¡ãã¦ã¿ã¾ãããã
ã¢ã¸ã¥ã¼ã«ã¯ç¹å¥ãªãã¼ã¯ã¼ãã¨æ©è½ãæä¾ããã®ã§ã<script type="module"> 屿§ãã使ç¨ãã¦ããã©ã¦ã¶ã«ã¢ã¸ã¥ã¼ã«ãæ±ããã¨ãä¼ããå¿
è¦ãããã¾ãã
ãã®ããã«ãªãã¾ã:
export function sayHi(user) {
return `Hello, ${user}!`;
}<!doctype html>
<script type="module">
import {sayHi} from './say.js';
document.body.innerHTML = sayHi('John');
</script>ãã©ã¦ã¶ã¯èªåçã«ã¤ã³ãã¼ããããã¢ã¸ã¥ã¼ã«ãåå¾/è©ä¾¡ããã¹ã¯ãªãããå®è¡ãã¾ãã
file:// ãããã³ã«çµç±ã§ Web ãã¼ã¸ããã¼ã«ã«ã§éããå ´åãimport/export ãã£ã¬ã¯ãã£ããåä½ããªããã¨ã«æ°ã¥ãã¨æãã¾ããã¢ã¸ã¥ã¼ã«ããã¹ãããã«ã¯ãéçãµã¼ã ã®ãããªãã¼ã«ã« Webãµã¼ãããããã¯ãVS Code ã®Live Server Extension ã®ãããªã¨ãã£ã¿ã®ã㤠âã©ã¤ããµã¼ãâ æ©è½ã使ç¨ãã¾ãã
ã³ã¢ãªã¢ã¸ã¥ã¼ã«ã®ç¹å¾´
âé常ã®â ã¹ã¯ãªããã¨æ¯è¼ããã¨ãã®ã¢ã¸ã¥ã¼ã«ã®éãã¯ä½ã§ãããï¼
ãã©ã¦ã¶ã¨ãµã¼ããµã¤ã JavaScript ã®ä¸¡æ¹ã«æå¹ãªã³ã¢ãªç¹å¾´ãããã¾ãã
常㫠âuse strictâ
ã¢ã¸ã¥ã¼ã«ã¯å¸¸ã« use strict ã§ããE.g. æªå®£è¨å¤æ°ã¸ã®ä»£å
¥ã¯ã¨ã©ã¼ã«ãªãã¾ãã
<script type="module">
a = 5; // error
</script>
ã¢ã¸ã¥ã¼ã«ã¬ãã«ã®ã¹ã³ã¼ã
åã¢ã¸ã¥ã¼ã«ã«ã¯ç¬èªã®æä¸ä½ã®ã¹ã³ã¼ããããã¾ããã¤ã¾ããã¢ã¸ã¥ã¼ã«å ã®æä¸ä½ã®å¤æ°ã颿°ã¯ä»ã®ã¹ã¯ãªããããã¯è¦ãã¾ããã
ä¸ã®ä¾ã§ã¯ã2ã¤ã®ã¹ã¯ãªãããã¤ã³ãã¼ãããã¦ãããhello.js 㯠user.js ã§å®£è¨ããã¦ãã夿° user ã使ããã¨ãã¾ããããå¥ã
ã®ã¢ã¸ã¥ã¼ã«ãªã®ã§å¤±æãã¾ãï¼ã³ã³ã½ã¼ã«ã§ã¨ã©ã¼ã確èªã§ãã¾ãï¼:
alert(user); // no such variable (each module has independent variables)let user = "John";<!doctype html>
<script type="module" src="user.js"></script>
<script type="module" src="hello.js"></script>ã¢ã¸ã¥ã¼ã«ã¯ãå¤é¨ããã¢ã¯ã»ã¹å¯è½ã«ããããã®ã¯ export ãè¡ããå¿
è¦ãªãã®ã¯ import ãå¿
è¦ã§ãã
user.jsã¯user夿°ã®ã¨ã¯ã¹ãã¼ããå¿ è¦ã§ããhello.jsã¯user.jsã¢ã¸ã¥ã¼ã«ããã®ã¤ã³ãã¼ããå¿ è¦ã§ãã
ã¤ã¾ããã¢ã¸ã¥ã¼ã«ã§ã¯ãã°ãã¼ãã«å¤æ°ã«ä¾åããã®ã§ã¯ãªããã¤ã³ãã¼ã/ã¨ã¯ã¹ãã¼ãã使ç¨ãã¾ãã
ããã¯æ£ããä¾ã§ã:
import {user} from './user.js';
document.body.innerHTML = user; // Johnexport let user = "John";<!doctype html>
<script type="module" src="hello.js"></script>ãã©ã¦ã¶ã§ã¯ãå <script type="module"> ã«å¯¾ãã¦ãç¬ç«ããæä¸ä½ã¹ã³ã¼ããåå¨ãã¾ãã
以ä¸ã¯åããã¼ã¸ã«2ã¤ã®ã¹ã¯ãªããããããä¸¡æ¹ type="module" ã§ãããããã¯ãäºãã®æä¸ä½ã®ã¹ã³ã¼ãã®å¤æ°ã¯è¦ãã¾ããã:
<script type="module">
// 夿°ã¯ãã®ã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã®ä¸ã§ã®ã¿è¦ãã¾ã
let user = "John";
</script>
<script type="module">
alert(user); // Error: user is not defined
</script>
ãã©ã¦ã¶ã§ã¯ãe.g. window.user = "John" ã®ããã«ã夿°ãæç¤ºçã« window ããããã£ã«å²ãå½ã¦ããã¨ã§ãã¦ã£ã³ãã¦ã¬ãã«ã®ã°ãã¼ãã«ãªå¤æ°ãä½ããã¨ãã§ãã¾ãã
以éãtype="module" ã®æç¡ã«é¢ãããããã¹ã¦ã®ã¹ã¯ãªããã¯ãããåç
§ã§ãã¾ãã
ã¨ã¯ããããã®ãããªã°ãã¼ãã«å¤æ°ã®ä½æã¯ãããæãããªãè¡çºã§ãããã®ãããªãã¨ã¯é¿ããããã«ãã¦ãã ããã
ã¢ã¸ã¥ã¼ã«ã³ã¼ãã¯ã¤ã³ãã¼ãæã®ååã«ã®ã¿è©ä¾¡ããã¾ã
ããåãã¢ã¸ã¥ã¼ã«ãè¤æ°ã®ä»ã®å ´æã§ã¤ã³ãã¼ããããå ´åããã®ã³ã¼ãã¯ååã®ã¿å®è¡ããã¾ãããã®å¾ã¨ã¯ã¹ãã¼ããããã®ã¯ãã¹ã¦ã®ã¤ã³ãã¼ããã¦ããã¢ã¸ã¥ã¼ã«ã§å©ç¨ããã¾ãã
1度éãã®è©ä¾¡ã¯éè¦ãªçµæããããããããæ³¨æãå¿ è¦ã§ãã
ããã¤ãä¾ãè¦ã¦ã¿ã¾ãããã
ã¾ããã¡ãã»ã¼ã¸ã表示ããã¨è¨ã£ããããªãå¯ä½ç¨ãããããã¢ã¸ã¥ã¼ã«ã³ã¼ããå®è¡ããå ´åãè¤æ°åã¤ã³ãã¼ããã¦ãããªã¬ãããã®ã¯1度ã ãã§ã(åå)ã:
// ð alert.js
alert("Module is evaluated!");
// å¥ã®ãã¡ã¤ã«ããåãã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ã
// ð 1.js
import `./alert.js`; // Module is evaluated!
// ð 2.js
import `./alert.js`; // (nothing)
ã¢ã¸ã¥ã¼ã«ã¯ãã§ã«è©ä¾¡æ¸ã¿ãªã®ã§ã2ã¤ç®ã®ã¤ã³ãã¼ãã¯ä½ã表示ãã¾ããã
ã«ã¼ã«ãããã¾ã: åæåãã¢ã¸ã¥ã¼ã«åºæã®å
é¨ãã¼ã¿æ§é ã®ä½æã«ã¯ããããã¬ãã«ã®ã¢ã¸ã¥ã¼ã«ã®ã³ã¼ãã使ç¨ããå¿
è¦ãããã¾ããè¤æ°åå¼ã³åºãå¯è½ã«ããå¿
è¦ãããå ´åã¯ãä¸è¨ã® sayHi ã§è¡ã£ãããã«ã颿°ã¨ãã¦ã¨ã¯ã¹ãã¼ãããå¿
è¦ãããã¾ãã
ããé«åº¦ãªä¾ãèãã¦ã¿ã¾ãããã
ã¢ã¸ã¥ã¼ã«ããªãã¸ã§ã¯ããã¨ã¯ã¹ãã¼ãããã¨ãã¾ããã:
// ð admin.js
export let admin = {
name: "John"
};
ãã®ã¢ã¸ã¥ã¼ã«ãè¤æ°ã®ãã¡ã¤ã«ããã¤ã³ãã¼ããããå ´åãã¢ã¸ã¥ã¼ã«ã¯ååã«ã ãè©ä¾¡ãããadmin ãªãã¸ã§ã¯ããçæããããã®å¾ãã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ããããã¹ã¦ã®ã¢ã¸ã¥ã¼ã«ã«æ¸¡ããã¾ãã
ãã¹ã¦ã®ã¤ã³ãã¼ã¿ã¯æ£ç¢ºã«1ã¤ã® admin ãªãã¸ã§ã¯ããåå¾ãããã¨ã«ãªãã¾ãã:
// ð 1.js
import {admin} from './admin.js';
admin.name = "Pete";
// ð 2.js
import {admin} from './admin.js';
alert(admin.name); // Pete
// 1.js 㨠2.js åããªãã¸ã§ã¯ããã¤ã³ãã¼ããã¾ãã
// 1.js ã§è¡ããã夿´ã¯ 2.js ã§ãè¦ãã¾ã
ã覧ã®éãã1.js ãã¤ã³ãã¼ããã admin ã® name ããããã£ã夿´ããã¨ã2.js ã¯æ°ãã admin.name ãåç
§ã§ãã¾ãã
ãããã¾ãã«ã¢ã¸ã¥ã¼ã«ã1度ã®ã¿å®è¡ãããããã§ããã¨ã¯ã¹ãã¼ããçæãããã¤ã³ãã¼ãããå´ã§ããããå
±æãããããä½ãã admin ãªãã¸ã§ã¯ãã夿´ããã¨ãä»ã®ã¤ã³ãã¼ãããã¹ã¯ãªããã¯ãã®å¤æ´ãè¦ãã¾ãã
ãã®ãããªæ¯ãèãã¯ãã¢ã¸ã¥ã¼ã«ã æ§æ(configure) ã§ããããå®éã«é常ã«ä¾¿å©ã§ãã
è¨ãæããã¨ãã¢ã¸ã¥ã¼ã«ã¯ã»ããã¢ãããå¿ è¦ãªæ±ç¨æ©è½ãæä¾ã§ãã¾ããä¾.èªè¨¼ã«ã¯è³æ ¼(credential)ãå¿ è¦ã§ããããã¦ãå¤é¨ã®ã³ã¼ããå²ãå½ã¦ããã¨ãæå¾ ããæ§æç¨ã®ãªãã¸ã§ã¯ããã¨ã¯ã¹ãã¼ããã¾ãã
ããã¯å¤å ¸çãªãã¿ã¼ã³ã§ã:
- ã¢ã¸ã¥ã¼ã«ã¯ããã¤ãã®æ§æææ®µãã¨ã¯ã¹ãã¼ããã¾ããä¾.æ§æãªãã¸ã§ã¯ã
- ååã¤ã³ãã¼ãæã«ããããåæåãããã®ããããã£ã¸æ¸ãè¾¼ã¿ã¾ãããããã¬ãã«ã®ã¢ããªã±ã¼ã·ã§ã³ã¹ã¯ãªããããããè¡ãããããã¾ããã
- 以éã®ã¤ã³ãã¼ãã§ã¯ããã®ã¢ã¸ã¥ã¼ã«ã使ç¨ãã¾ãã
ä¾ãã°ãadmin.js ã¢ã¸ã¥ã¼ã«ã¯ç¹å®ã®æ©è½ï¼ä¾. èªè¨¼ãªã©ï¼ãæä¾ããããããã¾ããããå¤é¨ãã admin ãªãã¸ã§ã¯ãã«ã¯ã¬ãã³ã·ã£ã«æ
å ±ãæ¥ããã¨ãæå¾
ãã¾ãã:
// ð admin.js
export let config = { };
export function sayHi() {
alert(`Ready to serve, ${config.user}!`);
}
ããã§ãadmin.js 㯠config ãªãã¸ã§ã¯ããã¨ã¯ã¹ãã¼ããã¾ãï¼åæã¯ç©ºã§ãããããã©ã«ãããããã£ãããå ´åãããã¾ãï¼ã
次㫠init.js ãæã
ã®ã¢ããªã®æåã®ã¹ã¯ãªããã§ãconfig ãã¤ã³ãã¼ãããconfig.user ãè¨å®ãã¾ã:
// ð init.js
import {config} from './admin.js';
config.user = "Pete";
â¦ããã§ã¢ã¸ã¥ã¼ã« admin.js ã¯æ§æããã¾ããã
以éã®ã¤ã³ãã¼ãã¯ãããå¼ã³åºããã¨ãã§ããç¾å¨ã®ã¦ã¼ã¶ãæ£ãã表示ããã¾ã:
// ð another.js
import {sayHi} from './admin.js';
sayHi(); // Ready to serve, Pete!
import.meta
ãªãã¸ã§ã¯ã import.meta ã¯ç¾å¨ã®ã¢ã¸ã¥ã¼ã«ã«é¢ããæ
å ±ãå«ãã§ãã¾ãã
ãã®å 容ã¯ç°å¢ã«ä¾åãã¾ãããã©ã¦ã¶ã§ã¯ãã¹ã¯ãªããã® urlãHTML å ã§ããã°ç¾å¨ã®ã¦ã§ããã¼ã¸ã® url ãå«ãã§ãã¾ãã:
<script type="module">
alert(import.meta.url);
// script url (ã¤ã³ã©ã¤ã³ã¹ã¯ãªããã«å¯¾ãã HTML ãã¼ã¸ã® url)
</script>
ã¢ã¸ã¥ã¼ã«ã§ã¯ãæä¸ä½ã® âthisâ 㯠undefined ã§ã
ããã¯ããããªç¹å¾´ã§ãããå®å ¨æ§ã®ããã«è¨åãã¦ããã¾ãã
ã¢ã¸ã¥ã¼ã«ã§ã¯ãæä¸ä½ã® this 㯠undefined ã§ãã
this ãã°ãã¼ãã«ãªãã¸ã§ã¯ãã§ããéã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã¨ã®æ¯è¼ã§ã:ã
<script>
alert(this); // window
</script>
<script type="module">
alert(this); // undefined
</script>
ãã©ã¦ã¶åºæã®ç¹å¾´
é常ã®ã¹ã¯ãªããã¨æ¯ã¹ã¦ãtype="module" ãæã¤ã¹ã¯ãªããã«ã¯ããã©ã¦ã¶åºæã®éããããã¤ãããã¾ãã
ããåãã¦èªãã§ããå ´åãã¾ãã¯ãã©ã¦ã¶ã§ JavaScript ã使ç¨ãã¦ããªãå ´åã¯ã¹ããããã¦ãæ§ãã¾ããã
ã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã¯é å»¶ããã¾ã
ã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã¯å¤é¨ã¹ã¯ãªããã¨ã¤ã³ã©ã¤ã³ã¹ã¯ãªãã両æ¹ã§ã常㫠é
å»¶ãããdefer 屿§(ãã£ãã¿ã¼ ãã¼ã¸ã®ã©ã¤ããµã¤ã¯ã«: DOMContentLoaded, load, beforeunload, unload ã§èª¬æãã¦ãã¾ã)ã¨åã广ãæã¡ã¾ãã
ã¤ã¾ã:
- å¤é¨ã¢ã¸ã¥ã¼ã«ã¹ã¯ãªãã
<script type="module" src="...">㯠HTML å¦çããããã¯ãã¾ããã - ã¢ã¸ã¥ã¼ã«ã¹ã¯ãªãã㯠HTML ããã¥ã¡ã³ããå®å ¨ã«æºåã§ããã¾ã§å¾ ã¡ã¾ãã
- ç¸å¯¾çãªé åºã¯ç¶æããã¾ã: ããã¥ã¡ã³ãã®æåã«ããã¹ã¯ãªãããæåã«å®è¡ããã¾ãã
å¯ä½ç¨ã¨ãã¦ãã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã¯å¸¸ã«ãã®ä¸ã® HTML è¦ç´ ãè¦ãã¾ãã
ä¾:
<script type="module">
alert(typeof button); // object: ã¹ã¯ãªããã¯ä¸ã®ãã¿ã³ã `è¦ã` ã¾ã
// ã¢ã¸ã¥ã¼ã«ã¯é
å»¶ãããã®ã§ãã¹ã¯ãªããã¯ãã¼ã¸å
¨ä½ããã¼ããããå¾ã«å®è¡ãã¾ã
</script>
以ä¸ã®é常ã®ã¹ã¯ãªããã¨æ¯è¼ãã¦ãã ãã:
<script>
alert(typeof button); // Error: button is undefined, ã¹ã¯ãªããã¯ä¸ã®è¦ç´ ã¯è¦ãã¾ãã
// é常ã®ã¹ã¯ãªããã¯ããã¼ã¸ã®æ®ããå¦çãããåã«å³æå®è¡ãã¾ãã
</script>
<button id="button">Button</button>
注æ: å®éã«ã¯1ã¤ç®ã®ã¹ã¯ãªããã®åã«2ã¤ç®ã®ã¹ã¯ãªãããåä½ãã¾ã! ãªã®ã§ãæåã« undefined ã表示ããããã®å¾ object ã表示ããã¾ãã
ããã¯ãã¢ã¸ã¥ã¼ã«ãé å»¶ããã¦ããããã§ããé常ã®ã¹ã¯ãªããã¯ããã«å®è¡ããã®ã§ãæåã«åºåããã¾ãã
ã¢ã¸ã¥ã¼ã«ã使ãã¨ãã¯ãJavaScript ã¢ããªã±ã¼ã·ã§ã³ãæºåã§ããåã« HTML ããã¥ã¡ã³ãã表示ã§ãããã¨ã«æ³¨æãã¦ãã ãããä¸é¨ã®æ©è½ã¯ã¾ã æ©è½ããªãå¯è½æ§ãããã¾ããéæãªãªã¼ãã¼ã¬ã¤ãã¾ã㯠"ãã¼ãã£ã³ã°"ãé ç½®ããããããã¯ãã以å¤ã®æ¹æ³ã§è¨ªåè ãæ··ä¹±ããªãããã«ããå¿ è¦ãããã¾ãã
Async ã¯ã¤ã³ã©ã¤ã³ã¹ã¯ãªããã§åä½ãã¾ã
éã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã®å ´åãasync 屿§ã¯å¤é¨ã¹ã¯ãªããã§ã®ã¿åä½ãã¾ããAsync ã¹ã¯ãªããã¯ãä»ã®ã¹ã¯ãªãããHTMLããã¥ã¡ã³ãã¨ã¯é¢ä¿ãªããæºåãã§ã次第ããã«å®è¡ããã¾ãã
ã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã®å ´åãã¤ã³ã©ã¤ã³ã¹ã¯ãªããã§ãåä½ãã¾ãã
ä¾ãã°ãä¸ã®ã¹ã¯ãªãã㯠async ãããã®ã§ãä½ããå¾
ã¤ãã¨ã¯ããã¾ããã
ããã¯ããã¨ã HTMl ããã¥ã¡ã³ããã¾ã å®äºãã¦ããªãå ´åããä»ã®ã¹ã¯ãªãããã¾ã ä¿çã®å ´åã§ããã¤ã³ãã¼ãï¼ ./analytics.js ã®åå¾ï¼ãè¡ããæºåãã§ããã¨ãã«å®è¡ãã¾ãã
ããã¯ã«ã¦ã³ã¿ãåºåãããã¥ã¡ã³ãã¬ãã«ã®ã¤ãã³ããªã¹ããªã©ãä½ã«ãä¾åããªãæ©è½ã«é©ãã¦ãã¾ãã
<!-- ãã¹ã¦ã®ä¾å対象ãåå¾(analytics.js)ãããã¹ã¯ãªãããå®è¡ããã¾ã -->
<!-- ããã¥ã¡ã³ããä»ã® <script> ã¿ã°ã¯å¾
ã¡ã¾ãã -->
<script async type="module">
import {counter} from './analytics.js';
counter.count();
</script>
å¤é¨ã¹ã¯ãªãã
å¤é¨ã¢ã¸ã¥ã¼ã«ã¹ã¯ãªããã«ã¯ã2ã¤ã®å¤§ããªéããããã¾ãã:
-
åã
srcã®å¤é¨ã¹ã¯ãªããã¯ä¸åº¦ã ãå®è¡ããã¾ã:<!-- ã¹ã¯ãªãã my.js ã¯ä¸åº¦ã ãåå¾ããå®è¡ããã¾ã --> <script type="module" src="my.js"></script> <script type="module" src="my.js"></script> -
å¥ã®ãã¡ã¤ã³ããåå¾ãããå¤é¨ã¹ã¯ãªããã¯CORS ããããå¿ è¦ã¨ãã¾ããè¨ãæããã¨ãã¢ã¸ã¥ã¼ã«ã¹ã¯ãªãããå¥ã®ãã¡ã¤ã³ããåå¾ãããå ´åããªã¢ã¼ããµã¼ãã¯ãã®åå¾ã許å¯ããã¦ãããã¨ã示ãããã«ãããã
Access-Control-Allow-Origin: *(*ã®ä»£ããã«åå¾ãããã¡ã¤ã³ãæå®ããå ´åãããã¾ã)ãæä¾ããªããã°ãªãã¾ããã<!-- another-site.com 㯠Access-Control-Allow-Origin ãæä¾ããªããã°ãªãã¾ãã --> <!-- ããã§ãªãå ´åãã¹ã¯ãªããã¯å®è¡ããã¾ãã --> <script type="module" src="http://another-site.com/their.js"></script>ããã«ãããããã©ã«ãã§ã»ãã¥ãªãã£ãåä¸ãã¾ãã
ãã¢(å¥ãåºãã®) ã¢ã¸ã¥ã¼ã«ã¯è¨±å¯ããã¦ãã¾ãã
ãã©ã¦ã¶ã§ã¯ãimport ã¯ç¸å¯¾URLã絶対URLã©ã¡ããã®åå¾ãå¿
é ã§ãããã¹ããªãã¢ã¸ã¥ã¼ã«ã¯ âbareâ ã¢ã¸ã¥ã¼ã«ã¨å¼ã°ãã¾ãããã®ãããªã¢ã¸ã¥ã¼ã«ã¯ import ã§ã¯è¨±å¯ããã¦ãã¾ããã
ä¾ãã°ããã® import ã¯ç¡å¹ã§ã:
import {sayHi} from 'sayHi'; // Error, "bare" module
// ã¢ã¸ã¥ã¼ã«ã¯ãä¾ãã° './sayHi.js' ã¾ãã¯ã¢ã¸ã¥ã¼ã«ã®å ´æã§ãªããã°ãªãã¾ãã
Node.js ããã³ãã«ãã¼ã«ã®ãããªç¹å®ã®ç°å¢ã§ã¯ãã¢ã¸ã¥ã¼ã«ãè¦ã¤ããããã®ç¬èªã®æ¹æ³ãããããã調æ´ããããã®ããã¯ããããããå¥ãåºãã®ã¢ã¸ã¥ã¼ã«ã使ç¨ãããã¨ãã§ãã¾ããããããã©ã¦ã¶ã§ã¯ã¾ã ãã¢ã¢ã¸ã¥ã¼ã«ã¯ãµãã¼ãããã¦ãã¾ããã
äºææ§, ânomoduleâ
å¤ããã©ã¦ã¶ã¯ type="module" ãçè§£ãã¾ãããæªç¥ã®ã¿ã¤ãã®ã¹ã¯ãªããã¯åã«ç¡è¦ããã¾ãããããã«ã¯ãnomodule 屿§ã使ã£ã¦ããã©ã¼ã«ããã¯ãæä¾ãããã¨ãå¯è½ã§ãã:
<script type="module">
alert("Runs in modern browsers");
</script>
<script nomodule>
alert("ç¾å¨ã®ãã©ã¦ã¶ã¯ type=module 㨠nomodule ã©ã¡ããç¥ã£ã¦ããã®ã§ãããã¯ã¹ãããããã¾ã")
alert("å¤ããã©ã¦ã¶ã¯æªç¥ã® type=module ãæã¤ã¹ã¯ãªããã¯ç¡è¦ãã¾ãããããã¯å®è¡ãã¾ã");
</script>
ãã«ããã¼ã«
ç¾å®ã«ã¯ããã©ã¦ã¶ã¢ã¸ã¥ã¼ã«ã âçâ ã®å½¢å¼ã§ä½¿ç¨ããããã¨ã¯ã»ã¨ãã©ããã¾ãããé常ããããã Webpack ãªã©ã®ç¹å¥ãªãã¼ã«ã使ã£ã¦ä¸ç·ã«ã¾ã¨ãã¦ããããã¯ã·ã§ã³ãµã¼ãã«ãããã¤ãã¾ãã
ãã³ãã©ã¼ã使ç¨ããå©ç¹ã®1ã¤ã¯ããããã¯ã¢ã¸ã¥ã¼ã«ãã©ã®ããã«è§£æ±ºãããã«ã¤ãã¦ããå¤ãã®å¶å¾¡ãä¸ãããã¨ãã§ããCSS/HTML ã¢ã¸ã¥ã¼ã«ã®ããã«ãã¢ã¢ã¸ã¥ã¼ã«ããã®ä»ã®ãã¨ãå¯è½ã«ãã¾ãã
ãã«ããã¼ã«ã¯æ¬¡ã®ãã¨ãè¡ãã¾ãã:
- HTML ã®
<script type="module">ç½®ããã¨ãæå³ãã âã¡ã¤ã³â ã¢ã¸ã¥ã¼ã«ãåãã¾ãã - ä¾åé¢ä¿ãåæãã¾ã: ã¤ã³ãã¼ããã¤ã³ãã¼ãã®ã¤ã³ãã¼ãâ¦ãªã©
- ãã¤ãã£ãã®
importå¼ã³åºãããã³ãã©é¢æ°ã§ç½®ãæãããã¹ã¦ã®ã¢ã¸ã¥ã¼ã«ã1ã¤ã®ãã¡ã¤ã«ã«ãã«ããã¾ã(ãããã¯è¤æ°ã®ãã¡ã¤ã«ã«ãã¾ãã調æ´å¯è½)ã - ãã®éç¨ã§ãä»ã®å¤æãæé©åãé©ç¨ãããã¨ãã§ãã¾ãã
- å°éä¸è½ã®ã³ã¼ãã®åé¤
- æªä½¿ç¨ã®ã¨ã¯ã¹ãã¼ãã®åé¤(âtree-shakingâ)
consoleãdebuggerã®ãããªéçºåºæã®æã®åé¤- æå 端㮠JavaScript æ§æã¯ãBabel] ã使ç¨ãã¦åæ§ã®æ©è½ãæã¤å¤ãæ§æã«å¤æããã¾ã
- çµæã®ãã¡ã¤ã«ã® minify (ã¹ãã¼ã¹ã®åé¤ã夿°ãçãååã«ç½®æãããªã©)
ãã³ãã«ãã¼ã«ã使ç¨ããæ¬¡ã«ã¹ã¯ãªããã1ã¤ã®ãã¡ã¤ã«ï¼ã¾ãã¯ããã¤ãã®ãã¡ã¤ã«ï¼ã«ãã³ãã«ãããã¨ããããã® import/export æã¯ç¹å¥ãªãã³ãã«å¼ã³åºãã«ç½®ãæãããã¾ãããããã£ã¦ãçµæã¨ãã¦çãããã«ã㯠type=module ãå¿
è¦ã¨ãã¾ããããªã®ã§ããããé常ã®ã¹ã¯ãªããã«ç½®ããã¨ãã§ãã¾ãã:
<!-- Webpack ã®ãããªãã¼ã«ãã bundle.js ãå¾ãæ³å® -->
<script src="bundle.js"></script>
ã¨ã¯ããããã¤ãã£ãã¢ã¸ã¥ã¼ã«ã使ç¨å¯è½ã§ãããããã£ã¦ãããã§ã¯ Webpack ã使ç¨ãã¾ãã: å¾ã§æ§æã§ãã¾ãã
ãµããª
ã¾ã¨ããã¨ãã³ã¢ã®æ¦å¿µã¯æ¬¡ã®éãã§ã:
- ã¢ã¸ã¥ã¼ã«ã¯ãã¡ã¤ã«ã§ãã
import/exportãæ©è½ãããã«ã¯ããã©ã¦ã¶ã¯<script type="module">ãå¿ è¦ã¨ããããã¯ããã¤ãã®éããæå³ãã¾ãã:- ããã©ã«ãã§ã¯é å»¶
- éåæã¯ã¤ã³ã©ã¤ã³ã¹ã¯ãªããã§åä½ãã
- å¤é¨ã¹ã¯ãªãã㯠CORS ããããå¿ è¦ã¨ãã
- éè¤ããå¤é¨ã¹ã¯ãªããã¯ç¡è¦ããã
- ã¢ã¸ã¥ã¼ã«ã¯ç¬èªã®ãã¼ã«ã«ã®æä¸ä½ã¹ã³ã¼ããæã¡ã
import/exportçµç±ã§ãã¢ã¸ã¥ã¼ã«éã§æ©è½ãããåããã¾ãã - ã¢ã¸ã¥ã¼ã«ã¯å¸¸ã«
use strictã§ãã - ã¢ã¸ã¥ã¼ã«ã³ã¼ãã¯ä¸åº¦ã ãå®è¡ããã¾ããã¨ã¯ã¹ãã¼ãã¯ä¸åº¦çæãããã¤ã³ãã¼ã¿éã§å ±æããã¾ãã
ãããã£ã¦ãé常ãã¢ã¸ã¥ã¼ã«ã使ç¨ããã¨ããåã¢ã¸ã¥ã¼ã«ã¯æ©è½ãå®è£
ããããããã¨ã¯ã¹ãã¼ããã¾ããããã¦ãimport ã使ã£ã¦ãå¿
è¦ãªå ´æã«ç´æ¥ã¤ã³ãã¼ããã¾ãããã©ã¦ã¶ã¯èªåçã«ã¹ã¯ãªãããèªã¿è¾¼ã¿ãè©ä¾¡ãã¾ãã
ãããã¯ã·ã§ã³ç°å¢ã§ã¯å¤ãã®å ´åãããã©ã¼ãã³ã¹ãä»ã®çç±ã§ãã¢ã¸ã¥ã¼ã«ã1ã¤ã«ã¾ã¨ããããã« Webpack ãªã©ã®ãã³ãã©ã使ç¨ãã¾ãã
次ã®ç« ã§ã¯ããå¤ãã®ã¢ã¸ã¥ã¼ã«ã®ä¾ã¨ãã©ã®ããã«ã¨ã¯ã¹ãã¼ã/ã¤ã³ãã¼ããããããè¦ã¦ããã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã