ì´ ê°ì´ëë JavaScript 모ë 구문ì ììíëë° íìí 모ë ê²ì ì ê³µí©ëë¤.
A background on modulesJavaScript íë¡ê·¸ë¨ì 꽤 ìê² ììëììµëë¤. ì´ê¸°ì ì¬ì© ë ëë¶ë¶ì ì¤í¬ë¦½í¸ë ë 립ì ì¸ ìì ì ìííì¬, íìí ê²½ì° ì¹ íì´ì§ì ì½ê°ì ìí¸ ìì©ì ì ê³µíë¯ë¡ ì¼ë°ì ì¼ë¡ í° ì¤í¬ë¦½í¸ê° íìíì§ ìììµëë¤. ëªë í JavaScriptë ë§ì ë¸ë¼ì°ì ìì ì¤íëê³ ìë ìì í ì í리ì¼ì´ì ì ì¤íí ì ìì ë¿ ìëë¼, ë¤ë¥¸ 컨í ì¤í¸ìì (ì를ë¤ë©´ Node.js) JavaScript를 ì¬ì©íê² ë©ëë¤.
ë°ë¼ì ìµê·¼ ëª ë ëì JavaScript íë¡ê·¸ë¨ì íìì ë°ë¼ ê°ì ¸ì¬ ì ìë, ë³ëì 모ëë¡ ë¶í í기 ìí 매커ëì¦ì ì ê³µíë ê²ì ëí´ ìê°í기 ììíìµëë¤. node.jsë ì¤ë«ëì ì´ë¬í ë¥ë ¥ì ê°ì§ê³ ììê³ , 모ë ì¬ì©ì ê°ë¥íê²íë ë§ì JavaScript ë¼ì´ë¸ë¬ë¦¬ì íë ììí¬ê° ììµëë¤. (ì를ë¤ì´ RequireJSì ê°ì CommonJS ì AMDê¸°ë° ëª¨ë ìì¤í , ë ìµê·¼ìë Webpackê³¼ Babel ê°ì 모ë ê¸°ë° ìì¤í ì´ ììµëë¤.)
ì¢ì ììì ìµì ë¸ë¼ì°ì ê° ê¸°ë³¸ì ì¼ë¡ 모ë 기ë¥ì ì§ìí기 ììíì¼ë©°, ì´ê²ì´ ì´ ê¸°ì¬ì ì ë¶ì ëë¤. ë¸ë¼ì°ì ë 모ëì ë¡ë©ì ìµì í í ì ì기 ë문ì ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¬ì©íë ê²ë³´ë¤ ë í¨ì¨ì ì´ë©°, í´ë¼ì´ì¸í¸ 측ììì ì¶ê° ì²ë¦¬ì ì¬ë¶ì ìë³µì 모ë í´ì¼íë ê² ë³´ë¤ í¨ì¨ì ì ëë¤.
ë¸ë¼ì°ì í¸íì± Introducing an example모ë ì¬ì©ë²ì ì¤ëª
í기 ìí´ Githubì ê°ë¨í ìì 모ìì ë§ë¤ììµëë¤. ì´ ìì ë¤ì ì¹ íì´ì§ì <canvas>
ìì(element)를 ë§ë¤ê³ , ìºë²ì¤ì ë¤ìí ëíì ê·¸ë¦¬ê³ , 그린ê²ì ëí ì 보를 ë³´ê³ íë ê°ë¨í 모ë ì§í©ì
ëë¤.
ì´ê²ë¤ì ë§¤ì° ì¬ìí ê²ì´ì§ë§, 모ëì ëª ííê² ì¤ëª í기 ìí´ ìëì ì¼ë¡ ë¨ìíê² ì ì§ì¤ì ëë¤.
Basic example structure주ì: ìì 를 ë¤ì´ë¡ëíì¬ ë¡ì»¬ìì ì¤ííë ¤ë©´, ë¡ì»¬ ì¹ ìë²ë¥¼ íµí´ ìì 를 ì¤íí´ì¼ í©ëë¤.
첫 ë²ì§¸ ìì (basic-modules)를 ë³´ë©´ ë¤ìê³¼ ê°ì íì¼ êµ¬ì¡°ê° ììµëë¤.
index.html main.js modules/ canvas.js square.js
주ì: ì´ ê°ì´ëì 모ë ìì ë 기본ì ì¼ë¡ ëì¼í 구조를 ê°ì§ëë¤. ìì ë´ì©ì ìµìí´ì§ìëê² ì¢ìµëë¤.
modules ëë í 리ì ë 모ëì ë¤ìê³¼ ê°ìµëë¤.
canvas.js
â ìºë²ì¤ ì¤ì ê³¼ ê´ë ¨ë 기ë¥ì í¬í¨í©ëë¤.
create()
â ì§ì í ID를 ê°ì§ ëí¼ <div>
ìì, ì§ì í width
ì height
를 ê°ì§ ìºë²ì¤ë¥¼ ìì±í©ëë¤. ì§ì í ID(첫 ë²ì§¸ ì¸ì)ë ì§ì í ë¶ëª¨ ìì(ë ë²ì§¸ ì¸ì)ìì ì¶ê°ë©ëë¤. ìºë²ì¤ì 2D 컨í
ì¤í¸ì ëí¼(wrapper div)ì IDê° ë¤ì´ìë ê°ì²´ë¥¼ ë°íí©ëë¤.createReportList()
â ë°ì´í°ë¥¼ ì¶ë ¥íëë° ì¬ì©í ì ìë, ì§ì í ëí¼ ìì(div) ìì ì¶ê° ë ì ë ¬ëì§ ìì 리ì¤í¸(ul)를 ë§ëëë¤. 리ì¤í¸ì ID를 ë°íí©ëë¤.square.js
â ë¤ìì í¬í¨í©ëë¤.
name
â 문ìì´ 'square'를 ë´ê³ ìë ììì
ëë¤.draw()
â ì§ì ë í¬ê¸°, ìì¹, ììì ì¬ì©íì¬ ì§ì ë ìºë²ì¤ì ì¬ê°íì 그립ëë¤. ì¬ê°íì í¬ê¸°, ìì¹, ììì í¬í¨íë ê°ì²´ë¥¼ ë°íí©ëë¤.reportArea()
â 길ì´ê° 주ì´ì§ë©´ ì¬ê°íì ëì´ë¥¼ ì§ì í ë³´ê³ ì 리ì¤í¸ì ìì±í©ëë¤.reportPerimeter()
â 길ì´ê° 주ì´ì§ë©´ ì¬ê°íì ëë 를 ì§ì í ë³´ê³ ì 리ì¤í¸ì ìì±í©ëë¤.모ë 기ë¥ì ì¬ì©íë ¤ë©´ 먼ì í¨ì를 export í´ì¼ í©ëë¤. ì´ ìì
ì export
문(statement)ì ì¬ì©íì¬ ìíí©ëë¤.
ì´ë¥¼ ì¬ì©íë ê°ì¥ ì¬ì´ ë°©ë²ì 모ë ë°ì¼ë¡ ë´ë³´ë´ë ¤ë í목 ìì (export를) ë°°ì¹íë ê²ì ëë¤. ì를ë¤ë©´ ë¤ìê³¼ ê°ìµëë¤.
export const name = "square";
export function draw(ctx, length, x, y, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, length, length);
return {
length: length,
x: x,
y: y,
color: color,
};
}
functions, var
, let
, const
, class를 ë´ë³´ë¼ ì ìì§ë§, ìµìì í목ì´ì´ì¼ í©ëë¤. ì를ë¤ì´, í¨ì ììì export
를 ì¬ì©í ì ììµëë¤.
ì¬ë¬ í목ì ë´ë³´ë´ë ë í¸ë¦¬í ë°©ë²ì 모ë íì¼ ëì íëì export 문ì ì¬ì©íë ê²ì ëë¤. ê·¸ ë¤ìì ë´ë³´ë´ë ¤ë 기ë¥ë¤ì ì¼íë¡ êµ¬ë¶íì¬ ëì´íê³ ì¤ê´í¸ë¡ 묶ìµëë¤.
export { name, draw, reportArea, reportPerimeter };
Importing features into your script
모ëìì ì¼ë¶ 기ë¥ì ë´ë³´ë¸ íìë, ì´ë¥¼ ì¬ì©í ì ìëë¡ ì°ë¦¬ê° ì¬ì©í ì¤í¬ë¦½í¸ë¡ ê°ì ¸ìì¼ í©ëë¤. ê°ì¥ ê°ë¨í ë°©ë²ì ë¤ìê³¼ ê°ìµëë¤.
import { name, draw, reportArea, reportPerimeter } from "./modules/square.js";
import
문(statement)ì ì¬ì©íê³ , ê°ì ¸ì¬ 목ë¡ì ì¼íë¡ êµ¬ë¶íì¬ ëì´í ë¤ ê´í¸ë¡ 묶ìµëë¤. ê·¸ ë¤ìë fromì ì°ê³ 모ë íì¼ì ê²½ë¡ë¥¼ ìì±í©ëë¤. (ì¬ì´í¸ 루í¸ì ì°ê´ë ê²½ë¡ë¡, ì°ë¦¬ì basic-modules
ìì ë /js-examples/modules/basic-modules
ì
ëë¤) main.js
ìì ì´ë¬í ì½ë를 ë³¼ ì ììµëë¤.
ê·¸ë¬ë ì°ë¦¬ë ê²½ë¡ë¥¼ ì¡°ê¸ ë¤ë¥´ê² ìì±íìµëë¤. ì°ë¦¬ë "íì¬ ìì¹"를 ì미íë ì (.) 구문ì ì¬ì©íê³ ìì¼ë©°, ê·¸ ë¤ìì ì°¾ê³ ìíë íì¼ì ê²½ë¡ë¥¼ ë¤ì ì¨ ì¤ëë¤. ì´ê²ì ìëì ì¼ë¡ ì ì²´ ìë ê²½ë¡ë¥¼ ìì±íë ê²ë³´ë¤ í¨ì¬ ë¹ ë¥´ë©°, URLì´ ë ì§§ì ì§ë¯ë¡ ì¬ì´í¸ ê³ì¸µ 구조ì ë¤ë¥¸ ìì¹ë¡ ì´ëíëë¼ë ì´ ìì ê° ê³ì ìëí©ëë¤.
ì를ë¤ë©´,
/js-examples/modules/basic-modules/modules/square.js
ì´ë ê² ì¸ ì ììµëë¤.
main.js
ìì ì´ë¬í ì½ë를 ë³¼ ì ììµëë¤.
주ì: ì¼ë¶ 모ë ìì¤í ììë íì¼ íì¥ëª ì ìëµí ì ììµëë¤. (ì:
'/modules/square'
). ì´ê²ì ë¤ì´í°ë¸ JavaScriptììë ìëíì§ ììµëë¤. ëí ìì ì¬ëì를 í¬í¨í´ì¼ í©ëë¤.
ì°ë¦¬ì ì¤í¬ë¦½í¸ì 기ë¥ì ê°ì ¸ì¤ë©´ ëì¼í íì¼ ë´ì ì ìí ê²ì²ë¼ 기ë¥ì ì¬ì©í ì ììµëë¤. ë¤ìì main.js
ì import í ìëì ììµëë¤.
let myCanvas = create("myCanvas", document.body, 480, 320);
let reportList = createReportList(myCanvas.id);
let square1 = draw(myCanvas.ctx, 50, 50, 100, "blue");
reportArea(square1.length, reportList);
reportPerimeter(square1.length, reportList);
Applying the module to your HTML
ì´ì main.js
모ëì HTML íì´ì§ì ì ì©íë©´ ë©ëë¤. ì´ë ëª ê°ì§ 주목í ë§í ì°¨ì´ì ì ì ì¸íë©´ HTMLíì´ì§ì ì¼ë° ì¤í¬ë¦½í¸ë¥¼ ì ì©íëê²ê³¼ ë§¤ì° ì ì¬í©ëë¤.
ì´ ì¤í¬ë¦½í¸ë¥¼ 모ëë¡ ì ì¸íë ¤ë©´ <script>
ìì(element)ì type="module"
ì í¬í¨ìì¼ì¼ í©ëë¤.
<script type="module" src="main.js"></script>
기본ì ì¼ë¡ 모ë 기ë¥ì ê°ì ¸ì¤ë ì¤í¬ë¦½í¸ë ìµìì 모ëë¡ ìëí©ëë¤. ì´ë¥¼ ìëµíë©´ Firefoxë¡ ì를ë¤ë©´, "SyntaxError: import declarations may only appear at top level of a module"ë¼ë ì¤ë¥ë¥¼ ì¤ëë¤.
import
ì export
문(statement)ì 모ë ë´ììë§ ì¬ì©í ì ììµëë¤. ì ê· ì¤í¬ë¦½í¸ê° ìëëë¤.
Other differences between modules and standard scripts주ì:
type="module"
ì í¬í¨íë©´ ì¸í°ë ì¤í¬ë¦½í¸ììë import 모ëì ì¬ì©í ì ììµëë¤. ì:<script type="module"> /* ì¬ê¸°ì ì½ë를 ìì±íì¸ì */ </script>
.
file://
URL)ìì ë¡ëíë ¤ê³ íë©´, JavaScript 모ë ë³´ì ì구 ì¬íì¼ë¡ ì¸í´ CORSì¤ë¥ê° ë°ìí©ëë¤. ìë²ë¥¼ íµí´ í
ì¤í¸ í´ì¼ í©ëë¤.defer
ìì±(<script>
attributes)를 ì¬ì©í íìê° ììµëë¤. 모ëì ìëì¼ë¡ deferë©ëë¤.ì§ê¸ê¹ì§ ì°ë¦¬ê° export í 기ë¥ì named exports ë¡ êµ¬ì±ëììµëë¤. ê° í목(function, const
ë±)ì export í ë ì´ë¦ì¼ë¡ 참조ëìì¼ë©°, import í ëì ì´ ì´ë¦ì 참조íì¬ ì¬ì©í©ëë¤.
ê·¸ ì¸ìë default export ë¼ê³ ë¶ë¥´ë export ë ììµëë¤. ì´ê²ì 모ëì´ ì ê³µíë 기본 기ë¥ì ì½ê² ë§ë¤ ì ìëë¡ ì¤ê³ëììµëë¤. ëí JavaScript 모ëì 기존ì CommonJS ì AMD 모ë ìì¤í ê³¼ í¨ê» ì¬ì©(interpolate)íëë°ë ëìì´ ë©ëë¤. (Jason Orendorffì ìí´ ìì±ë ES6 In Depth: Modules ì ì¤ëª ëì´ììµëë¤. "Default exports"를 ê²ìí´ë³´ì¸ì)
ìì 를 ê°ì§ê³ ì´ë»ê² ìëíëì§ ì´í´ë³´ê² ìµëë¤. ìì ì¤ basic-modules íë¡ì í¸ì square.js
íì¼ìì ììì ìì, í¬ê¸°, ìì¹ë¡ ê°ë ì¬ê°íì ë§ëë randomSquare()
ë¼ë í¨ì를 ì°¾ì ì ììµëë¤. ì´ê²ì 기본ê°ì¼ë¡ exportíë ¤ê³ íë¯ë¡, íì¼ì 맨 ìëì ë¤ìê³¼ ê°ì´ ìëë¤.
export default randomSquare;
ì¤ê´í¸ê° ììì 주ìíì¸ì.
ëì í¨ì ìì export default
를 ì¶ê°íê³ , ë¤ìê³¼ ê°ì´ ìµëª
í¨ìë¡ ì ì¸í ì ììµëë¤.
export default function(ctx) {
...
}
main.js
íì¼ìì ë¤ì ì½ëì²ë¼ ì¬ì©íë©´, default functionì´ import ë©ëë¤.
import randomSquare from "./modules/square.js";
ë¤ì ë§íì§ë§, ì¤ê´í¸ê° ìë¤ë ì ì ì ìíì¸ì. íëì 모ëì íëì default exportë§ íì©í기 ë문ì ì°ë¦¬ë randomSquare
ê° í´ë¹ 모ëìì ì ì ììµëë¤. ìì ì½ëë ìëì ì½ë를 ë¨ì¶íì¬ ì¬ì©í ê²ì
ëë¤.
import { default as randomSquare } from "./modules/square.js";
Avoiding naming conflicts주ì: exportí í목ì ì´ë¦ì ë°ê¾¸ë 구문ì Renaming imports and exports ì¹ì ìì ì¤ëª í©ëë¤.
ì§ê¸ê¹ì§ ì°ë¦¬ì ìºë²ì¤ ëí 그리기 모ëì ì ëë¡ ìëíë ê² ê°ìµëë¤. ìì´ë ì¼ê°íì²ë¼ ë¤ë¥¸ ëíì 그리ë 모ëì ì¶ê°íë ¤ê³ íë©´ ì´ë»ê² ë ê¹ì? ì´ ëí(shape)ìë ìë§ë draw()
, reportArea()
ë±ê³¼ ê°ì ê´ë ¨ í¨ìê° ìì ê²ì
ëë¤. ëì¼í ì´ë¦ì ì¬ë¬ í¨ì를 ëì¼í ìµìì 모ëë¡ ê°ì ¸ì¤ë ¤ê³ íë©´, ì¶©ëê³¼ ìë¬ê° ë°ìí©ëë¤.
ë¤íì¤ë½ê²ë ì´ ë¬¸ì 를 í´ê²°í ì ìë ì¬ë¬ê°ì§ ë°©ë²ì´ ììµëë¤. ë¤ì ì¹ì ìì ì´ ë´ì©ì ì´í´ë³´ê² ìµëë¤.
Renaming imports and exportsimport
ì export
문(statement)ì ì¤ê´í¸ ìì as
í¤ìë를 ì í¨ìì ì´ë¦ì¼ë¡ í¨ê» ì¬ì©íì¬, ìµìì 모ë ë´ë¶ì í¨ìë¤ì ìë³ ê°ë¥í ì´ë¦ì¼ë¡ ë³ê²½í ì ììµëë¤.
ì를ë¤ì´ ë¤ì ë ê°ì§ ë°©ë²ì ì½ê°ì ì°¨ì´ê° ìì§ë§, ë ë°©ë² ëª¨ë ëì¼í ìì ì ìííê³ ììµëë¤.
// inside module.js
export { function1 as newFunctionName, function2 as anotherNewFunctionName };
// inside main.js
import { newFunctionName, anotherNewFunctionName } from "./modules/module.js";
// inside module.js
export { function1, function2 };
// inside main.js
import {
function1 as newFunctionName,
function2 as anotherNewFunctionName,
} from "./modules/module.js";
ì¤ì ì¬ë¡ë¥¼ ì´í´ë³´ê² ìµëë¤. renaming ëë í 리ìì ìê³¼ ì¼ê°íì ê·¸ë¦¬ê³ ë³´ê³ í기 ìí´ circle.js
ì triangle.js
모ëì ì¶ê°íë¤ë ì ë§ ì ì¸íë©´, ìì ìì ëì¼í 모ë ìì¤í
ì ë³¼ ì ììµëë¤.
ì´ ëª¨ëë ê°ê°ìë ë´ë¶ì ì¼ë¡ ëì¼í ì´ë¦ì 기ë¥ì´ ììµëë¤. ë°ë¼ì ê°ê° íë¨ì ëì¼í export 문(statement)ì´ ììµëë¤.
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ê° ê³ ì íëë¡(ìë³ ê°ë¥íëë¡) ì´ë¦ì ë³ê²½í´ì¼ í©ëë¤.
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";
ë¤ìê³¼ ê°ì´ importíë íì¼ ëì 모ë íì¼ìì 문ì 를 í´ê²°í ìë ììµëë¤.
// 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 를 ë³ê²½íë ê²ì´ ë í©ë¦¬ì ì ëë¤. í¹í ì ì´ ê¶íì´ ìë ì¨ë íí° ëª¨ëìì import를 ì¬ì©íë ê²½ì°ì í¹í ì ì©í©ëë¤.
Creating a module objectìì ë°©ë²ì ì ìì ì¼ë¡ ìëíì§ë§, ë¤ì ì§ì ë¶íê³ ê¸¸ì´ì§ ì ììµëë¤. ë³´ë¤ ëì í´ê²°ì± ì ê° ëª¨ëì 기ë¥ì 모ë ê°ì²´ ë´ë¶ë¡ ê°ì ¸ì¤ë ê²ì ëë¤. ë¤ìê³¼ ê°ì 구문ì ì¬ì©í©ëë¤.
import * as Module from "./modules/module.js";
ì´ ëª¨ëì module.js
ë´ìì ì¬ì©í ì ìë 모ë export를 ê°ì ¸ìµëë¤. ê·¸ë¦¬ê³ ê·¸ê²ë¤ì ê°ì²´ Module
ì 멤ë²ë¡ ë§ë¤ê³ ì°ë¦¬ ììì í¨ê³¼ì ì¸ ë¤ìì¤íì´ì¤ë¥¼ ì ê³µí©ëë¤.
Module.function1()
Module.function2()
etc.
ë¤ì í ë² ì¤ì ì¬ë¡ë¥¼ ì´í´ë³´ê² ìµëë¤. module-objects ëë í ë¦¬ë¡ ê°ë©´ ê°ì ìì 를 ë³¼ ì ìì§ë§, ìë¡ì´ 구문ì ì´ì©í기 ìí´ ë¤ì ìì±í©ëë¤. 모ëìì exportë 모ë ë¤ìê³¼ ê°ì ê°ë¨í íìì¼ë¡ ì´ë£¨ì´ì§ëë¤.
export { name, draw, reportArea, reportPerimeter };
ë°ë©´ì importë ë¤ìê³¼ ê°ìµëë¤.
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";
ê°ê°ì ê²½ì°ì, ì§ì í ê°ì²´ ì´ë¦ ìëì ìë 모ëì importì ì ê·¼í ì ììµëë¤. ë¤ìì ê·¸ ììì ëë¤.
let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, "blue");
Square.reportArea(square1.length, reportList);
Square.reportPerimeter(square1.length, reportList);
ë°ë¼ì ì´ì ë ì´ì ê³¼ ëê°ì ì½ë를 ìì±í ì ììµëë¤. (íìí ê²½ì° ê°ì²´ ì´ë¦ì í¬í¨í´ì¼ í©ëë¤) importë ë³´ë¤ ê¹ëí´ì¡ìµëë¤.
Modules and classesì´ì ì ìì íë¯ì´ class를 exportíê±°ë import í ìë ììµëë¤. ì´ê²ì ì½ëìì ì¶©ëì í¼í기 ìí ë ë¤ë¥¸ ìµì ì¼ë¡, 모ë ì½ëê° ì´ë¯¸ ê°ì²´ ì§í¥ ì¤íì¼ë¡ ìì±ë ê²½ì°ì í¹í ì ì©í©ëë¤.
ì°ë¦¬ì classes ëë í 리ìì ES í´ëì¤ë¡ ë¤ì ìì±ë ëí 그리기 모ëì ì를 ë³¼ ì ììµëë¤. ì를ë¤ì´ square.js
íì¼ìë 모ë 기ë¥ì´ ë¨ì¼ í´ëì¤ì í¬í¨ëì´ ììµëë¤.
class Square {
constructor(ctx, listId, length, x, y, color) {
...
}
draw() {
...
}
...
}
ì°ë¦¬ë ë¤ìê³¼ ê°ì´ export í©ëë¤.
main.js
ìì ì°ë¦¬ë ë¤ìê³¼ ê°ì´ import í©ëë¤.
import { Square } from "./modules/square.js";
ê·¸ë°ë¤ì í´ëì¤ë¥¼ ì´ì©íì¬ ì¬ê°íì 그립ëë¤.
let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, "blue");
square1.draw();
square1.reportArea();
square1.reportPerimeter();
Aggregating modules
모ëì 모ìì¼ í ëê° ìì ê²ì ëë¤. ì¬ë¬ ìë¸ ëª¨ëì íëì ë¶ëª¨ 모ëë¡ ê²°í©íì¬ ì¬ë¬ ë¨ê³ì ì¢ ìì±ì ê°ì§ ì ììµëë¤. ìì 모ëìì ë¤ì ììì export 구문ì ì¬ì©íí ì ììµëë¤.
export * from "x.js";
export { name } from "x.js";
주ì: ì´ê²ì ì¤ì ë¡ import ì ì¤ìë§ì´ê³ , ê·¸ ë¤ì exportê° ìµëë¤. ì를ë¤ë©´, "ëë 모ë x.js
를 ê°ì ¸ì¨ ë¤ì, ì¼ë¶ ëë ì ë¶ë¥¼ export íê² ë¤" ë¼ë ë»ì
ëë¤.
ì를ë¤ì´ module-aggregation ëë í 리를 참조íê² ìµëë¤. ì´ ìì ììë ì´ì í´ëì¤ ìì 를 기ë°ì¼ë¡ circle.js
, square.js
, triangle.js
ì 모ë 기ë¥ì í¨ê» 모ì¼ë shapes.js
ë¼ë ì¶ê° 모ëì´ ììµëë¤. ëí ì°ë¦¬ë shapes
모ë ëë í 리 ìì ìë ìë¸ ëë í 리 ë´ìì ìë¸ ëª¨ëì ì´ë ìì¼°ìµëë¤. ì´ì 모ë 구조ë ë¤ìê³¼ ê°ìµëë¤.
modules/ canvas.js shapes.js shapes/ circle.js square.js triangle.js
ê° íì 모ëìì export ííë ê°ìµëë¤. ì)
ë¤ìì ì§í©(aggregation) ë¶ë¶ì
ëë¤. shapes.js
ììë ë¤ìê³¼ ê°ì ë´ì©ì´ í¬í¨ëì´ ììµëë¤.
export { Square } from "./shapes/square.js";
export { Triangle } from "./shapes/triangle.js";
export { Circle } from "./shapes/circle.js";
ì´ ëª¨ëì ê°ê°ì ìë¸ ëª¨ëì export를 ê°ì ¸ìì shapes.js
모ëìì í¨ê³¼ì ì¼ë¡ ì¬ì©í ì ìëë¡ í©ëë¤.
주ì:
shapes.js
ìì 참조ëë exportë 기본ì ì¼ë¡ íì¼ì íµí´ 리ë¤ì´ë í¸ ëê³ ì¤ì ë¡ë ì¡´ì¬íì§ ìì¼ë¯ë¡, ê°ì íì¼ ë´ì ì ì©í ì½ë를 ì¸ ì ììµëë¤.
ì´ì main.js
íì¼ìì ì°ë¦¬ë ì¸ ê°ì 모ë í´ëì¤ë¥¼ 모ë ëì²´í ì ììµëë¤.
import { Square } from "./modules/square.js";
import { Circle } from "./modules/circle.js";
import { Triangle } from "./modules/triangle.js";
ë¤ìê³¼ ê°ì í ì¤ë¡ ìì±í ì ììµëë¤.
import {
Square,
Circle,
Triangle,
} from "/js-examples/modules/module-aggregation/modules/shapes.js";
Dynamic module loading
ë¸ë¼ì°ì ìì ì¬ì©í ì ìë JavaScript 모ë 기ë¥ì ìµì ë¶ë¶ì ëì 모ë ë¡ë© ì ëë¤. ì´ë ê² íë©´ 모ë ê²ì ìµìììì ë¶ë¬ì¤ì§ ìê³ , íìí ëë§ ëª¨ëì ëì ì¼ë¡ ë¶ë¬ì¬ ì ììµëë¤. ì´ê²ì ëª ê°ì§ ë¶ëª í ì±ë¥ ì´ì ì´ ììµëë¤. ê³ì ì½ì´ë³´ê³ ì´ë»ê² ìëíëì§ ì´í´ë´ ìë¤.
ì´ ìë¡ì´ 기ë¥ì íµí´ import()
를 í¨ìë¡ í¸ì¶íì¬ ëª¨ë ê²½ë¡ë¥¼ ë§¤ê° ë³ì(parameter)ë¡ ì ë¬í ì ììµëë¤. 모ë ê°ì²´(Creating a module object 참조)를 ì¬ì©íì¬ promise를 ë°ííë©´ í´ë¹ ê°ì²´ì exportì ì ê·¼í ì ììµëë¤.
import("/modules/myModule.js").then((module) => {
// Do something with the module.
});
ìì 를 ë³´ê² ìµëë¤. In the dynamic-module-imports ëë í 리ìë classes ìì 를 기ë°ì¼ë¡ í ë ë¤ë¥¸ ìì ê° ììµëë¤. ì´ë²ìë ìì ê° ë¡ë©ë ë ìºë²ì¤ì ì무ê²ë ê·¸ë¦¬ì§ ììµëë¤. ëì ì°ë¦¬ë ì¸ ê°ì ë²í¼("Circle", "Square", "Triangle")ì´ í¬í¨ëì´ ììµëë¤. ì´ ë²í¼ì ë르면 íìí 모ëì ëì ì¼ë¡ ë¶ë¬ì¨ ë¤ì, ì´ë¥¼ ì¬ì©íì¬ ì°ê´ë ëíì 그립ëë¤.
ì´ ìì ìì ì°ë¦¬ë index.html íì¼ê³¼ main.js íì¼ë§ ë³ê²½íìµëë¤. 모ë exportë ì´ì ê³¼ ëì¼íê² ì ì§ë©ëë¤.
main.js
ìì document.querySelector()
를 ì¬ì©íì¬ ê° ë²í¼ì ëí 참조를 ê°ì ¸ììµëë¤. ì를ë¤ë©´ ë¤ìê³¼ ê°ìµëë¤.
let squareBtn = document.querySelector(".square");
ê·¸ë° ë¤ì ê° ë²í¼ì ì´ë²¤í¸ 리ì¤ë를 ì°ê²°íì¬ í´ë¹ 모ëì ë르면, ëì ì¼ë¡ ë¡ëëì´ ëíì 그리ëë° ì¬ì©ë©ëë¤.
squareBtn.addEventListener("click", () => {
import("/js-examples/modules/dynamic-module-imports/modules/square.js").then(
(Module) => {
let square1 = new Module.Square(
myCanvas.ctx,
myCanvas.listId,
50,
50,
100,
"blue",
);
square1.draw();
square1.reportArea();
square1.reportPerimeter();
},
);
});
Note that, promise fulfillment ê° ëª¨ë ê°ì²´ë¥¼ ë°íí기 ë문ì í´ëì¤ë ê°ì²´ì íì 기ë¥ì¼ë¡ ë§ë¤ì´ì§ëë¤. ë°ë¼ì ì´ì Module
ì ì¬ì©íì¬ ìì±ì(contructor)ì ì ê·¼í´ì¼ í©ëë¤. ì를ë¤ì´ Module.Square( ... )
ì ê°ì´ ìì Module
ì´ ë¶ìµëë¤.
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