export
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2018å¹´5æ.
export 宣è¨ã¯ãJavaScript ã¢ã¸ã¥ã¼ã«ããå¤ãã¨ã¯ã¹ãã¼ãããããã«ä½¿ç¨ããã¾ããã¨ã¯ã¹ãã¼ããããå¤ã¯ import 宣è¨ããã¤ãããã¯ã¤ã³ãã¼ãã«ãã£ã¦ãä»ã®ããã°ã©ã ã«ã¤ã³ãã¼ããããã¨ãã§ãã¾ããã¤ã³ãã¼ãããããã¤ã³ãã£ã³ã°ã®å¤ã¯ããããã¨ã¯ã¹ãã¼ãããã¢ã¸ã¥ã¼ã«ã®å¤æ´ã®å¯¾è±¡ã¨ãªãã¾ããã¢ã¸ã¥ã¼ã«ãã¨ã¯ã¹ãã¼ããããã¤ã³ãã£ã³ã°ã®å¤ãæ´æ°ããã¨ããã®æ´æ°ã¯ã¤ã³ãã¼ããããå¤ã¨ãã¦è¦ãã¾ãã
ã½ã¼ã¹ãã¡ã¤ã«ã§ export 宣è¨ã使ç¨ããããã«ã¯ããã®ãã¡ã¤ã«ã¯ã©ã³ã¿ã¤ã ã«ãã£ã¦ã¢ã¸ã¥ã¼ã«ã¨ãã¦è§£éãããå¿
è¦ãããã¾ããHTML ã§ã¯ã<script> ã¿ã°ã« type="module" ã追å ããããä»ã®ã¢ã¸ã¥ã¼ã«ã«ã¤ã³ãã¼ãããããã¨ã§å®ç¾ããã¾ããã¢ã¸ã¥ã¼ã«ã¯èªåçã«å³æ ¼ã¢ã¼ãã§è§£éããã¾ãã
æ§æ
// åã
ã®æ©è½ãã¨ã¯ã¹ãã¼ã
export let name1, name2/*, ⦠*/; // var ã
export const name1 = 1, name2 = 2/*, ⦠*/; // var, let ã
export function functionName() { /* ⦠*/ }
export class ClassName { /* ⦠*/ }
export function* generatorFunctionName() { /* ⦠*/ }
export const { name1, name2: bar } = o;
export const [ name1, name2 ] = array;
// ãªã¹ããã¨ã¯ã¹ãã¼ã
export { name1, /* â¦, */ nameN };
export { variable1 as name1, variable2 as name2, /* â¦, */ nameN };
export { variable1 as "string name" };
export { name1 as default /*, ⦠*/ };
// ããã©ã«ãã¨ã¯ã¹ãã¼ã
export default expression;
export default function functionName() { /* ⦠*/ }
export default class ClassName { /* ⦠*/ }
export default function* generatorFunctionName() { /* ⦠*/ }
export default function () { /* ⦠*/ }
export default class { /* ⦠*/ }
export default function* () { /* ⦠*/ }
// ã¢ã¸ã¥ã¼ã«ã®éç´
export * from "module-name";
export * as name1 from "module-name";
export { name1, /* â¦, */ nameN } from "module-name";
export { import1 as name1, import2 as name2, /* â¦, */ nameN } from "module-name";
export { default, /* â¦, */ } from "module-name";
export { default as name1 } from "module-name";
nameN-
ã¨ã¯ã¹ãã¼ãããèå¥åï¼ä»ã®ã¹ã¯ãªããã§
importãä»ãã¦ã¤ã³ãã¼ãã§ããããã«ããããï¼ãasã§ã¨ã¤ãªã¢ã¹ã使ç¨ããå ´åãå®éã«ã¨ã¯ã¹ãã¼ããããååãæååãªãã©ã«ã§æå®ãããã¨ãã§ãã¾ãããããã¯æå¹ãªèå¥åã¨ã¯éãã¾ããã
解説
åã¢ã¸ã¥ã¼ã«ã§ã¯ã2 ã¤ã®ç°ãªã種é¡ã®ã¨ã¯ã¹ãã¼ããååä»ãã¨ã¯ã¹ãã¼ãã¨ããã©ã«ãã¨ã¯ã¹ãã¼ããè¡ããã¨ãã§ãã¾ããååä»ãã¨ã¯ã¹ãã¼ãã¯ã¢ã¸ã¥ã¼ã«ãã¨ã«è¤æ°æã¦ã¾ãããããã©ã«ãã¨ã¯ã¹ãã¼ã㯠1 ã¤ã®ã¿ã§ããããããã®ã¨ã¯ã¹ãã¼ãæ¹æ³ã¯ãä¸è¨ã®æ§æã®ã²ã¨ã¤ã«å¯¾å¿ãã¾ãã
ååä»ãã¨ã¯ã¹ãã¼ã:
// äºåã«å®£è¨ãããæ©è½ã®ã¨ã¯ã¹ãã¼ã
export { myFunction2, myVariable2 };
// åå¥ã®æ©è½ã®ã¨ã¯ã¹ãã¼ã
// (var, let, const, function, class ãã¨ã¯ã¹ãã¼ãå¯è½)
export let myVariable = Math.sqrt(2);
export function myFunction() {
// â¦
}
export ãã¼ã¯ã¼ãã®å¾ã«ã¯ã let, const, var 宣è¨ãã颿°ãã¯ã©ã¹å®£è¨ã使ç¨ãããã¨ãã§ãã¾ããã¾ãã export { name1, name2 } æ§æã使ç¨ããã¨ãä»ã®å ´æã§å®£è¨ãããååã®ãªã¹ããã¨ã¯ã¹ãã¼ããããã¨ãã§ãã¾ããexport {} ã¯ç©ºã®ãªãã¸ã§ã¯ããã¨ã¯ã¹ãã¼ãããããã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ãããããã¯ä½ãã¨ã¯ã¹ãã¼ãããªãï¼ç©ºã®ååã®ãªã¹ããã¨ã¯ã¹ãã¼ãããï¼ãã¼ãªãã¬ã¼ã·ã§ã³å®£è¨ã§ãã
export ã¯ãusing ã¾ã㯠await using 宣è¨ã§ã¯ä½¿ç¨ã§ãã¾ããããã ããusing ã¾ã㯠await using ã§å®£è¨ããã夿°ãã¨ã¯ã¹ãã¼ããããã¨ã¯å¯è½ã§ãããã ãããã®æ¹æ³ã¯æ¥µåé¿ããã¹ãã§ãã夿°ã¯ã¢ã¸ã¥ã¼ã«ã®å®è¡ãçµäºããã¨ããã«ç ´æ£ããããããã¤ã³ãã¼ãå
ã¯ãã¹ã¦æ¢ã«ç ´æ£ãããå¤ãåãåããã¨ã«ãªãããã§ãã
export using resource1 = getResource(); // SyntaxError
// æ§æä¸ã¯è¨±ãããããé¿ããã¹ã
using resource2 = getResource();
export { resource2 };
ã¨ã¯ã¹ãã¼ã宣è¨ã¯ä¸æçãªãããã¾ã¼ã³ã®ã«ã¼ã«ã«ã¯å¾ãã¾ãããX ã¨ããååèªä½ã宣è¨ãããåã«ããã®ã¢ã¸ã¥ã¼ã«ã X ãã¨ã¯ã¹ãã¼ããããã¨ã宣è¨ãããã¨ãã§ãã¾ãã
export { x };
const x = 1;
// ããã¯ã`export`ãåãªã宣è¨ã§ããã`x`ã®å¤ãå©ç¨ããªãã®ã§ã
// åä½ãã¾ãã
ããã©ã«ãã¨ã¯ã¹ãã¼ã:
// ããã©ã«ãã¨ãã¦äºåã«å®ç¾©ãããæ©è½ã®ã¨ã¯ã¹ãã¼ã
export { myFunction as default };
// ããã¯æ¬¡ã®ãã®ã¨åçã§ã
export default myFunction;
// åå¥ã®æ©è½ãããã©ã«ãã¨ãã¦ã¨ã¯ã¹ãã¼ã
export default function () { /* ⦠*/ }
export default class { /* ⦠*/ }
ã¡ã¢:
ã¨ã¯ã¹ãã¼ã宣è¨ã®ååã¯ãäºãã«ç°ãªããã®ã§ãªããã°ãªãã¾ãããéè¤ããååã§ã¨ã¯ã¹ãã¼ãã宿½ããããdefault ã®ã¨ã¯ã¹ãã¼ããè¤æ°ä½¿ç¨ãã㨠SyntaxError ãçºçããã¢ã¸ã¥ã¼ã«ãè©ä¾¡ãããªããªãã¾ãã
export default æ§æã§ã¯ããããå¼ã許å¯ããã¾ãã
export default 1 + 1;
ç¹æ®ãªã±ã¼ã¹ã¨ãã¦ã颿°ãã¯ã©ã¹ã¯å¼ã§ã¯ãªã å®£è¨ ã¨ãã¦ã¨ã¯ã¹ãã¼ãããããããã®å®£è¨ã¯ç¡åã«ãããã¨ãã§ãã¾ããã¤ã¾ãã颿°ã¯å·»ãä¸ããè¡ããããã¨ã«ãªãã¾ãã
// ãã㯠`foo` ã¯é¢æ°å®£è¨ã§ãã£ã¦ã颿°å¼ã§ã¯ãªãããåä½ãã¾ãã
foo();
export default function foo() {
console.log("Hi");
}
// å³å¯ã«ã¯å®£è¨ã§ãããã¨ã«å¤ããã¯ãªãããç¡åã§ãããã¨ã許ããã¾ãã
export default function () {
console.log("Hi");
}
ååä»ãã¨ã¯ã¹ãã¼ãã¯ãè¤æ°ã®å¤ãã¨ã¯ã¹ãã¼ãããå¿
è¦ãããå ´åã«æçã§ãããã®ã¢ã¸ã¥ã¼ã«ãã¤ã³ãã¼ãããã¨ãã¯ãååä»ãã¨ã¯ã¹ãã¼ãã§ã¯å
¨ãåãååã§åç
§ããªããã°ãªãã¾ãããï¼ä»»æã§ as ã§ååã夿´ã§ãã¾ãï¼ãããã©ã«ãã¨ã¯ã¹ãã¼ãã¯ä½ãååãä»ãã¦ã¤ã³ãã¼ããããã¨ãã§ãã¾ããä¾ã示ãã¾ãã
// ãã¡ã¤ã« test.js
const k = 12;
export default k;
// ä»ã®ãã¡ã¤ã«
import m from "./test"; // k ãããã©ã«ãã¨ã¯ã¹ãã¼ããªã®ã§ãã¤ã³ãã¼ããã k ã®ä»£ããã« m ã使ç¨ãããã¨ãã§ããç¹ã«æ³¨æãã¦ãã ãã
console.log(m); // 12
ååã®ç«¶åãé²ãããã«ãååä»ãã¨ã¯ã¹ãã¼ãã®ååã夿´ãããã¨ãã§ãã¾ãã
export { myFunction as function1, myVariable as variable };
æååãªãã©ã«ã使ç¨ããã¨ãååãæå¹ãªèå¥å以å¤ã®ãã®ã«å¤æ´ãããã¨ãã§ãã¾ããä¾ãã°æ¬¡ã®ãããã¾ãã
export { myFunction as "my-function" };
åã¨ã¯ã¹ãã¼ã / éç´
親ã¢ã¸ã¥ã¼ã«å ã®ç°ãªãã¢ã¸ã¥ã¼ã«ãããã¤ã³ãã¼ã/ã¨ã¯ã¹ãã¼ãããã¦ããã®ã¢ã¸ã¥ã¼ã«ããã¤ã³ãã¼ãã§ããããã«ãããã¨ãå¯è½ã§ããè¨ãæããã°ãæ§ã ãªã¢ã¸ã¥ã¼ã«ããã®æ§ã ãªã¨ã¯ã¹ãã¼ããéç´ãã 1 ã¤ã®ã¢ã¸ã¥ã¼ã«ã使ãããã¨ãã§ãã¾ãã
ãã㯠"export from" æ§æã§å®ç¾ã§ãã¾ãã
export { default as function1, function2 } from "bar.js";
ããã¯ã function1 㨠function2 ãã«ã¬ã³ãã¢ã¸ã¥ã¼ã«å
ã§å©ç¨ã§ããªããã¨ãé¤ãã°ãimport 㨠export ã®çµã¿åããã¨åãã§ãã
import { default as function1, function2 } from "bar.js";
export { function1, function2 };
ã»ã¨ãã©ã® "import from" æ§æã«ã¯å¯¾å¿ãã "export from" æ§æãããã¾ãã
export { x } from "mod";
export { x as v } from "mod";
export * as ns from "mod";
ã¾ããimport * from "mod" ã¯ããã¾ããããexport * from "mod" ã¯ããã¾ããããã§ mod ããã®ãã¹ã¦ã® ååä»ã ã¨ã¯ã¹ãã¼ããç¾å¨ã®ã¢ã¸ã¥ã¼ã«ã®ååä»ãã¨ã¯ã¹ãã¼ãã¨ãã¦åã¨ã¯ã¹ãã¼ãããã¾ããã mod ã®ããã©ã«ãã¨ã¯ã¹ãã¼ãã¯åã¨ã¯ã¹ãã¼ãããã¾ããããããæé»ã®ãã¡ã«åãååãåã¨ã¯ã¹ãã¼ããã 2 ã¤ã®ã¯ã¤ã«ãã«ã¼ãã® export æããã£ãå ´åãã©ã¡ããåã¨ã¯ã¹ãã¼ãããã¾ããã
// -- mod1.js --
export const a = 1;
// -- mod2.js --
export const a = 3;
// -- barrel.js --
export * from "./mod1.js";
export * from "./mod2.js";
// -- main.js --
import * as ns from "./barrel.js";
console.log(ns.a); // undefined
éè¤ããååãç´æ¥ã¤ã³ãã¼ããããã¨ããã¨ãã¨ã©ã¼ãçºçãã¾ãã
import { a } from "./barrel.js";
// SyntaxError: The requested module './barrel.js' contains conflicting star exports for name 'a'
以ä¸ã¯ãimport ã«å¯¾å¿ãããã®ã§ãããæ§æçã«ã¯ç¡å¹ã§ãã
export DefaultExport from "bar.js"; // Invalid
æ£ããæ¹æ³ã¯ãã¨ã¯ã¹ãã¼ãã®ååã夿´ãããã¨ã§ãã
export { default as DefaultExport } from "bar.js";
export from" æ§æã§ã¯ãas ãã¼ã¯ã³ãçç¥ãããã¨ãã§ãã¾ããããã«ãããããã©ã«ãã¨ã¯ã¹ãã¼ãã¯ããã©ã«ãã¨ã¯ã¹ãã¼ãã¨ãã¦åã¨ã¯ã¹ãã¼ããããã¾ã¾ã¨ãªãã¾ãã
export { default, function2 } from "bar.js";
export from 㯠import ã対å¿ãã¦ãããã¹ã¦ã®æ©è½ã«å¯¾å¿ãã¦ãã¾ããä¾ãã°ã¤ã³ãã¼ã屿§ãªã©ã§ãã
export { default } from "./data.json" with { type: "json" };
ä¾
>ååä»ãã¨ã¯ã¹ãã¼ãã®ä½¿ç¨
my-module.js ã¢ã¸ã¥ã¼ã«ã®ä¸ã§ã以ä¸ã®ã³ã¼ããå«ãããã¨ãã§ãã¾ãã
// "my-module.js" ã¢ã¸ã¥ã¼ã«
function cube(x) {
return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
const graph = {
options: {
color: "white",
thickness: "2px",
},
draw() {
console.log("From graph draw function");
},
};
export { cube, foo, graph };
HTML ãã¼ã¸ã®ä¸ã«å«ã¾ããæä¸ä½ã¢ã¸ã¥ã¼ã«ã®ä¸ã§ã¯ã次ã®ããã«ãããã¨ãã§ãã¾ãã
import { cube, foo, graph } from "./my-module.js";
graph.options = {
color: "blue",
thickness: "3px",
};
graph.draw(); // "From graph draw function" ã¨è¨é²
console.log(cube(3)); // 27
console.log(foo); // 4.555806215962888
以ä¸ã®ç¹ã«æ³¨æãããã¨ãéè¦ã§ãã
- ãã®ã¹ã¯ãªããã HTML ã®
<script>è¦ç´ ã§ type="module" ãæå®ãããã®ã«å ¥ããå¿ è¦ããããããããã°é©åã«ã¢ã¸ã¥ã¼ã«ã¨ãã¦èªèãããæ±ããã¾ãã file://ã® URL ã§ JavaScript ã¢ã¸ã¥ã¼ã«ãå®è¡ãããã¨ã¯ã§ãã¾ãããâ CORS ã¨ã©ã¼ã«ãªãã¾ããHTTP ãµã¼ãã¼ãéãã¦å®è¡ããå¿ è¦ãããã¾ãã
ããã©ã«ãã¨ã¯ã¹ãã¼ãã®ä½¿ç¨
ã¢ã¸ã¥ã¼ã«å ¨ä½ã表ãåä¸ã®å¤ãã¨ã¯ã¹ãã¼ããããå ´åã¯ãããã©ã«ãã¨ã¯ã¹ãã¼ãã使ç¨ã§ãã¾ãã
// module "cube.js"
export default function cube(x) {
return x * x * x;
}
å¥ã®ã¹ã¯ãªããããã®ãããã©ã«ãã¨ã¯ã¹ãã¼ãã®ã¤ã³ãã¼ãã¯ç´è¦³çã§ãã
import cube from "./cube.js";
console.log(cube(3)); // 27
export from ã®ä½¿ç¨
以ä¸ã®ãããªé層ãããå ´åãä¾ã«èãã¦ã¿ã¾ãããã
childModule1.js:myFunctionããã³myVariableãã¨ã¯ã¹ãã¼ãchildModule2.js:myClassãã¨ã¯ã¹ãã¼ãparentModule.js: éç´å ã¨ãã¦æ©è½ããï¼ä»ã«ã¯ä½ãããªãï¼- æä¸ä½ã¢ã¸ã¥ã¼ã«ã§ãã
parentModule.jsã®ã¨ã¯ã¹ãã¼ããå©ç¨ãã
ã³ã¼ãã¹ããããã使ãã¨ãã®ãããªæãã«ãªãã¾ãã
// childModule1.js å
function myFunction() {
console.log("Hello!");
}
const myVariable = 1;
export { myFunction, myVariable };
// childModule2.js å
class MyClass {
constructor(x) {
this.x = x;
}
}
export { MyClass };
// parentModule.js
// childModule1 㨠childModule2 ããã®ã¨ã¯ã¹ãã¼ãã
// éç´ãã¦åã¨ã¯ã¹ãã¼ããã
export { myFunction, myVariable } from "childModule1.js";
export { MyClass } from "childModule2.js";
// æä¸ä½ã¢ã¸ã¥ã¼ã«
// parentModule ã«ã¢ã¸ã¥ã¼ã«ãéç´ãã¦ããã®ã§ã
// åä¸ã®ã¢ã¸ã¥ã¼ã«ããã¨ã¯ã¹ãã¼ããå©ç¨ã§ãã¾ãã
import { myFunction, myVariable, MyClass } from "parentModule.js";
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-exports> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
import- JavaScript ã¢ã¸ã¥ã¼ã«ã¬ã¤ã
- ES6 in Depth: Modules (hacks.mozilla.org, 2015)
- ES modules: A cartoon deep-dive (hacks.mozilla.org, 2018)
- Exploring JS, Ch.16: Modules (Dr. Axel Rauschmayer)