window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Strumenti Javascript in azione - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2022-09-12
Sviluppo di software

Strumenti Javascript in azione

The Codest

Reda Salmi

Sviluppatore React

Scoprite alcuni strumenti di recupero JavaScript per migliorare la vostra programmazione. Scoprite di più su ESLint, Prettier e Husky!

È fantastico vedere dove Javascript è al giorno d'oggi e quanto si è evoluta da quandoES2015, i giorni di var e $(.submitBtn) sono molto lontani da noi. Mentre javascript continua a
in evoluzione, gli strumenti (formattatore, linter, bundler) che lo circondano continuano a migliorare, in questo articolo vedremo come ESLint (linter), Più bella (formattatore) e Husky (Git hooks) possono migliorare l'esperienza dello sviluppatore e avere un grande impatto sull'applicazione. Per il bene di questo articolo, utilizzeremo un React ma ricordate che questi strumenti possono essere utilizzati con qualsiasi applicazione Javascript/Node. Inizieremo con la generazione di un React progetto utilizzando vite con questi passaggi:

npm create vite@latest
Nome del progetto: js-tools
Selezionare un framework: react
Selezionare una variante: react
cd js-tools
npm installare

ESLint per la qualità del codice

ESLint è uno strumento che aiuta a trovare e risolvere i problemi dell'JavaScript codice. Per aggiungerlo al nostro
seguiremo questi passaggi:

cd js-tools
npm init @eslint/config
# dovremo rispondere a queste domande per inizializzare la configurazione
Come si desidera utilizzare ESLint? Per controllare la sintassi e trovare problemi
Che tipo di moduli utilizza il progetto? Moduli JavaScript (importazione/esportazione)
Quale framework utilizza il progetto? React
Il progetto utilizza l'TypeScript? No
Dove viene eseguito il codice? Browser
In che formato si desidera che il file di configurazione sia disponibile? Javascript
Volete installarli ora? Sì
Quale gestore di pacchetti si desidera utilizzare? npm
# installeremo i plugin aggiuntivi
npm i --save-dev eslint-plugin-react-hooks eslint-plugin-jsx-a11y

In questo modo si creerà un .eslintrc.cjs contenente il nostro file ESLint nella radice della nostra applicazione, facciamo
aggiorniamo il file di configurazione con i plugin installati e aggiungiamo un'opzione regola:

errore costante = 2;

module.exports = {
  env: {
    browser: true,
    es2021: true,
  },
  estende: [
    'eslint:recommended',
    'plugin:react/recommended',
    'plugin:react/jsx-runtime',
    'plugin:react-hooks/recommended',
    'plugin:jsx-a11y/recommended',
  ],
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
    },
    ecmaVersion: 'latest',
    sourceType: 'module',
  },
  plugin: ['react'],
  regole: {
    no-unused-vars': error,
  },
  impostazioni: {
    reagire: {
      version: 'detect',
    },
  },
  ignorePatterns: ['node_modules', '.eslintrc.cjs', 'dist'],
};

Stiamo utilizzando le impostazioni consigliate per ogni plugin e abbiamo fatto il senza vettori inutilizzati lanciare un errore, un ulteriore passo è quello di aggiungere un'opzione lanugine al nostro comando pacchetto.json come segue:

{
  ...,
    "script": {
        "dev": "vite",
        "build": "vite build",
        "preview": "vite preview",
        "lint": "eslint --ext js,jsx ."
    },
  ...
}

Ora che il nostro Configurazione di ESLint è pronto, aggiorneremo la nostra applicazione per eseguire alcuni test e vedere
come funziona. La prima cosa da fare è aggiornare il file App.jsx all'interno del file src Questo componente contiene un'immagine, un lettore video di base e un pulsante che attiva il lettore video.
stati di riproduzione/pausa quando si fa clic:

import { useEffect, useRef, useState } da 'react';

esportare la funzione predefinita () {
  const videoRef = useRef(null);
  const [isPlaying, setIsPlaying] = useState(false);
  const heading = 'Ciao ESLint + Prettier + Husky';

  useEffect(() => {
    if (!isPlaying) {
      videoRef.current.play();
    } else {
      videoRef.current.pause();
    }
  }, []);

  const togglePlay = () => setIsPlaying(!isPlaying);

  return (
    <div>
      <button type="button" onclick="{togglePlay}">
        {isPlaying ? 'Pause' : 'Play'}
      </button>

      <div>
        <video
          loop
 playsinline
 ref="{videoRef}"          src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
        />
      </div>

      <div>
        <img src="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg" />
      </div>
    </div>
  );
}

import { useEffect, useRef, useState } da 'react';

esportare la funzione predefinita () {
const videoRef = useRef(null);
const [isPlaying, setIsPlaying] = useState(false);
const heading = 'Ciao ESLint + Prettier + Husky';

useEffect(() =&gt; {
if (!isPlaying) {
videoRef.current.play();
} else {
videoRef.current.pause();
}
}, []);

const togglePlay = () =&gt; setIsPlaying(!isPlaying);

return (

<div>
    <video
      loop
 playsinline
 ref="{videoRef}"      src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
    />
  </div>

  <div>
    <img src="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg" />
  </div>
</div>
);
}

