Modularita, co by nezbytná vlastnost jakéhokoliv programovacího jazyka pro psaní velkých aplikací, je v NodeJS zajištěna pomocí funkce require. Samotnou fyzcickou definici a implementaci pak zajišťuje CommonJS.
Takže takto v NodeJS
// index.js const express = require('express'); // knihovna z node_modules const http = require('http'); // systemova knihovna const myLib = require('./my-lib'); // moje knihovna v ./my-lib
JavaScript a import
JavaScript, skrze svou specifikaci ECMAScript 2015 zavádí, mimo jiné, i nové klíčové slova import
a export
pro možnost modularizovat javasxriptový kód.
To dovoluje následující zápis kódu:
// index.js import * as express from 'express'; import express from 'express'; import { Request, Response } from 'express';
Tohle vám bude například fungovat, pokud píšete React, VueJS, nebo Typescript aplikaci, protože ta je teprve skrze nějaký transpiler kompilována do požadované verze JavaScriptu.
Nicméně v NodeJS import
nefunguje… Zatím 🙂
node –experimental-modules
A tady přichází na scénu parametr příkazového řádku --experimental-modules
, který vám umožní v NodeJS používat klíčové slovo import
místo require
. Přesně tak, jak byste jej použili v Reactí apce…
Opravdu píšu místo, protože obě možnosti zatím nejdou kombinovat.
Takže pokud spustíte NodeJS script s tímto parametrem, můžete použít novou syntaxi pro importování, ale samozřejmě i exportování na úrovni modulu:
node --experimental-modules indxex.js
Dalším rozdílem je samotná přípona souboru se zdrojákem. Původní require funguje v klasických .js
souborech, nově import pak v souborech s příponou .mjs
.
Samozřejmě můžete import přímo psát do.js souboru a spouštět pokaždé s potřebným parametren, ale je to proti zavedené konvenci a navíc, nejde na první pohlef vidět jaký způsob práce s moduly jste použili.
Moje doporučení?
Pište v TypeScriptu 🙂 budete moct v .ts
souborech použít obě konstrukce pro import, ale vedle toho mnohem víc věcí, které JavaScript dělají skutečně silným programovacím jazykem.