[[oktatas:web:javascript|< JavaScript]]
====== JavaScript modulok ======
* **Szerző:** Sallai András
* Copyright (c) 2021, Sallai András
* Szerkesztve: 2021, 2022
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== Modulokról =====
Kétféle modult használatos
* **ES6** - **böngészők** számára tervezve
* **CommonJS** - nem böngészők számára tervezve - **Node.js**
Az **ES6** modul böngészőkben is használható modul. Arról ismerhetjük fel, hogy export, import utasításokat használ:
* export
* import
A **CommonJS** szabvány felismerhető a következő utasításokról:
* require()
* module.exports
===== ES modul =====
Legyen egy modules könyvtár amelyben egy employee.js állományban egy Employee osztályt tartunk:
export class Employee {
static create(name) {
return 'hello ' + name;
}
}
Az app.js fájlban használatba vesszük a modult, az import paranccsal:
import { Employee } from "./modules/employee.js";
const egy = Employee.create('Para Béla');
console.log(egy);
==== Futtatás böngészőből ====
Az index.html fájlba ezt írjuk:
Vegyük észre a type attribútumot.
==== Futtatás node paranccsal ====
A futtatáshoz szükség van a package.json fájlban egy type tulajdonságra, module értékkel:
{
"type": "module",
}
Ezzel megmondjuk, hogy ES6 modulként szeretnénk futtatni.
node app
A package.json fájl, type tulajdonság lehetőség előtt a fájlok kiterjesztése
ES6 modul esetén .mjs volt, így lehetett futtatni Node.js-el is.
Node.js modult ezzel szemben .cjs kiterjesztéssel látták el.
===== ES6 elnevezett függvény exportja =====
Nulla vagy több exportált modul.
Document
Karakterlánc
import { egy } from './modul.js';
console.log(egy())
export var egy = () => {
return 'bármi';
}
{
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "lite-server"
},
"devDependencies": {
"lite-server": "^2.6.1"
}
}
Az importálás során { } párost kell használni, ebbe kell
beírni az importált függvényt nevét.
Az importálás módja határozza meg, hogy kell írni { } kapcsos-zárójeleket.
===== ES6 elnevezett osztály exportja =====
Nulla vagy több exportált modul.
Document
Karakterlánc
import { Egy, Ketto} from './modul.js';
console.log(new Egy().ker())
console.log(new Ketto().csinal())
export class Egy {
ker() {
return 'valami';
}
}
export class Ketto {
csinal() {
return 'ezaz';
}
}
{
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "lite-server"
},
"devDependencies": {
"lite-server": "^2.6.1"
}
}
Az importálás során { } párost kell használni, ebbe kell
beírni az importált függvényt nevét.
Az importálás módja határozza meg, hogy kell írni { } kapcsoszárójeleket.
===== ES6 default export =====
Egyetlen exportált elem (modul) esetén használjuk.
Document
Karakterlánc
Nem használunk {} az "egy" körül:
import egy from './modul.js';
console.log(egy())
Névtelen függvényt használunk:
export default () => {
return 'bármi';
}
{
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "lite-server"
},
"devDependencies": {
"lite-server": "^2.6.1"
}
}
Ahol importáljuk a modult, az elnevezés tetszőleges, mivel a modulnak nincs neve.
===== ES6 default export osztállyal =====
Egyetlen névtelen osztály esetén használjuk.
Document
Karakterlánc
Nem használunk {} az "egy" körül:
import egy from './modul.js';
console.log(new egy().ker())
Névtelen osztályt használunk:
export default class {
ker() {
return 'valami';
}
}
{
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "lite-server"
},
"devDependencies": {
"lite-server": "^2.6.1"
}
}
===== Több függvény exportálása ES6 esetén =====
function calcRadius(side, alpha) {
if(!isValidInput(side)) {
throw new Error('Hiba! Az oldal érték hibás!')
}
if(!isValidInput(alpha)) {
throw new Error('Hiba! Az szög érték hibás!')
}
let rad = alpha * Math.PI / 180
return 1.0/2.0 * side * Math.sin(rad)
}
function isValidInput(input) {
let inputStr = String(input)
if(!inputStr.match(/^[0-9]+$/)) {
return false
}
if(input <= 0) {
return false
}
return true
}
export { calcRadius, isValidInput }
===== Link =====
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export (2022)