Proviamo a vedere cosa comporta l'esecuzione del lanugine Il comando riporta i dati relativi al nostro App.jsx codice:

Abbiamo 4 errori, grandi o meno grandi che dir si voglia, abbiamo appena colto diversi tipi di errori, alcuni legati a React, altri a11y e uno dovuto alla regola che abbiamo aggiunto per vietare le variabili inutilizzate. Il bello di ESLint è che cattura gli errori e ci dà un'indicazione sulla soluzione e tutte le regole sono ben documentate. Quindi, per correggere il nostro codice dovremo:

- Dare un nome al nostro componente

- Utilizzare la variabile `heading` o eliminarla se è inutile.

- Aggiungere un tag `track` per le didascalie nel lettore video

- Aggiungere un attributo `alt` con un testo significativo all'elemento immagine

Dopo aver applicato queste correzioni eseguendo il comando `lint`, non riceviamo errori, il nostro codice corretto è il seguente:

  import { useEffect, useRef, useState } da 'react';

Esportare la funzione predefinita App() {
const videoRef = useRef(null);
const [isPlaying, setIsPlaying] = useState(false);
const heading = 'Ciao ESLint + Prettier + Husky';

useEffect(() =&gt; {
if (!isPlaying) {
videoRef.current.play();
} else {
videoRef.current.pause();
}
}, [isPlaying]);

const togglePlay = () =&gt; setIsPlaying(!isPlaying);

return (

{heading}

<div>
    <video
      loop
 playsinline
 ref="{videoRef}"      src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
    >
      <track kind="captions" src="flower-en.vtt" srclang="en" />
    </video>
  </div>

  <div>
    <img
      alt="Fetta di pompelmo in cima a un mucchio di altre fette"
      src="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg"
    />
  </div>
</div>
);
}

È un po' fastidioso dover usare il tasto lanugine prima di ogni commit e ci si potrebbe dimenticare di farlo; l'impostazione di un git hook potrebbe essere utile per automatizzare questo compito e risolvere questo problema ed è di questo che parleremo nel corso di Husky sezione.

Più elegante per la formattazione del codice

Più bella è un formattatore di codice che supporta molti linguaggi e si integra con molti editor di codice. Aggiungiamo prettier alla nostra applicazione:

npm install --save-dev --save-exact prettier

Avremo bisogno di creare due file nella radice della nostra applicazione, un file di tipo .prettierignore per ignorare i file o le cartelle che non si desidera formattare:

node_modules/
dist/
pubblico/

E un .prettierrc.json che conterrà la nostra configurazione più bella:

{
"arrowParens": "sempre",
"bracketSameLine": false,
"bracketSpacing": true,
"endOfLine": "lf",
"embeddedLanguageFormatting": "auto",
"htmlWhitespaceSensitivity": "css",
"insertPragma": false,
"jsxSingleQuote": false,
"printWidth": 80,
"proseWrap": "always",
"quoteProps": "as-need",
"requirePragma": false,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "all",
"useTabs": true
}

La configurazione di prettier è personalizzabile, si può giocare con l'area di gioco di prettier per trovare le impostazioni più adatte alle proprie esigenze. Un passo aggiuntivo per far funzionare bene prettier con ESLint è installare un plugin ESLint aggiuntivo:

npm i --save-dev eslint-config-prettier

Sarà inoltre necessario aggiornare il file .eslintrc.cjs aggiungendo il file più bello alla si estende dobbiamo assicurarci di inserirlo nell'array ultimo per sovrascrivere altre configurazioni:

errore costante = 2;

module.exports = {
...,
estende: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:react/jsx-runtime',
'plugin:react-hooks/recommended',
'plugin:jsx-a11y/recommended',
'prettier',
],
...

L'esecuzione di prettier è semplice e diretta, un modo è quello di eseguire il metodo npx prettier --write . che formatterà tutto il codice dell'applicazione; un secondo modo è quello di usarlo dall'editor, in modo da ottenere il massimo da Prettier, tramite una scorciatoia da tastiera o automaticamente ogni volta che si salva un file. Quando durante la codifica una riga è diventata così lunga da non riuscire a stare sullo schermo, basta premere un tasto per vederla magicamente racchiusa in più righe! Oppure, quando incollate del codice e l'indentazione è tutta sbagliata, lasciate che Prettier la sistemi per voi senza lasciare il vostro editor.

Ma comunque, cosa succede se uno degli sviluppatori usa un editor che non supporta prettier e si dimentica di usare il parametro più bello c'è un modo per risolvere questo problema ed è l'argomento di questo articolo. Husky sezione sottostante.

Husky per i ganci Git

