Importer un fichier JavaScript dans un autre fichier JavaScript

dans ce tutoriel, nous allons voir les différentes méthodes pour importer un module JavaScript

Importer un fichier JavaScript dans un autre fichier JavaScript

Depuis 2015 (ES6), JavaScript dispose d'un module ES6 standard pour importer des modules dans Node.js. Cette fonctionnalité est prise en charge par la plupart des navigateurs modernes.

Pour assurer la compatibilité avec les anciens navigateurs, vous pouvez utiliser des outils de création tels que Webpack et Rollup et des outils de conversion tels que Babel.

module ES6

Les modules ECMAScript (ES6) sont pris en charge dans Node.js depuis la v8.5. Pour activer « ESM » (par rapport à l'ancien système de module de style CommonJS dans Node.js [« CJS »]), utilisez "type": "module"dans package.json ou dans un fichier ajoutez l'extension .mjs. (De même, si la valeur par défaut est ESM, un module écrit dans un ancien Node.js module CJS peut être nommé .cjs)

Utilisation package.json

//package.json
{
"type": "module"
}

Ensuite module.js

//module.js 
export function hello() {
return "Hello";
}

Ensuite main.js

//main.js
import { hello } from './module.js';
let val = hello(); // val is "Hello";

En utilisant .mjs, vous auriez module.mjs:

//module.mjs
export function hello() {
return "Hello";
}

Ensuite main.mjs:

//main.mjs
import { hello } from './module.mjs';
let val = hello(); // val is "Hello";

Module de navigateur ECMAScript

Le navigateur prend en charge le chargement direct des modules ECMAScript à partir de Safari 10.1, Chrome 61, Firefox 60 et Edge 16 (aucun outil tel que Webpack n'est requis). Consultez le support actuel pour peut utiliser. Il n'est pas nécessaire d'utiliser l'extension Node.js.mjs. Le navigateur ignore complètement l'extension de fichier module/script.

<script type="module">
import { hello } from './hello.mjs'; // Or it could be simply `hello.js`
hello('world');
</script>
// hello.mjs -- or it could be simply `hello.js`
export function hello(text) {
const div = document.createElement('div');
div.textContent = `Hello ${text}`;
document.body.appendChild(div);
}

Importation dynamique dans le navigateur

L'importation dynamique permet à un script de charger d'autres scripts si nécessaire.

<script type="module">
import('hello.mjs').then(module => {
module.hello('world');
});
</script>

Node.js requiert

Le module CJS qui est encore largement utilisé dans Node.js est module.exports/ requiresystem.

// anymodule.js
module.exports = {
hello: function() {
return "Hello";
}
}
// server.js
const anymodule= require('./anymodule');
let val = anymodule.hello(); // val is "Hello"

Chargement AJAX

Des scripts supplémentaires peuvent être chargés avec des appels AJAX et exécutés à l'aide de eval. C'est le moyen le plus simple, mais il y a des risques de bugs fréquents ainsi que des problèmes de sécurité.

Utiliser fetch et la librairie fetchappels

Le procédé est similaire aux importations dynamiques, vous pouvez charger un ou plusieurs scripts en utilisant les appels fetch et la bibliothèque FetchInject pour contrôler l'ordre d'exécution des dépendances.

fetchInject([
'https://cdn.jsdelivr.net/momentjs/2.17.1/moment.min.js'
]).then(() => {
console.log(`Finish in less than ${moment().endOf('year').fromNow(true)}`)
})

Chargement de JQuery

La bibliothèque jQuery offre la possibilité de lire une seule ligne.

$.getScript("m_script.js", function() {
alert("Script loaded but not necessarily executed.");
});

Chargement de script dynamique

Vous pouvez ajouter des balises de script à l'aide de l'URL du script dans le code HTML.

Le script peut être hébergé sur un autre serveur. La balise <script> peut être placée dans la section <head> ou juste avant la balise de fin </body> .

Voici un exemple de son fonctionnement :

function dynamicallyLoadScript(url) {
var script = document.createElement("script"); // create a script DOM node
script.src = url; // set its src to the provided URL

document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)
}

Cette fonction ajoute une nouvelle balise <script> à la fin de la section d'en-tête de la page. Ici, l'attribut src est défini sur l'URL spécifiée dans la fonction comme premier paramètre.