Hier das Basic Script wie man require.js klever integriert.
Wie require.js Files lädt:
require( '../..' )
Ein Hinweis:
Man kann einzelne Libraries mit require('path/to/dein_modul'); angeben, aber sauberer, sicherer & stabiler ist, auch bei einzelnen Bilbiotheken immer den Paramter als array zu übergeben: require( ['path/to/dein_modul'] );
Hier Drei Schritte als Code Beispiele um: zu implementieren, konfigurieren & ein eigenes Modul zu schreiben
in den <head>
Teil des HTML schreibt man:
<script data-main="/assets/js/require-config" src="/assets/js/vendor/require.js"></script>
Der Code lädt require.js und startet die configuration, diese sollte dann so ungefähr aussehen:
/assets/js/require-config.js
require.config({ urlArgs : "bust=" + (new Date()).getTime(), // Cache Buster beim Entwickeln, dass immer die neuste Datei geladen wird paths: { // Definieren von vorgegebenen Libraries 'jquery' : 'vendor/jquery', 'jquery-clndr' : 'vendor/jquery.clndr.min', 'uikit' : 'vendor/uikit.min', 'uikit-icons' : 'vendor/uikit-icons.min', 'TAFFY' : 'vendor/taffy.min', 'moment' : 'vendor/moment-with-locales', 'mustache' : 'vendor/mustache.min', }, // Macht einen Wrapper um Plugins, und man kann sagen welches Sub-Library welche anderen Bibliotheken braucht shim: { 'jquery-clndr' : ['jquery'], 'uikit-icons' : ['uikit'], } }); requirejs( ['main'] ); // Lädt das Haupt-Script
Der hier gezeigte Vendor-Folder muss im gleichen Verzeichnis wie die config-file liegen, sprich: assets/js/vendor/…
Am Ende des vorherigen Scripts wird die main.js im assets/js/… Folder geladen, diese kann so aussehen:
define( function( require ){ /* R E Q U I R E D S C R I P T S Die immer geladen werden sollen */ const jQuery = require( 'jquery' ); const uikit = require( 'uikit' ); const uikit_icons = require( 'uikit-icons' ); /* E I G E N E S C R I P T S */ /* === Init ratioResizer === */ const ratioResizer = require( 'brandgrad/ratioResizer' ); // Modul Laden const youtubeResize = new ratioResizer( 'iframe[src^="https://www.youtube.com"]', 16, 9 ); // Modul Starten })
Das ist die main.js File oder auch app.js File. Am Ende wird ein Modul/eine Klasse geladen und gestartet.
Dieser Code sollte Teil der main.js File. Require.js lädt sonst immer alle Scripte. Das funktioniert nur mit diesem Syntax!
const page_has_kalender = document.querySelector( '#KalenderEvents' ); if( page_has_kalender ){ require( ['meine-module/kalender'], function ( kalendarModule ) { // ... Code falls man mit dem Modul was machen will }); }
Auch diese muss in entsprechenden Folder liegen:
assets/js/brandgrad/ratioResizer.js
define( function( require ){ //const jQuery = require( 'jquery' ); //const Mustache = require( 'mustache' ); return function( selector, ratio_width, ration_height ){ /* S E T T I N G S */ let delay_timer = 500; // Window Event soll nur alle 0.5s abgefuert werden (performance) /* N O D E S */ let youtube_embeds = document.querySelectorAll( selector ); /* I N I T */ resize_nodes( youtube_embeds, 16, 9 ); /* E V E N T S */ var delay; window.addEventListener( 'resize', function(){ clearTimeout( delay ); timer = setTimeout( function ( event ) { resize_nodes( youtube_embeds, 16, 9 ); }, delay_timer ); } ) /* M E T H O D S */ function resize_nodes( node_list, ratio_width, ration_height ){ for(let index = 0; index < youtube_embeds.length; index++) { resize_node( node_list[index], ratio_width, ration_height ); } } function resize_node( node, ratio_width, ration_height ){ node.style.width = '100%'; node.style.maxWidth = '100%'; let current_width = node.offsetWidth; let new_height = ( current_width / ratio_width ) * ration_height; node.style.height = new_height + 'px'; } return {} } })