Husky aiuta a configurare gli hook di git per lincare i messaggi di commit, eseguire test, lincare il codice, ecc. quando si esegue il commit o il push. Lo useremo insieme a lint-staged per automatizzare il linting e la formattazione del codice prima del commit.

npx husky-init && npm install
npm i --save-dev lint-staged

In questo modo si creerà un .husky con una cartella pre-commit file. Il passo successivo è aggiornare il file pacchetto.json per impostare in scena e dirgli di formattare qualsiasi file modificato nel commit corrente:

{
...,
"script": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"lint": "eslint --ext js,jsx .",
"prepare": "husky install"
},
"lint-staged": {
"**/*.+(js|jsx|json|css)": "prettier --write --ignore-unknown"
},
...
}

L'ultimo passo consiste nell'aggiornare il file pre-commit per impostare il nostro hook per eseguire il file lanugine su tutte le applicazioni e formattare i file modificati con il comando in scena comando:

!/usr/bin/env sh

. "$(dirname -- "$0")/_/husky.sh"

npm eseguire lint
npx lint-staged
```

Facciamo un po' di refactoring alla nostra applicazione per vedere come funziona tutto questo: creeremo un componente VideoPlayer.jsx e lo useremo in App.jsx:

```javascript
import { useEffect, useRef } da 'react';

export default function VideoPlayer({ isPlaying, videoSrc, trackSrc }) {
const videoRef = useRef(null);

useEffect(() => {
if (!isPlaying) {
videoRef.current.play();
} else {
videoRef.current.pause();
}
}, [isPlaying]);

return (

);
}
importare { useState } da 'react';
importare VideoPlayer da './VideoPlayer';

esportare la funzione predefinita App() {
const [isPlaying, setIsPlaying] = useState(false);
const heading = 'Ciao ESLint + Prettier + Husky';

const togglePlay = () =&gt; setIsPlaying(!isPlaying);

return (
 
{heading}
 <div>
    <videoplayer
      isplaying="{isPlaying}"      tracksrc="flower-en.vtt"
      videosrc="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
    />
  </div>

  <div>
    <img
      alt="Fetta di pompelmo in cima a un mucchio di altre fette"
      src="https://interactive-examples.mdn.mozilla.net/media/cc0-images/grapefruit-slice-332-332.jpg"
    />
  </div>
</div>
);
}


Ora che siamo soddisfatti del nostro codice, facciamo il commit delle nostre modifiche e vediamo come va.

errore di commit del codice husky

Anche questa volta l'errore è dovuto alla mancanza della validazione dei props e come si può vedere il nostro commit non è andato a buon fine. Risolviamo questo problema, installando prima PropTypes npm i prop-type e l'aggiornamento del VideoPlayer componente:

importare { useEffect, useRef } da 'react';
import PropTypes da 'prop-types';

export default function VideoPlayer({ isPlaying, videoSrc, trackSrc }) {
const videoRef = useRef(null);

useEffect(() => {
if (!isPlaying) {
videoRef.current.play();
} else {
videoRef.current.pause();
}
}, [isPlaying]);

return (

);
}

VideoPlayer.propTypes = {
isPlaying: PropTypes.bool.isRequired,
videoSrc: PropTypes.string.isRequired,
trackSrc: PropTypes.string.isRequired,
};

Dopo aver corretto questi errori, il nostro commit è andato a buon fine dopo aver eseguito i comandi di linting e formattazione del codice. Come si può vedere, con Husky abbiamo automatizzato il linting e la formattazione con questo hook pre-commit, che evita la presenza di codice indesiderato nella nostra base di codice e risolve problemi come l'incompatibilità degli editor e la dimenticanza dell'esecuzione di questi comandi.

commit del codice riuscito

Sintesi

ESLint, Più bella e Husky sono ottimi strumenti che ci aiutano a mantenere il nostro codice. Combinati insieme, ci offrono un'ottima esperienza di sviluppo e facilitano la manutenzione del codice.

In questo articolo abbiamo parlato di linting e formattazione, ma gli strumenti disponibili e le possibilità sono molto più ampie: si potrebbero impostare alcuni test da eseguire su un hook pre-commit o, se si usa Typescript, aggiungere un comando di controllo del tipo con Husky per saltare qualsiasi codice non tipizzato nella vostra applicazione.

carriera al codest

Per saperne di più:

Pro e contro dell'Vue

Come uccidere un progetto con cattive pratiche di codifica

React: suggerimenti e trucchi

Articoli correlati

Sviluppo di software

Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

IL CANCRO
Sviluppo di software

Le 10 principali aziende di sviluppo software con sede in Lettonia

Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

thecodest
Soluzioni per aziende e scaleup

Essenziali di sviluppo software Java: Guida all'outsourcing di successo

Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

thecodest
Sviluppo di software

La guida definitiva all'outsourcing in Polonia

L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

IlCodesto
Soluzioni per aziende e scaleup

Guida completa agli strumenti e alle tecniche di audit IT

Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

The Codest
Jakub Jakubowicz CTO e cofondatore

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

    it_ITItalian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek it_ITItalian