<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nodejs - NET73</title>
	<atom:link href="https://net73.de/tag/nodejs/feed/" rel="self" type="application/rss+xml" />
	<link>https://net73.de</link>
	<description>Techblog, Freizeitblog &#38; Webhosting</description>
	<lastBuildDate>Sat, 08 Nov 2025 09:01:48 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://net73.de/wp-content/uploads/2025/11/favicon512-150x150.png</url>
	<title>nodejs - NET73</title>
	<link>https://net73.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress-Templates mit Roots/Sage entwickeln</title>
		<link>https://net73.de/wordpress-templates-mit-roots-sage-entwickeln/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wordpress-templates-mit-roots-sage-entwickeln</link>
					<comments>https://net73.de/wordpress-templates-mit-roots-sage-entwickeln/#respond</comments>
		
		<dc:creator><![CDATA[Marc Eggert]]></dc:creator>
		<pubDate>Sat, 21 Mar 2020 20:52:29 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[composer]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sage]]></category>
		<guid isPermaLink="false">https://pixel64.de/?p=1965</guid>

					<description><![CDATA[<p>Seit einigen Jahren schreibe ich u.a. eigene WordPress-Themes für diverse Projekte. Seit einigen Jahren artet dies auch des öfteren in Code-Chaos aus. Wer nicht zu Beginn eine klare Aufteilung und Struktur in sein Projekt bringt, wird schnell unübersichtlichen HTML-, PHP-, JS und CSS-Code als Ergebnis haben. Vor kurzem habe ich mir dann Sage von roots.io [&#8230;]</p>
<p>The post <a href="https://net73.de/wordpress-templates-mit-roots-sage-entwickeln/">WordPress-Templates mit Roots/Sage entwickeln</a> first appeared on <a href="https://net73.de">NET73</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="974" height="606" src="https://net73.de/wp-content/uploads/2020/09/sage_logo.png" alt="" class="wp-image-2346" srcset="https://net73.de/wp-content/uploads/2020/09/sage_logo.png 974w, https://net73.de/wp-content/uploads/2020/09/sage_logo-300x187.png 300w, https://net73.de/wp-content/uploads/2020/09/sage_logo-768x478.png 768w" sizes="(max-width: 974px) 100vw, 974px" /></figure>



<p>Seit einigen Jahren schreibe ich u.a. eigene WordPress-Themes für diverse Projekte. Seit einigen Jahren artet dies auch des öfteren in Code-Chaos aus. Wer nicht zu Beginn eine klare Aufteilung und Struktur in sein Projekt bringt, wird schnell unübersichtlichen HTML-, PHP-, JS und CSS-Code als Ergebnis haben. </p>



<p>Vor kurzem habe ich mir dann Sage von roots.io näher angesehen. Dieses Framework arbeitet von Grund auf bereits mit einigen modernen Dev-Techniken und vereinfacht so Versionierung, Struktur und Wartbarkeit. On Top gibt es noch das Template-System von <a rel="noreferrer noopener" aria-label="Laravel (öffnet in neuem Tab)" href="https://laravel.com/" target="_blank">Laravel</a>, welches ich als PHP-Framework für Projekte abseits von WordPress sehr schätze.<br>Generell finde ich es sehr angenehm, dass sich der gesamte Code in einem WP-Projekt via Sage objektorientiert schreiben lässt. Sprich: Controller und Views &#8211; saubere Trennung zwischen Funktionalität und Ausgabe. Wer also schon gewöhnt ist, mit Laravel oder CakePHP zu arbeiten oder grundsätzlich auf MVC-Basis programmiert, wird sich hier schnell zurechtfinden.</p>



<span id="more-1965"></span>



<p>Auch hier setze ich zunächst auf ein grundsätzliches Docker-Compose-LAMP-Konstrukt, welches ich für die meisten meiner Web-Projekte nutze und je nach Bedarf in den Dockerfiles anpasse. Für Sage benötigen wir zunächst eine grundsätzliche WordPress-Installation. Das Sage-Basis-Template ist das komplette Theme-Verzeichnis. Sprich: Sage wird direkt unter /wp-content/themes/[SAGE_PROJEKTNAME] installiert.</p>



<h2 class="wp-block-heading">Yarn</h2>



<p><a rel="noreferrer noopener" aria-label="Yarn (öffnet in neuem Tab)" href="https://yarnpkg.com/" target="_blank">Yarn</a> ist eine Alternative zu <a rel="noreferrer noopener" aria-label=" (öffnet in neuem Tab)" href="https://www.npmjs.com/" target="_blank">npm</a>, ein Paketmanager für node_modules/<a rel="noreferrer noopener" aria-label="NodeJS (öffnet in neuem Tab)" href="https://nodejs.org/" target="_blank">NodeJS</a>. Ähnlich, wie ich es in meinem Beitrag zur Organisation von JavaScript und CSS beschrieben hatte, nutzt auch Sage eine Browsersync.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="589" src="https://net73.de/wp-content/uploads/2020/09/yarn_start-1024x589.png" alt="" class="wp-image-2348" srcset="https://net73.de/wp-content/uploads/2020/09/yarn_start-1024x589.png 1024w, https://net73.de/wp-content/uploads/2020/09/yarn_start-300x172.png 300w, https://net73.de/wp-content/uploads/2020/09/yarn_start-768x442.png 768w, https://net73.de/wp-content/uploads/2020/09/yarn_start.png 1054w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>&#8222;yarn start&#8220; im Projektverzeichnis des Themes</figcaption></figure>



<p>Yarn wirst du beim Entwickeln des WordPress-Themes immer benötigen, bzw. hauptsächlich die Funktion von <a rel="noreferrer noopener" aria-label="Browsersync (öffnet in neuem Tab)" href="https://browsersync.io/" target="_blank">Browsersync</a>. Da es hier anscheinend oft zu Missverständnissen kommt: Browsersync sorgt dafür, dass sämtlicher <a rel="noreferrer noopener" aria-label="SASS/SCSS (öffnet in neuem Tab)" href="https://sass-lang.com/" target="_blank">SASS/SCSS</a>-Code in Echtzeit in den Browser injiziert wird. In der Terminal-Ausgabe wird hierfür ein Webserver unter Port 3000 und ein Browsersync-Interface unter Port 3001 zur Verfügung gestellt. Zusätzlich läuft dann allerdings auch noch der normale DEV-Server auf Port 80 (oder auf welchem alternativen Port auch immer dieser eingestellt ist). In meinem Fall läuft der DEV-Server (also die WordPress-Installation) auf Port 80 in einem Docker-Container lokal. Dies kann allerdings natürlich auch ein entfernter Webserver sein oder ein Docker-Container auf einem alternativen Port. Beim Setup von Sage werden diese Parameter allerdings abgefragt und können auch später noch angepasst werden (unter /resources/assets/config.json).<br>Sobald also Browsersync läuft (via &#8222;yarn start&#8220;), führen alle änderungen am Code dazu, dass dieser direkt in den Browser übertragen wird. Hierbei ist es auch wichtig zu verstehen, dass die Haupt-CSS-Datei des DEV-Servers einen Fehler 404 auswirft (main.css), da diese nicht &#8222;in Echt&#8220; kompiliert wurde, sondern nur auf Port 3000 in den Code injiziert wird (Ergebnis des SCSS-Kompilierens). Ist die Entwicklung am Projekt fertig oder der aktuelle Arbeitsschritt getan, kann via &#8222;yarn build&#8220; der CSS- und JS-Code dauerhart kompiliert werden. Sprich: Hier wird jetzt aus dem SCSS-Code CSS-Code generiert und tatsächlich ins Dist-Verzeichnis (main.css) geschrieben. Ab hier funktioniert die Seite dann auch direkt auf dem DEV-Server (und nicht über Port 3000). Wichtig ist hier auch zu wissen: Sobald Du wieder im DEV-Mode bist (also &#8222;yarn start&#8220;), werden die statischen Inhalte im Dist-Verzeichnis wieder entfernt.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="565" src="https://net73.de/wp-content/uploads/2020/09/browsersync-1024x565.png" alt="" class="wp-image-2349" srcset="https://net73.de/wp-content/uploads/2020/09/browsersync-1024x565.png 1024w, https://net73.de/wp-content/uploads/2020/09/browsersync-300x166.png 300w, https://net73.de/wp-content/uploads/2020/09/browsersync-768x424.png 768w, https://net73.de/wp-content/uploads/2020/09/browsersync-1536x848.png 1536w, https://net73.de/wp-content/uploads/2020/09/browsersync.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Browsersync auf Port 3001 auf lokalem Rechner (Proxy für DEV-Server)</figcaption></figure>



<h2 class="wp-block-heading">Laravel Blade</h2>



<p>Wer das Template-System aus Laravel noch nicht kennt: auf <a rel="noreferrer noopener" aria-label="laracasts.com (öffnet in neuem Tab)" href="https://laracasts.com/" target="_blank">laracasts.com</a> gibt es einige Tutorials. Hier empfehle ich ein &#8222;from scratch&#8220;-Tutorial und darin den Teil, bei welchem es um die Templates geht. </p>



<p>Die Logik und Syntax für die Blade-Templates ist nicht sehr schwierig und du gewöhnst dich innerhalb kürzester Zeit daran (und möchtest es gar nicht mehr missen).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="589" src="https://net73.de/wp-content/uploads/2020/09/blade-1024x589.png" alt="" class="wp-image-2350" srcset="https://net73.de/wp-content/uploads/2020/09/blade-1024x589.png 1024w, https://net73.de/wp-content/uploads/2020/09/blade-300x172.png 300w, https://net73.de/wp-content/uploads/2020/09/blade-768x442.png 768w, https://net73.de/wp-content/uploads/2020/09/blade.png 1054w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Die Templates für das Sage-Theme (Basis)</figcaption></figure>



<h2 class="wp-block-heading">Fazit</h2>



<p>Roots/Sage gefällt mir außerordentlich gut. Die Struktur, die hier geboten wird, ist sehr durchdacht und bietet bereits von Grund auf eine Ausstattung mit verschiedenen modernen Werkzeugen, die einzeln organisiert einen deutlichen Aufwand bedeuten würden. Auch die Integration von Composer, dem Template-System und yarn ist bereits so konfiguriert, dass man nach anfänglichem entwickeln auch sehr einfach weitere JS-, CSS- oder PHP-Pakete (Composer) nachladen kann und durch diese Systeme natürlich auch gleich die Versionen der einzelnen Frameworks zentral steuern, bzw. überwachen kann.</p>



<p>Was an dieser Stelle auch noch empfehlenswert ist, da es ja immer noch eine Art Grauzone ist: Sämtliche Frameworks ladet ihr lokal und nur bei Bedarf via CDN. Das externe Laden von Scripts via CDN ist m.W. auch noch nicht so ganz hinsichtlich der DSGVO geklärt.</p>



<p>Natürlich kann dieser Beitrag nur ein kurzes Umreißen der Features sein, die mir persönlich am meisten Gefallen. Sage bietet deutlich mehr. Ein Blick lohnt sich &#8211; und nicht gleich aufgeben! Sortierter und sauberer Code und ein fast schon integriertes Deployment-Konzept wird dir auch später bei der Wartung der so erstellten Themes helfen.</p>



<p><strong>Hinweis: </strong>Auf arch linux wurde folgender Fehler nach &#8222;yarn start&#8220; ausgeworfen:</p>



<pre class="wp-block-code"><code>&#91;...] node_modules/webpack/lib/Chunk.js:866
		throw new Error(
		^

Error: Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead &#91;...]</code></pre>



<p>Den Fehler konnte ich durch Installation der 4.0.0-Beta von extract-text-webpack-plugin beheben.</p>



<pre class="wp-block-code"><code>yarn add extract-text-webpack-plugin@Next</code></pre><p>The post <a href="https://net73.de/wordpress-templates-mit-roots-sage-entwickeln/">WordPress-Templates mit Roots/Sage entwickeln</a> first appeared on <a href="https://net73.de">NET73</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://net73.de/wordpress-templates-mit-roots-sage-entwickeln/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CSS und JavaScript mit NPM und Gulp organisieren</title>
		<link>https://net73.de/css-und-javascript-mit-npm-und-gulp-organisieren/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=css-und-javascript-mit-npm-und-gulp-organisieren</link>
					<comments>https://net73.de/css-und-javascript-mit-npm-und-gulp-organisieren/#respond</comments>
		
		<dc:creator><![CDATA[Marc Eggert]]></dc:creator>
		<pubDate>Wed, 11 Mar 2020 19:07:20 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[gulp]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[yarn]]></category>
		<guid isPermaLink="false">https://pixel64.de/?p=1933</guid>

					<description><![CDATA[<p>Bei den meisten Web-Projekten setze ich auf verschiedene externe Projekte und Frameworks. Sei es Bootstrap, JQuery oder FontAwesome und weitere Klassen oder Plugins. Meistens ist es dann ein Problem, die verschiedenen Versionen und externen Scripts auf einem aktuellen Stand zu halten, zu organisieren oder kontrollieren, welche Version untereinander notwendig ist, um alle Abhängigkeiten (auch die [&#8230;]</p>
<p>The post <a href="https://net73.de/css-und-javascript-mit-npm-und-gulp-organisieren/">CSS und JavaScript mit NPM und Gulp organisieren</a> first appeared on <a href="https://net73.de">NET73</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="has-drop-cap has-very-light-gray-background-color has-background">Bei den meisten Web-Projekten setze ich auf verschiedene externe Projekte und Frameworks. Sei es Bootstrap, JQuery oder FontAwesome und weitere Klassen oder Plugins. Meistens ist es dann ein Problem, die verschiedenen Versionen und externen Scripts auf einem aktuellen Stand zu halten, zu organisieren oder kontrollieren, welche Version untereinander notwendig ist, um alle Abhängigkeiten (auch die des eigenen Projekts) zu erfüllen.<br>Um die jeweils aktuellen oder selbst gesetzten festen Versionen von Bootstrap &amp; Co. zu halten, gibt es Nodejs/NPM. Sämtliche Pakete werden dabei in ein Verzeichnis &#8222;node_modules&#8220; installiert. Doch wie sieht eine praktikable Lösung aus, mittels welcher diese Bibliotheken im eigenen Web-Projekt gehalten werden?<br>Genau hier kommt der &#8222;Workflow-Enhancer&#8220; Gulp.js ins Spiel. Gulp sorgt dafür, dass die entscheidenden Scripts aus dem Verzeichnis node_modules in das eigene Web-Verzeichnis geführt werden (beispielsweise /js, /css, /fonts, etc.) und ggf. SASS&#8211;Code aus Bootstrap und eigenem Code in CSS kompiliert wird. Dazu ist in der DEV-Umgebung ein File-Watcher aktiv, welcher in Echtzeit geschriebenen SASS-Code kompiliert und ins CSS-Verzeichnis schreibt.<br>Im Anschluss (nicht Teil dieses Beitrags) kann über eine Aufgabe via Gulp der gesamte JS- und CSS-Code für die Produktiv-Umgebung komprimiert werden. Perfekt!</p>



<span id="more-1933"></span>



<h2 class="wp-block-heading">Ausgangslage (Beispiel)</h2>



<p>Grundvoraussetzung für den nachfolgend beschriebenen Einsatz von gulp ist, dass bereits <a rel="noreferrer noopener" aria-label="NodeJS (öffnet in neuem Tab)" href="https://nodejs.org/" target="_blank">NodeJS</a> und npm (oder <a rel="noreferrer noopener" aria-label="yarn (öffnet in neuem Tab)" href="https://yarnpkg.com/" target="_blank">yarn</a>) in der Entwicklungsumgebung installiert sind.</p>



<p>Ein PHP-Web-Projekt sieht bei mir meistens so aus, dass ich im obersten Verzeichnis alle Umgebungs-Tools ablege (Dateien für Docker, Vagrant, etc.). Dort ist dann auch ein Verzeichnis &#8222;www&#8220;, in welchem das eigentliche Projekt liegt. In diesem Verzeichnis sind in der Wurzel dann die Dateien für die DEV-Tools (Composer, Node, Gulp, etc.), ein &#8222;app&#8220;-Verzeichnis, in welchem die PHP-Aktionen sind (MVC) und ein &#8222;public&#8220;-Verzeichnis, welches die &#8222;htdocs&#8220; für die Webroot bereithält. Hier ist meistens nur eine index.php-Datei, welche die Core-Klasse(autoload) aus dem app-Verzeichnis lädt und eben die statischen Frontend-Dateien (js,css, scss, assets, fonts, etc.).</p>



<p>In der Übersicht sieht das dann so aus:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">├── app -&gt;
│   ├── init.php
│   ├── config -&gt;
│   ├── controller -&gt;
│   ├── library -&gt;
│   ├── model -&gt;
│   └── view -&gt;
├── composer.json
├── composer.lock
├── composer.phar
├── gulpfile.js
(├── node_modules -&gt; # wird erst mit "npm install" automatisch angelegt!)
├── package.json
├── package-lock.json
├── public -&gt;
│   ├── css -&gt;
│   ├── js -&gt;
│   ├── fonts -&gt;
│   ├── scss -&gt;
│   └── index.php
└── Readme.md</code></pre>



<p>Das Ziel ist hier also, dass die benötigten JS- und CSS-Dateien aus node_modules in das Frontend-Verzeichnis nach public/js und public/css überführt werden und die selbst geschriebenen SASS-Scripts aus public/scss mit den Scripts aus node_modules zusammen in public/css kompiliert werden (letzteres inkl. FileWatcher in Echtzeit.</p>



<p>Als Basis-Beispiel eine package.json-Datei, die bereits Gulp lokal via npm (oder yarn) installiert:</p>



<pre class="wp-block-code"><code lang="json" class="language-json line-numbers">{
  "name": "n73-test",
  "version": "0.1.0",
  "description": "Test-Projekt zur gulp-Demonstration",
  "main": "public/index.php",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
  },
  "author": "Pixel64",
  "license": "MIT",
  "dependencies": {
    "bootstrap": "^4.4.1",
    "jquery": "^3.4.1",
    "popper.js": "^1.16.1"
  },
  "devDependencies": {
    "browser-sync": "^2.26.7",
    "gulp": "^4.0.2",
    "gulp-sass": "^4.0.2"
  }
}</code></pre>



<p>In diesem Projekt werden also die Pakete Bootstrap, JQuery und Popper gezogen und in das Verzeichnis node_modules gelegt.</p>



<h2 class="wp-block-heading">GULP.JS</h2>



<p>Mit der obigen Verzeichnisstruktur werden die Module via &#8222;npm install&#8220; installiert (im Root-Verzeichnis, in welchem sich auch die package.json-Datei befindet).</p>



<p>Ist der Vorgang ausgeführt ist gulp _lokal_ installiert! Eine globale Installation von gulp(-cli) kann über den Paketmanager oder mit dem Schalter &#8222;-g&#8220; erreicht werden (npm install -g gulp).</p>



<p>Die lokale Projekt-Installation reicht allerdings i.d.R. aus. Die installierte Version kann wie folgt geprüft werden:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">./node_modules/.bin/gulp --version
CLI version: 2.2.0
Local version: 4.0.2</code></pre>



<h3 class="wp-block-heading">gulpfile.js</h3>



<p>Die Anweisungen, was gulp im Verzeichnis erledigen soll, werden in der Datei gulpfile.js festgehalten. Eine Beispieldatei für das Test-Projekt sieht so aus:</p>



<pre class="wp-block-code"><code lang="javascript" class="language-javascript line-numbers">var gulp        = require('gulp');
var browserSync = require('browser-sync').create();
var sass        = require('gulp-sass');

// SASS kompilieren, nach public/css verschieben und in browsersync aufnehmen
gulp.task('sass', function(){
    return gulp.src(['node_modules/bootstrap/scss/bootstrap.scss', 'public/scss/*.scss'])
        .pipe(sass())
        .pipe(gulp.dest('public/css'))
        .pipe(browserSync.stream());
});

//JS nach public/js verschieben
gulp.task('js', function(){
    return gulp.src([
        'node_modules/bootstrap/dist/js/bootstrap.min.js', 
        'node_modules/jquery/dist/jquery.min.js', 
        'node_modules/popper.js/dist/umd/popper.min.js'])
        .pipe(gulp.dest('public/js'))
        .pipe(browserSync.stream());
});



//Fonts nach public/fonts schieben
gulp.task('fonts', function(){
    return gulp.src('node_modules/font-awesome/fonts/*')
        .pipe(gulp.dest('public/fonts'));
});

//fontawesome nach public/css verschieben
gulp.task('fa', ()=&gt;{
    return gulp.src('node_modules/font-awesome/css/font-awesome.min.css')
        .pipe(gulp.dest('public/css'))
        .pipe(browserSync.stream());
});

// SASS ueberwachen und bei Veraenderungen kompilieren
gulp.task('serve', gulp.series('sass', function() {
    browserSync.init({
	    proxy: 'http://localhost/',
	    notify: true,
    });

    gulp.watch(['node_modules/bootstrap/scss/bootstrap.scss', 'scss/*.scss'], gulp.series('sass'))
    gulp.watch('*.php').on('change', browserSync.reload);
}));


gulp.task('default', gulp.series('js', 'serve', 'fa', 'fonts'));%</code></pre>



<p>Ist diese Datei erstellt, reicht ein einfacher Aufruf von ./node_modules/.bin/gulp und der Vorgang startet. Jetzt werden die entsprechenden Scripts kopiert und ein aktiver FileWatcher überwacht SASS und kompiliert bei Veränderungen scss nach css. Zudem werden die Veränderungen an den definierten Dateien im www-Verzeichnis über einen lokalen Server (Port 3000) angezeigt (index.php oder index.html, je nach Projekt). Letzteres wird durch den gulp-task &#8222;server&#8220; organisiert und kann bei Bedarf oder Nutzung anderer Entwicklungsumgebungen deaktiviert werden (Docker- oder Vagrant-Umgebung?).</p>



<h2 class="wp-block-heading">Zusatz</h2>



<p>Natürlich kann gulp auch in komplett statischen Umgebungen eingesetzt werden. Generell müssen jeweils nur die Verzeichnisse an die eigene Projektstruktur angepasst werden.</p>



<p>Über die package.json-Datei kann jeweils kontrolliert werden, welche Versionen von Bootstrap, JQuery &amp; Co. geladen werden sollen und den Weg ins eigene Web-Projekt finden. Die so erstellten CSS- und JS-Dateien können dann wie gewohnt aus dem /js- und /css-Verzeichnis in die eigenen Web-Dateien (PHP-&gt;Views, oder HTML-Dateien-&gt;statisch) eingebunden werden.</p>



<p>Für das Deployment im Produktiv-Betrieb ist somit auch kein einzelnes Zusammensuchen der Bibliotheken notwendig und auch kein Überwachen der statisch eingebundenen CDN-Links im Projekt notwendig (kann man trotzdem parallel nutzen).</p><p>The post <a href="https://net73.de/css-und-javascript-mit-npm-und-gulp-organisieren/">CSS und JavaScript mit NPM und Gulp organisieren</a> first appeared on <a href="https://net73.de">NET73</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://net73.de/css-und-javascript-mit-npm-und-gulp-organisieren/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
