Javascript require vs import

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • TheBoneJarmer
  • Registratie: September 2018
  • Laatst online: 06-05 13:26
Dag Tweakers

Sinds enkele jaren ben ik actief als webdeveloper op zowel professioneel als hobby-vlak en ik werk vooral met NodeJS. Nu, tot op heden heb ik altijd gebruik gemaakt van de ingebouwde functie "require()" voor het laden van modules binnen mijn nodejs app.

Echter ben ik onlaatst erop gewezen dat ik best switch naar de import statement van ES6. Deze gebruik ik al actief binnen Angular applicaties. Nu is het zo dat require en import prima werken an sich maar ik verder geen grote verschillen zie tussen de twee buiten de syntax. Ik heb de voorbije dagen actief research gedaan en ben daardoor op enkele blogposts, stackoverflow vragen en quora vragen terecht gekomen. Van wat ik begrijp is het volgende:

* CommonJS gebruikt de syntax "require()" en "module.exports." of gewoon "exports." waar ES6 import gebruik maakt van "export" of "export default" (wat een verschil maakt in hoe je zaken kunt importeren). ES6 bied dus duidelijk meer flexibiliteit. Maar voor mijn doeleinden lijkt dit een beetje overbodig omdat require prima werkt voor wat het moet.
* require is van NodeJS zelf en maakt deel uit van CommonJS (wat dat verder ook mag inhouden)
* import is volgens documentatie van NodeJS (https://nodejs.org/api/esm.html) de standaard voor het importeren van modules
* NodeJS heeft zowel support voor commonjs modules als esm maar ook pas recent
* import wordt naar het schijnt gesupported door alle browsers en kan client side gebruikt worden (niet getest)

En zo zijn er nog trouwens maar het is veel om op te sommen. Al bij al vind ik het behoorlijk verwarrend omdat de ene tutorial require gebruikt en de ander niet en de éné post or antwoord iets anders beweerd dan de ander. Er lijkt daarin een grote inconsistentie te zijn en ik heb tot op heden nog altijd geen concreet antwoord gehad op de volgende vragen:

1) Waarom zou ik ES import verkiezen boven require? Als in, welk probleem lost die ES import op?
2) Vervalt de support voor require binnen een aantal jaar?
3) Wat is het verschil tussen CommonJS en ES? Is CommonJS iets specifiek van Node?

Bronnen die ik hiervoor al onder andere gesonsulteerd heb zijn:
- https://flexiple.com/javascript-require-vs-import/
- https://stackoverflow.com...een-requirex-and-import-x
- https://www.educba.com/require-vs-import/
- https://dev.to/ckim328/javascript-s-import-vs-require-4nm3
- bovenstaande url naar nodejs documentatie

Ik denk namelijk dat ik al wel intussen voldoende gelezen heb om op zijn minst de verschillen te weten (hopelijk correct). Maar geen enkele van die posts, comments en antwoorden geven mij een goede reden waarom ik zou moeten switchen. Daarom dus dat ik de hulp wil inroepen van mijn mede tweakers.

Alle reacties


Acties:
  • +1 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

Import maakt deel uit van de standaard ES6, en werkt dus zoals je zegt in alle supported omgevingen (nodejs, browsers, ...)
Require is nodejs specifiek en werkt niet in browsers (niet zonder transpiling / externe libs / ...).

Met imports volg je dus de standaard.

Raar... Is zo gek nog niet


Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Ik gebruik gulp en rollup met 'import' om 1 minified js bestand te maken.
Hierdoor heb ik geen overhead van CommonJS, Webpack, Babel en anderen.

Als je echt dynamisch wil werken met modules, lees dan even
https://developer.mozilla.../JavaScript/Guide/Modules

[ Voor 6% gewijzigd door DJMaze op 26-07-2021 16:12 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • Ed Vertijsment
  • Registratie: Juli 2014
  • Laatst online: 22-05 18:20
Eigenlijk wat Tsjilp en DJMaze eigenlijk al aangeven, het is vooral en standaardisatie ding. Require is de nodejs oplossing om modules te kunnen gebruiken bij het draaien van JavaScript in niet browser omgevingen. Dit is ouder dan de gestandaardiseerde import syntax.

Require is beschikbaar gemaakt door requirejs voor de browser maar ook geïmplementeerd door bundlers zoals webpack. Deze zullen echter ook import ondersteunen wat deel is van de ECMAScript standaard.

Tegenwoordig zullen de meeste codebases gebruik maken van een bundler om de broncode om te zetten naar 1 bestand voor de browser. Vaak ook geminified. De modules worden dan dus build time samengevoegd.

Bij twijfel: gebruik import, dat houd je meer op een standards track.

[ Voor 10% gewijzigd door Ed Vertijsment op 26-07-2021 17:17 ]


Acties:
  • 0 Henk 'm!

  • TheBoneJarmer
  • Registratie: September 2018
  • Laatst online: 06-05 13:26
Bedankt voor jullie feedback! Ik heb mij intussen meer verdiept in import en heb besloten het daarbij te houden.

Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 19:22
TheBoneJarmer schreef op woensdag 28 juli 2021 @ 12:35:
Bedankt voor jullie feedback! Ik heb mij intussen meer verdiept in import en heb besloten het daarbij te houden.
In zulke situaties is de standaard altijd de beste keus
Pagina: 1