<?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 Archivi - RD Tech</title>
	<atom:link href="https://www.rdtech.it/category/education/nodejs/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.rdtech.it/category/education/nodejs/</link>
	<description>Ricerca e Sviluppo messi a disposizione delle Imprese Italiane</description>
	<lastBuildDate>Wed, 09 Apr 2025 13:09:12 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Le novità di Angular 17</title>
		<link>https://www.rdtech.it/novita-angular-17/</link>
					<comments>https://www.rdtech.it/novita-angular-17/#respond</comments>
		
		<dc:creator><![CDATA[Matteo Veraldi]]></dc:creator>
		<pubDate>Mon, 13 Nov 2023 16:39:11 +0000</pubDate>
				<category><![CDATA[Angular]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[Novità]]></category>
		<category><![CDATA[Senza categoria]]></category>
		<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">https://www.rdtech.it/?p=1912</guid>

					<description><![CDATA[<p>Angular si è rinnovato con un sito completamente nuovo ed un insieme di funzionalità che danno una ventata d&#8217;aria fresca al framework, sia dal punto di vista di Developer Experience che di User Experience. In questo articolo vedremo alcuni tra i principali cambiamenti. Angular Signals Signals è un sistema che permette ad Angular di gestire uno stato applicativo in maniera granulare.&#160; Questo sistema reattivo di gestione dello stato permette al change detector di ottimizzare la re-renderizzazione dei componenti coinvolti, permettendo allo sviluppatore di massimizzare le performances dei componenti che sviluppa. Un signal è un wrapper che rende &#8220;osservabile&#8221;&#160;un attributo di…</p>
<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/novita-angular-17/">Le novità di Angular 17</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1912" class="elementor elementor-1912">
									<main class="elementor-section elementor-top-section elementor-element elementor-element-cedf3fc ct-section-stretched elementor-section-full_width elementor-section-height-default elementor-section-height-default" data-id="cedf3fc" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-93e4dd4" data-id="93e4dd4" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-8c175f3 elementor-widget elementor-widget-text-editor" data-id="8c175f3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style>				<p>Angular si è rinnovato con <a href="https://angular.dev/">un sito completamente nuovo</a> ed un insieme di funzionalità che danno una ventata d&#8217;aria fresca al framework, sia dal punto di vista di Developer Experience che di User Experience.</p><p>In questo articolo vedremo alcuni tra i principali cambiamenti.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-de597b6 elementor-widget elementor-widget-heading" data-id="de597b6" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}</style><h2 class="elementor-heading-title elementor-size-default">Angular Signals</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-3c6b36a elementor-widget elementor-widget-text-editor" data-id="3c6b36a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Signals è un sistema che permette ad Angular di gestire uno stato applicativo in maniera granulare. <br />Questo sistema reattivo di gestione dello stato permette al change detector di ottimizzare la re-renderizzazione dei componenti coinvolti, permettendo allo sviluppatore di massimizzare le performances dei componenti che sviluppa.</p><p>Un signal è un wrapper che rende <a href="https://www.google.it/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjVzuvRisGCAxUNhP0HHTz8BpMQFnoECBIQAw&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FObserver_pattern%23%3A~%3Atext%3DThe%2520observer%2520design%2520pattern%2520is%2C%252C%2520change%252C%2520test%2520and%2520reuse.&amp;usg=AOvVaw0CPdsmiZCtU8Ieqf7LxIQn&amp;opi=89978449">&#8220;osservabile&#8221;</a> un attributo di classe.</p><p><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);">L&#8217;API di Signals rende il </span><a style="font-size: inherit; text-align: inherit; font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);" href="https://en.wikipedia.org/wiki/Reactive_programming">paradigma di programmazione reattiva</a><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);"> più semplice da applicare grazie alla sua API minimale:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-1ea20a6 elementor-widget elementor-widget-code-highlight" data-id="1ea20a6" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-typescript line-numbers">
				<code readonly="true" class="language-typescript">
					<xmp>@Component({
  selector: 'my-app',
  standalone: true,
  template: `
    {{ fullName() }} <button (click)="setName('John')">Click</button>
  `,
})
export class App {
  firstName = signal('Jane');
  lastName = signal('Doe');
  fullName = computed(() => `${this.firstName()} ${this.lastName()}`);

  constructor() {
    effect(() => console.log('Name changed:', this.fullName()));
  }

  setName(newName: string) {
    this.firstName.set(newName);
  }
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-dfdb743 elementor-widget elementor-widget-text-editor" data-id="dfdb743" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per creare un Signal, è sufficiente dichiarare un attributo di classe assegnandogli un valore iniziale &#8220;wrappato&#8221; dalla funzione <code>signal</code> .</p><p>Per leggere il valore corrente di un Signal si invoca l&#8217;attributo di classe come funzione.</p><p>Per modificare il valore di un Signal bisogna passare il nuovo valore coma argomento del metodo <code>set</code> . Il Change Detector di Angular verrà così segnalato e provvederà a notificare tutti gli osservatori, nel nostro caso l&#8217;aggiornamento del template e dell&#8217;attributo <code>computed</code>.</p><p>Per &#8220;reagire&#8221; ai cambiamenti di valore di un Signal, si usa <code>effect</code>, una funzione che accetta una callback come argomento, e la invoca ad ogni cambiamento di stato.</p><p>Un Signal può essere di diversa natura: read-only, scrivibile, composto ecc. Grazie a dei metodi di utilità, un Signal è compatibile con gli Observables della libreria <code>rxjs</code> . Per approfondimenti lasciamo il <a href="https://angular.dev/guide/signals">link alla documentazione dedicata</a> e al nostro <a href="https://www.rdtech.it/contatti/">form di contatto.</a></p><p> </p>						</div>
				</div>
				<div class="elementor-element elementor-element-e6088c1 elementor-widget elementor-widget-spacer" data-id="e6088c1" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-column .elementor-spacer-inner{height:var(--spacer-size)}.e-con{--container-widget-width:100%}.e-con-inner>.elementor-widget-spacer,.e-con>.elementor-widget-spacer{width:var(--container-widget-width,var(--spacer-size));--align-self:var(--container-widget-align-self,initial);--flex-shrink:0}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container,.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer,.e-con>.elementor-widget-spacer>.elementor-widget-container,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer{height:100%}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner{height:var(--container-widget-height,var(--spacer-size))}</style>		<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-94684ba elementor-widget elementor-widget-heading" data-id="94684ba" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Control flow (Developer Preview)</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-16d289b elementor-widget elementor-widget-text-editor" data-id="16d289b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>I template Angular supportano il &#8220;control flow&#8221; come alternativa alle direttive <code>ngIf</code>, <code>ngFor.</code></p><p>Un esempio:</p>						</div>
				</div>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-d6d16c6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="d6d16c6" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-d9da2e7" data-id="d9da2e7" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-5866475 elementor-widget elementor-widget-heading" data-id="5866475" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Control flow</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-1e76ecb elementor-widget elementor-widget-code-highlight" data-id="1e76ecb" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h2>Todos</h2>
    <input #text />
    <button (click)="add(text.value)">Add</button>

    @for (todo of todos; track $index) {
    <p>
      <input type="checkbox" (change)="toggle($index)" />
      @if (todo.done) {
      <s>{{ todo.text }}</s>
      } @else {
      <span>{{ todo.text }}</span>
      }
    </p>
    } @empty {
    <p>No todos</p>
    }
  `,
})
export class TodosComponent {
  todos: Array<{done: boolean; text: string}> = [];

  add(text: string) {
    this.todos.push({text, done: false});
  }

  toggle(index: number) {
    this.todos[index].done = !this.todos[index].done;
  }
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-a5f4db5" data-id="a5f4db5" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-d514fd2 elementor-widget elementor-widget-heading" data-id="d514fd2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Common Module</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-d078fbd elementor-widget elementor-widget-code-highlight" data-id="d078fbd" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule],
  template: `
    <h2>Todos</h2>
    <input #text />
    <button (click)="add(text.value)">Add</button>
    <div *ngIf="todos.length; else empty"></div>
    <p *ngFor="let todo of todos; let index = index">
      <input type="checkbox" (change)="toggle(index)" />
      <s *ngIf="todo.done; else pending">{{ todo.text }}</s>
      <ng-template #pending>
        <span>{{ todo.text }}</span>
      </ng-template>
    </p>
    <ng-template #empty>
      <p>No todos</p>
    </ng-template>
  `,
})
export class TodosComponent {
  todos: Array<{ done: boolean; text: string }> = [];

  add(text: string) {
    this.todos.push({ text, done: false });
  }

  toggle(index: number) {
    this.todos[index].done = !this.todos[index].done;
  }
}
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
		</div>
							</div>
		</section>
				<div class="elementor-element elementor-element-1ff106e elementor-widget elementor-widget-spacer" data-id="1ff106e" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-4715064 elementor-widget elementor-widget-heading" data-id="4715064" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Hydration SSR</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-ef107ea elementor-widget elementor-widget-text-editor" data-id="ef107ea" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Angular è cambiato anche nella gestione dello stato in Server Side Rendering: dopo che il client riceve l&#8217;FCP e il bundle js, non viene renderizzata nuovamente l&#8217;intera pagina ma soltanto alcuni nodi specifici. Questo permette di:</p><ul><li>Non avere artefatti visivi dopo il <a href="https://web.dev/articles/fcp?hl=it">first contentful paint.</a></li><li>Ottenere migliori prestazioni Web Core Vitals</li><li>User Experience più fluida</li></ul><div>In aggiunta a tutti i benefici che il Server Side Rendering offre già.</div>						</div>
				</div>
				<div class="elementor-element elementor-element-998a5c1 elementor-widget elementor-widget-spacer" data-id="998a5c1" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-a57436a elementor-widget elementor-widget-heading" data-id="a57436a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Deferrable views</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-f2c0f4b elementor-widget elementor-widget-text-editor" data-id="f2c0f4b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Analizziamo il caso in cui si utilizza Angular in Server Side Rendering: bisogna essere consapevoli di cosa si renderizza lato server, e cosa si renderizza lato client.</p><p>Questo comportamento si può gestire in diversi modi, ad esempio dichiarando una variabile di stato booleana inizializzata a <code>false</code> che diventa <code>true</code> dopo il ciclo di vita di <code>mount</code> (gestito quindi lato client). Questo stato usato come binding in un <code>ngIf</code> vincola una porzione di template ad essere gestita solo dal client e non dal server.</p><p>In Angular 17 nulla di ciò è più necessario. E&#8217; sufficiente usare il blocco <code>@defer</code> direttamente sul template e un attributo di utilità <code>isBrowser</code> nel Component. Angular gestirà il flusso di stato</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c15fa4b elementor-widget elementor-widget-code-highlight" data-id="c15fa4b" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-typescript line-numbers">
				<code readonly="true" class="language-typescript">
					<xmp>@Component(
    selector: "my-app",
    template: `
    @defer(when isBrowser) {
        <p>Hi, I am the client.</p>
    }
    <p>Hi, I am the server.</p>
    `
)
export class AppComponent {
  isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-5153409 elementor-widget elementor-widget-text-editor" data-id="5153409" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Un altro caso d&#8217;uso importante è quello in cui il browser deve renderizzare un componente che per qualche motivo impiega molto a comparire sulla pagina.</p><p>Una buona User Experience si basa anche su quanto velocemente una pagina risponde ad un input utente. Un caso standard di &#8220;loading spinner&#8221; si potrebbe descrivere in questo modo:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-45d66be elementor-widget elementor-widget-code-highlight" data-id="45d66be" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>@defer {
  <large-component />
} @loading (after 100ms; minimum 1s) {
  <img decoding="async" alt="loading..." src="loading.gif" />
}
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-eef612f elementor-widget elementor-widget-spacer" data-id="eef612f" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-9d07d06 elementor-widget elementor-widget-heading" data-id="9d07d06" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Migrazioni per la standalone API</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-eb79fdc elementor-widget elementor-widget-text-editor" data-id="eb79fdc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per supportare gli sviluppatori nella migrazione da <code>NgModules</code> a standalone api, il team di Angular ha creato un tool che permette di automatizzare il processo. Il requisito è di avere installato almeno la versione 15.2.0, la build deve essere pulita senza errori di compilazione ed il branch sul tuo vcs deve essere pulito.</p><p>Per lanciare l&#8217;automatismo basta scrivere questo comando su terminale dalla root del progetto:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d4c2f65 elementor-widget elementor-widget-code-highlight" data-id="d4c2f65" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>ng generate @angular/core:standalone</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-10485fe elementor-widget elementor-widget-text-editor" data-id="10485fe" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per i nuovi progetti basta usare il flag <code>--standalone</code> dopo <code>ng new</code>,</p>						</div>
				</div>
				<div class="elementor-element elementor-element-71fa5fc elementor-widget elementor-widget-spacer" data-id="71fa5fc" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-88c3493 elementor-widget elementor-widget-heading" data-id="88c3493" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Esbuild e Vite (Developer Preview)</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-a957d06 elementor-widget elementor-widget-text-editor" data-id="a957d06" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><code>ng serve</code> ora supporta<code>esbuild</code> per generare le build di produzione e di sviluppo e di produzione, e <code>vite</code> per il server di sviluppo. Questo significa che le performances di build in fase di sviluppo saranno sensibilmente più veloci. E&#8217; una funzionalità opt-in essendo ancora in &#8220;developer preview&#8221;, per attivarla bisogna modificare <code>angular.json</code> come segue:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0c62cb2 elementor-widget elementor-widget-code-highlight" data-id="0c62cb2" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-json line-numbers">
				<code readonly="true" class="language-json">
					<xmp>...
"architect": {
  "build": {                     /* Add the esbuild suffix  */
    "builder": "@angular-devkit/build-angular:browser-esbuild",
...</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-b078757 elementor-widget elementor-widget-spacer" data-id="b078757" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-f5eb5e6 elementor-widget elementor-widget-heading" data-id="f5eb5e6" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Jest come test runner (Developer Preview)<br></h2>		</div>
				</div>
				<div class="elementor-element elementor-element-d0df76a elementor-widget elementor-widget-text-editor" data-id="d0df76a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><code>Jest</code> è uno dei framework di testing più diffusi e amati nell&#8217;ecosistema JavaScript. Da questa versione di angular in poi è possibile usarlo:</p><p><code>npm install --save-dev jest</code></p>						</div>
				</div>
				<div class="elementor-element elementor-element-a08e12d elementor-widget elementor-widget-code-highlight" data-id="a08e12d" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-json line-numbers">
				<code readonly="true" class="language-json">
					<xmp>{
  "projects": {
    "my-app": {
      "architect": {
        "test": {
          "builder": "@angular-devkit/build-angular:jest",
          "options": {
            "tsConfig": "tsconfig.spec.json",
            "polyfills": ["zone.js", "zone.js/testing"]
          }
        }
      }
    }
  }
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-e9fe08f elementor-widget elementor-widget-spacer" data-id="e9fe08f" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-dba34a1 elementor-widget elementor-widget-heading" data-id="dba34a1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Conclusioni</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-548f6b1 elementor-widget elementor-widget-text-editor" data-id="548f6b1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Con queste novità il team di Google dimostra non solo di ascoltare le richieste degli sviluppatori (vedi Jest, Esbuild + Vite) e un&#8217;attenzione particolare alla Developer Experience (vedi Control Flow, @defer), ma dimostra soprattutto che Angular è un Framework che tiene stretto il proprio posto nel mercato dell&#8217;industria Web e lo terrà ancora per lungo tempo.</p><p>Personalmente ho molto apprezzato l&#8217;introduzione dei <code>Signal</code> ed il lavoro fatto per semplificare e migliorare il <code>Server Side Rendering</code>. </p><p>Il nuovo sito di Angular <a href="https://github.com/angular/angular/tree/main/adev">sarà completamente open-source e disponibile su GitHub</a>, non vediamo l&#8217;ora di poterlo studiare e condividere le nostre scoperte con voi.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9179035 elementor-widget elementor-widget-heading" data-id="9179035" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Vuoi approfondire uno di questi argomenti?</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-d1890af elementor-widget elementor-widget-text-editor" data-id="d1890af" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Contattaci tramite <a href="https://angular.dev/">il form su questo sito web</a> o <a href="https://tr.ee/aTQIIRlpWV">tramite i nostri canali social</a>!</p>						</div>
				</div>
				<div class="elementor-element elementor-element-ecd13b7 elementor-widget elementor-widget-text-editor" data-id="ecd13b7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
													</div>
				</div>
				<div class="elementor-element elementor-element-8467b12 elementor-widget elementor-widget-text-editor" data-id="8467b12" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
													</div>
				</div>
					</div>
		</div>
							</div>
		</main>
							</div>
		<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/novita-angular-17/">Le novità di Angular 17</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.rdtech.it/novita-angular-17/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Alla scoperta di Bun: l’ecosistema JavaScript veloce, moderno e innovativo</title>
		<link>https://www.rdtech.it/scopri-bun/</link>
					<comments>https://www.rdtech.it/scopri-bun/#respond</comments>
		
		<dc:creator><![CDATA[Matteo Veraldi]]></dc:creator>
		<pubDate>Wed, 20 Sep 2023 13:29:53 +0000</pubDate>
				<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[Novità]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[bun]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[informatica]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[novità]]></category>
		<guid isPermaLink="false">https://www.rdtech.it/?p=1762</guid>

					<description><![CDATA[<p>Introduzione In questi ultimi 14 anni, gli strumenti richiesti per sviluppare in NodeJS sono diventati sempre più lenti e complessi (vedi: webpack, babel, lerna, ecc…).&#160; Bun è un toolkit all-in-one gratuito e open source che mira a risolvere questo problema: permette di gestire, eseguire, costruire, testare e debuggare singoli file o complesse applicazioni full-stack scritte in JavaScript e TypeScript in maniera semplice. E’ stato sviluppato da “Oven”, un&#8217;azienda di sviluppo software con sede a San Francisco fondata con l’unico obiettivo di trasformare lo sviluppo in JavaScript rendendolo veloce e performante. Dalla versione 1.0 diventa ufficialmente adatto ad essere utilizzato in…</p>
<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/scopri-bun/">Alla scoperta di Bun: l’ecosistema JavaScript veloce, moderno e innovativo</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1762" class="elementor elementor-1762">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-5a62b9d elementor-section-full_width elementor-section-height-default elementor-section-height-default" data-id="5a62b9d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-no">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-459185b" data-id="459185b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-57100dc elementor-widget elementor-widget-heading" data-id="57100dc" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Introduzione</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-44cbc80 elementor-widget elementor-widget-text-editor" data-id="44cbc80" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">In questi ultimi 14 anni, gli strumenti richiesti per sviluppare in <a href="https://www.rdtech.it/cambiare-versione-di-nodejs/">NodeJS</a> sono diventati sempre più lenti e complessi (vedi: webpack, babel, lerna, ecc…). </span></p><p><span style="font-weight: 400;">Bun è un toolkit all-in-one gratuito e open source che mira a risolvere questo problema: permette di gestire, eseguire, costruire, testare e debuggare singoli file o complesse applicazioni full-stack scritte in JavaScript e TypeScript in maniera semplice.</span></p><p><span style="font-weight: 400;">E’ stato sviluppato da “Oven”, un&#8217;azienda di sviluppo software con sede a San Francisco fondata con l’unico obiettivo di trasformare lo sviluppo in JavaScript rendendolo veloce e performante.</span></p><p><span style="font-weight: 400;">Dalla versione 1.0 </span><span style="font-weight: 400;">diventa ufficialmente adatto ad essere utilizzato in produzione</span><span style="font-weight: 400;">.</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-d5e6281 elementor-widget elementor-widget-heading" data-id="d5e6281" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Ne avevamo davvero bisogno?
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-6ad2e5c elementor-widget elementor-widget-text-editor" data-id="6ad2e5c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Dalla prima versione di Node JS, diversi strumenti sono stati sviluppati ed interconnessi tra loro per dare luce ai frameworks e alle librerie popolari che utilizziamo ogni giorno.</span></p><p><span style="font-weight: 400;">Ogni strumento aggiunto porta con sé un contributo di complessità</span><span style="font-weight: 400;"> in termini di configurazioni e performances, e viene accumulato con tutti gli altri strumenti già presenti e configurati all’interno del progetto.</span></p><p><span style="font-weight: 400;">Ad esempio, per sviluppare una “semplice” libreria di componenti <a href="https://react.dev/">React</a> in TypeScript con NodeJS devi ALMENO introdurre e configurare:</span></p><ul><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Il package.json</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un gestore di pacchetti</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Una runtime JavaScript</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un traspilatore per convertire TypeScript a JavaScript moderno </span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un traspilatore per convertire JavaScript Moderno a CommonJS</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un test runner e una libreria per far girare i test automatici</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un bundler per creare l’entry point delle applicazioni di esempio</span></li></ul><p><span style="font-weight: 400;">Per sviluppare una semplice libreria di componenti React in TypeScript con Bun devi solo configurare il package.json.</span></p><p><span style="font-weight: 400;">Non potrebbe essere più semplice di così!</span></p><p><span style="font-weight: 400;">Maggiore è la complessità della libreria o dell’applicazione, maggiore è la probabilità che verranno utilizzati strumenti aggiuntivi o che ci sia la necessità di ritoccare quelli già presenti.</span></p><p><span style="font-weight: 400;">L’obiettivo di Bun in questi termini è semplice: </span><span style="font-weight: 400;">ridurre al minimo la complessità e massimizzare la performances dei progetti JavaScript moderni</span><span style="font-weight: 400;">. Le librerie e i frameworks che funzionano con Node JS dovrebbero continuare a funzionare con Bun come al solito, senza che lo sviluppatore debba imparare o configurare nulla di nuovo.</span></p><p><span style="font-weight: 400;">Nonostante non servano tutti gli strumenti esterni utilizzati nei progetti NodeJS, Bun non è un collo di bottiglia per lo sviluppo! è stato sviluppato in maniera da essere </span><span style="font-weight: 400;">altamente personalizzabile</span><span style="font-weight: 400;"> per soddisfare la maggior parte dei requisiti progettuali.</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-4314944 elementor-widget elementor-widget-heading" data-id="4314944" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Velocità – Bun vs NodeJS</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-0bea7e3 elementor-widget elementor-widget-text-editor" data-id="0bea7e3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Ecco qualche dato di comparazione tra Bun e NodeJS:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-5354444 elementor-widget elementor-widget-heading" data-id="5354444" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come package manager</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-5eee8b6 elementor-widget elementor-widget-text-editor" data-id="5eee8b6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">usare “bun” al posto di “npm” per l’installazione dei pacchetti aumenta le performances di </span><b>29 volte.</b></p>						</div>
				</div>
				<div class="elementor-element elementor-element-aef5e9e elementor-widget elementor-widget-image" data-id="aef5e9e" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=".svg"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}</style>												<img fetchpriority="high" decoding="async" width="1024" height="506" src="https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-1024x506.png" class="attachment-large size-large wp-image-1769" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-1024x506.png 1024w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-300x148.png 300w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-768x380.png 768w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-1536x759.png 1536w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" />															</div>
				</div>
				<div class="elementor-element elementor-element-ea21a32 elementor-widget elementor-widget-heading" data-id="ea21a32" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come bundler</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-783a94f elementor-widget elementor-widget-text-editor" data-id="783a94f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">usare “bun” al posto di webpack per il bundling del codice aumenta la velocità di costruzione degli artefatti di </span><b>224 volte</b><span style="font-weight: 400;">.</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-1492b38 elementor-widget elementor-widget-image" data-id="1492b38" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="1024" height="408" src="https://www.rdtech.it/wp-content/uploads/2023/09/bundler-1024x408.png" class="attachment-large size-large wp-image-1768" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/bundler-1024x408.png 1024w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler-300x120.png 300w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler-768x306.png 768w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler-1536x612.png 1536w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" />															</div>
				</div>
				<div class="elementor-element elementor-element-31b42d7 elementor-widget elementor-widget-heading" data-id="31b42d7" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come transpiler</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-fe66386 elementor-widget elementor-widget-text-editor" data-id="fe66386" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">La conversione di TypeScript in JavaScript con bun al posto di tsc aumenta la velocità di di </span><b>44 volte</b><span style="font-weight: 400;">:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-7e2dee2 elementor-widget elementor-widget-image" data-id="7e2dee2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="1024" height="442" src="https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-1024x442.png" class="attachment-large size-large wp-image-1770" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-1024x442.png 1024w, https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-300x130.png 300w, https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-768x332.png 768w, https://www.rdtech.it/wp-content/uploads/2023/09/transpiler.png 1394w" sizes="(max-width: 1024px) 100vw, 1024px" />															</div>
				</div>
				<div class="elementor-element elementor-element-23c2b45 elementor-widget elementor-widget-heading" data-id="23c2b45" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come runtime</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-8ae9842 elementor-widget elementor-widget-text-editor" data-id="8ae9842" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Un WebSocket in Bun è più veloce rispetto ad un Web Socket in Node JS di </span><b>6 volte</b><span style="font-weight: 400;">:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-5b8bacf elementor-widget elementor-widget-image" data-id="5b8bacf" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="475" height="386" src="https://www.rdtech.it/wp-content/uploads/2023/09/websocker.png" class="attachment-large size-large wp-image-1771" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/websocker.png 475w, https://www.rdtech.it/wp-content/uploads/2023/09/websocker-300x244.png 300w" sizes="auto, (max-width: 475px) 100vw, 475px" />															</div>
				</div>
				<div class="elementor-element elementor-element-57c2b75 elementor-widget elementor-widget-heading" data-id="57c2b75" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Conclusioni</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-4713ded elementor-widget elementor-widget-text-editor" data-id="4713ded" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Al momento della scrittura di questo articolo Bun è stato dichiarato stabile e production-ready da pochi giorni; La community è molto attiva e non ci sono progetti molto grossi che lo utilizzano.</span></p><p><span style="font-weight: 400;">E’ una novità imperdibile per tutti gli sviluppatori Backend o Frontend che usano Node JS, e vale la pena attendere ancora un po di tempo prima di cominciare a introdurlo nei prossimi progetti di ricerca e sviluppo.</span></p><p><span style="font-weight: 400;">Se vuoi saperne di più, consulta il <a href="https://bun.sh/">sito ufficiale di Bun</a> o <a href="https://www.rdtech.it/contatti/">contattaci tramite il form!</a></span></p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/scopri-bun/">Alla scoperta di Bun: l’ecosistema JavaScript veloce, moderno e innovativo</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.rdtech.it/scopri-bun/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Come cambiare versione di NodeJS con un solo comando!</title>
		<link>https://www.rdtech.it/cambiare-versione-di-nodejs/</link>
					<comments>https://www.rdtech.it/cambiare-versione-di-nodejs/#respond</comments>
		
		<dc:creator><![CDATA[Matteo Veraldi]]></dc:creator>
		<pubDate>Mon, 31 Jul 2023 10:35:55 +0000</pubDate>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[downgrade]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[nvm]]></category>
		<category><![CDATA[upgrade]]></category>
		<guid isPermaLink="false">https://www.rdtech.it/?p=1662</guid>

					<description><![CDATA[<p>TLDR; Utilizzando il CLI NVM (Node Version Manager), puoi installare nuove versioni di NodeJS con questo comando: nvm install v18.12.0 # versione opzionale se c'è un file .nvmrc Per attivare una delle versioni di NodeJS che hai installato: nvm use v18.12.0 # versione opzionale se c'è un file .nvmrc Per impostare una versione di default: nvm alias default v18.12.0 Introduzione Cambiare versione di NodeJS è una pratica molto comune nello sviluppo di applicazioni front-end e/o back-end. I motivi di solito sono questi tre: Hai bisogno di aggiornare il progetto a cui stai lavorando; Stai per lavorare su un altro progetto…</p>
<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/cambiare-versione-di-nodejs/">Come cambiare versione di NodeJS con un solo comando!</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1662" class="elementor elementor-1662">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-162fade elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="162fade" data-element_type="section">
						<div class="elementor-container elementor-column-gap-no">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-745f435" data-id="745f435" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-ae51356 elementor-widget elementor-widget-menu-anchor" data-id="ae51356" data-element_type="widget" data-widget_type="menu-anchor.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}</style>		<div id="tldr" class="elementor-menu-anchor"></div>
				</div>
				</div>
				<div class="elementor-element elementor-element-b245149 elementor-widget elementor-widget-heading" data-id="b245149" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">TLDR;</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-58effc3 elementor-widget elementor-widget-text-editor" data-id="58effc3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Utilizzando il CLI NVM (Node Version Manager), puoi installare nuove versioni di NodeJS con questo comando:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-cee4056 elementor-widget elementor-widget-code-highlight" data-id="cee4056" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-bash ">
				<code readonly="true" class="language-bash">
					<xmp>nvm install v18.12.0 # versione opzionale se c'è un file .nvmrc</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-bb0a785 elementor-widget elementor-widget-text-editor" data-id="bb0a785" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per attivare una delle versioni di NodeJS che hai installato:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-3feb8fd elementor-widget elementor-widget-code-highlight" data-id="3feb8fd" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-bash ">
				<code readonly="true" class="language-bash">
					<xmp>nvm use v18.12.0 # versione opzionale se c'è un file .nvmrc</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-246357d elementor-widget elementor-widget-text-editor" data-id="246357d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per impostare una versione di default:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9c851c5 elementor-widget elementor-widget-code-highlight" data-id="9c851c5" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-bash ">
				<code readonly="true" class="language-bash">
					<xmp>nvm alias default v18.12.0</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-272c8f1 elementor-widget elementor-widget-spacer" data-id="272c8f1" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-7f8db83 elementor-widget elementor-widget-heading" data-id="7f8db83" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Introduzione</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-3125abc elementor-widget elementor-widget-text-editor" data-id="3125abc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);">Cambiare versione di NodeJS è una pratica molto comune nello sviluppo di applicazioni front-end e/o back-end.</span></p><p><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);">I motivi di solito sono questi tre:</span></p><ol><li>Hai bisogno di aggiornare il progetto a cui stai lavorando;</li><li>Stai per lavorare su un altro progetto che usa una versione di NodeJS diversa da quella installata;</li><li>Lavori in più progetti NodeJS, alcuni dei quali funzionano solo usando versioni specifiche.</li></ol><div>Per non impazzire con le cartelle e le variabili d&#8217;ambiente, è quindi necessario avere <b>un sistema per aggiornare e cambiare versione di NodeJS il più velocemente possibile</b>. Questo sistema è un tool CLI (Command Line Interface) chiamato Node Version Manager (N.V.M., tr. Gestore di versioni Node). </div>						</div>
				</div>
				<div class="elementor-element elementor-element-cd8ce6b elementor-widget elementor-widget-heading" data-id="cd8ce6b" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Installazione</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-321eb8e elementor-widget elementor-widget-text-editor" data-id="321eb8e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per cambiare versione di NodeJS bisogna per prima cosa assicurarsi di avere NVM installato nel sistema. Puoi farlo digitando questo comando dal Terminale (o dalla PowerShell per Windows):</p>						</div>
				</div>
				<div class="elementor-element elementor-element-bde4cf0 elementor-widget elementor-widget-code-highlight" data-id="bde4cf0" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-bash ">
				<code readonly="true" class="language-bash">
					<xmp>nvm --version</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-1574e18 elementor-widget elementor-widget-text-editor" data-id="1574e18" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Se il comando ritorna un errore, NVM non è installato, altrimenti puoi passare direttamente a SEZIONE_A_CUI_PASSARE</p>						</div>
				</div>
				<div class="elementor-element elementor-element-8e40588 elementor-widget elementor-widget-menu-anchor" data-id="8e40588" data-element_type="widget" data-widget_type="menu-anchor.default">
				<div class="elementor-widget-container">
					<div id="macos-linux" class="elementor-menu-anchor"></div>
				</div>
				</div>
				<div class="elementor-element elementor-element-db44199 elementor-widget elementor-widget-heading" data-id="db44199" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-large">Mac OS o Linux</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-6e8b7f6 elementor-widget elementor-widget-text-editor" data-id="6e8b7f6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Apri un Terminale e digita questo comando:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-34f712c elementor-widget elementor-widget-code-highlight" data-id="34f712c" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-bash ">
				<code readonly="true" class="language-bash">
					<xmp>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/[versione]/install.sh | bash</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-864260d elementor-widget elementor-widget-text-editor" data-id="864260d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>O se usi wget</p>						</div>
				</div>
				<div class="elementor-element elementor-element-3839a92 elementor-widget elementor-widget-code-highlight" data-id="3839a92" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-bash ">
				<code readonly="true" class="language-bash">
					<xmp>wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/[versione]/install.sh | bash</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-1fb9502 elementor-widget elementor-widget-text-editor" data-id="1fb9502" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>La versione da inserire al posto della scritta [versione] idealmente è la prima che trovi <a href="https://github.com/nvm-sh/nvm/releases">visitando la pagina dei rilasci</a>.<br />Nel mio caso è v0.39.3 .</p>						</div>
				</div>
				<div class="elementor-element elementor-element-8deb1e8 elementor-widget elementor-widget-heading" data-id="8deb1e8" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-large">Windows</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-d816cb4 elementor-widget elementor-widget-text-editor" data-id="d816cb4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Il metodo ufficiale e raccomandato per installare NVM e usarlo su Windows è tramite uno di questi tools: <span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);">WSL,  GitBash, MSYS o Cygwin. <br />Sono tutti strumenti basati su una virtualizzazione di Linux, quindi per installare NVM mediante questi tools basta seguire la sezione <a href="#macos-linux">MacOS e Linux</a>.</span></p><p>Se vuoi usare la PowerShell del sistema Windows nativo (caldamente sconsigliato), tra le opzioni disponibili c&#8217;è nvm-windows.</p><ol><li><a style="font-size: inherit; text-align: inherit; font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);" href="https://github.com/coreybutler/nvm-windows/releases">Visita la pagina dei rilasci</a><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);"> sul repository ufficiale del CLI.</span></li><li>Nel riquadro della prima versione che ti appare una volta dentro, dovresti trovare una sezione molto simile a questa<img loading="lazy" decoding="async" class="aligncenter wp-image-1678 size-medium" src="https://www.rdtech.it/wp-content/uploads/2023/07/Screenshot-2023-07-25-014256-300x190.png" alt="Assets da scaricare per nvm-windows" width="300" height="190" srcset="https://www.rdtech.it/wp-content/uploads/2023/07/Screenshot-2023-07-25-014256-300x190.png 300w, https://www.rdtech.it/wp-content/uploads/2023/07/Screenshot-2023-07-25-014256-1024x648.png 1024w, https://www.rdtech.it/wp-content/uploads/2023/07/Screenshot-2023-07-25-014256-768x486.png 768w, https://www.rdtech.it/wp-content/uploads/2023/07/Screenshot-2023-07-25-014256.png 1280w" sizes="auto, (max-width: 300px) 100vw, 300px" /></li><li> Scarica ed esegui l&#8217;installer (l&#8217;unico file che finisce per .exe)</li></ol><div>Verifica l&#8217;installazione aprendo una PowerShell e digitando il comando:</div>						</div>
				</div>
				<div class="elementor-element elementor-element-5cbe13f elementor-widget elementor-widget-code-highlight" data-id="5cbe13f" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript ">
				<code readonly="true" class="language-javascript">
					<xmp>nvm</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
		</div>
							</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-20226ce elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="20226ce" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3ed9df7" data-id="3ed9df7" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-1b38767 elementor-widget elementor-widget-spacer" data-id="1b38767" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-89085fe elementor-widget elementor-widget-heading" data-id="89085fe" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Conclusioni</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-048ec9d elementor-widget elementor-widget-text-editor" data-id="048ec9d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Hai correttamente installato un Gestore di Versioni NPM sul tuo PC, non ti resta che usare i comandi elencati in <a href="#tldr">TLDR;</a> per gestire le versioni di Node.</p><p>Bada bene che il cambio di NPM funziona per &#8220;sessione aperta&#8221;. Di base è attiva la versione definita come default.</p><p>L&#8217;installazione di NVM è personalizzabile tramite le variabili d&#8217;ambiente che vengono esposte (vedi la documentazione). <br />Se hai dubbi o hai bisogno di una consulenza, <a href="https://www.rdtech.it/contatti/">contattaci!</a></p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/cambiare-versione-di-nodejs/">Come cambiare versione di NodeJS con un solo comando!</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.rdtech.it/cambiare-versione-di-nodejs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
