[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Modules [Back]  [Original]

JavaScript - JavaScript | MDN

This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

JavaScript

JavaScript.

In this article

:

JavaScript , -, . , , JavaScript; , (, Node.js).

, , JavaScript , . Node.js , , JavaScript (, CommonJS AMD RequireJS, Webpack Babel).

, , . , , .

JavaScript import export, .

, , , GitHub. <canvas> - ( ).

, .

: , -.

(. basic-modules) :

index.html
main.js
modules/
    canvas.js
    square.js

: .

modules:

  • canvas.js , canvas:

    • create() width height <div>- id parent. , 2D- id .
    • createReportList() , -, . id .
  • square.js :

    • name 'square'.
    • draw() , , . , , .
    • reportArea() , .
    • reportPerimeter() , .

.mjs .js

.js , .mjs. , V8 .mjs. :

, .js, . , , Content-Type, JavaScript MIME type text/javascript. MIME type "The server responded with a non-JavaScript MIME type", JavaScript. .js-, MIME type .mjs-. , .mjs , GitHub Pages http- Node.js.

, , , , ( , Content-Type- .mjs-). , , , , .

.js.

.mjs .js JavaScript-, , .mjs .js .

, :

  • .mjs, , TypeScript.
  • <script type="module"> , . .

, , , . export.

export , , :

js
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,
  };
}

var-, let-, const-, . , export , .

, , export , , , , , . :

js
export { name, draw, reportArea, reportPerimeter };

, , , . :

js
import { name, draw, reportArea, reportPerimeter } from "./modules/square.js";

import, , , , from, , basic-modules /js-examples/modules/basic-modules.

, (.) , " ", , . , , URL- - , .

:

/js-examples/modules/basic-modules/modules/square.js

./modules/square.js

main.js.

: /, ./, or ../ ( 'modules/square'). JavaScript-.

, , , . main.js, :

js
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);

: , . , const-. , "live bindings" - , , , const.

HTML-

main.js HTML-. , , .

, type="module" <script>-, , . main.js, :

html
<script type="module" src="main.js"></script>

HTML-, JavaScript- <script>-:

js
<script type="module">/*  JavaScript  */</script>

, , . , Firefox, , "SyntaxError: import declarations may only appear at top level of a module".

import export , .

  • HTML ( file:// URL), CORS - JavaScript-. .
  • , . - , strict mode .
  • defer (. <script> ) , deferred .
  • , <script> .
  • , : , . , , , , , JavaScript. - DevTools, , , , .

, ( const-, ) , .

, , JavaScript CommonJS AMD ( ES6 : , Default exports).

, . square.js randomSquare(), , . , :

js
export default randomSquare;

.

, export default:

js
export default function(ctx) {
  ...
}

main.js , :

js
import randomSquare from "./modules/square.js";

. , , , randomSquare. :

js
import { default as randomSquare } from "./modules/square.js";

: as .

. , , , ? , , , draw(), reportArea() ..; , .

, . .

as import export.

, , , -:

js
//  module.js
export { function1 as newFunctionName, function2 as anotherNewFunctionName };

//  main.js
import { newFunctionName, anotherNewFunctionName } from "./modules/module.js";
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 :

js
export { name, draw, reportArea, reportPerimeter };

main.js

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).

, :

js
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";

, , .

js
//  square.js
export {
  name as squareName,
  draw as drawSquare,
  reportArea as reportSquareArea,
  reportPerimeter as reportSquarePerimeter,
};
js
//  main.js
import {
  squareName,
  drawSquare,
  reportSquareArea,
  reportSquarePerimeter,
} from "./modules/square.js";

. , , , , . , , .

, . . :

js
import * as Module from "./modules/module.js";

, module.js Module, . :

js
Module.function1();
Module.function2();

..

, . module-objects, , . :

js
export { name, draw, reportArea, reportPerimeter };

, :

js
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";

, :

js
let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, "blue");
Square.reportArea(square1.length, reportList);
Square.reportPerimeter(square1.length, reportList);

, , ( , , ), .

, , , , - .

, ES classes. , square.js :

js
class Square {
  constructor(ctx, listId, length, x, y, color) {
    ...
  }

  draw() {
    ...
  }

  ...
}

:

js
export { Square };

main.js, :

js
import { Square } from "./modules/square.js";

, :

js
let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, "blue");
square1.draw();
square1.reportArea();
square1.reportPerimeter();

, . , , . :

js
export * from "x.js";
export { name } from "x.js";

module-aggregation. ( ) shapes.js, circle.js, square.js triangle.js . modules shape. , :

modules/
  canvas.js
  shapes.js
  shapes/
    circle.js
    square.js
    triangle.js

, :

js
export { Square };

. shapes.js, :

js
export { Square } from "./shapes/square.js";
export { Triangle } from "./shapes/triangle.js";
export { Circle } from "./shapes/circle.js";

shape.js.

: , shape.js, , - .

, main.js , :

js
import { Square } from "./modules/square.js";
import { Circle } from "./modules/circle.js";
import { Triangle } from "./modules/triangle.js";

:

js
import { Square, Circle, Triangle } from "./modules/shapes.js";

JavaScript- , . , , , . , .

import() , . Promise, (. ), , :

js
import("./modules/myModule.js").then((module) => {
  //  -   
});

. dynamic-module-imports , . . Circle, Square Triangle, , .

index.html main.js , .

main.js , document.querySelector():

js
let squareBtn = document.querySelector(".square");

, :

js
squareBtn.addEventListener("click", () => {
  import("./modules/square.js").then((Module) => {
    let square1 = new Module.Square(
      myCanvas.ctx,
      myCanvas.listId,
      50,
      50,
      100,
      "blue",
    );
    square1.draw();
    square1.reportArea();
    square1.reportPerimeter();
  });
});

: Promise , , Module., Module.Square(...).

, , . , - !

  • , :.js- MIME-type text/javascript ( JavaScript- MIME-type, text/javascript ), MIME-type, "The server responded with a non-JavaScript MIME type".
  • HTML- ( file://), CORS - JavaScript-. . GitHub pages , .js- MIME-type.
  • .mjs , - . , , macOS .js .mjs, . , x.mjs.js. macOS .mjs, .


Web Proxy Viewer  |  New URL  |  Original Page