npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-magic-form

v0.9.7

Published

Boilerplate for Resact with Typescript with rollup.js (not webpack)

Downloads

6

Readme

react-library-rollup

Boilerplate for Resact with Typescript with rollup.js (not webpack)

peerDependencies:

Nel package.json la voce peerDependencies indica che il nostro bundle (libreria) ha bisogno delle seguenti dipendenze per poter funzionare. Il caso d'uso d'esempio (e di questo caso) e per lo sviluppo di plugin.

Essendo un plugin React la "peerDependencie" sarà React (versione 16 o 17)

Rollup.js

Rollup.js vs Webpack:

Rollup.js è un alternativa a Webpack (entrambi module bundle) la principale differenza che Rollup.js ha il "Node polifilly" per import o export.

webpack e Rollup richiedono entrambi un file di configurazione che specifichi voce, output, caricatori, plug-in, trasformazioni, ecc. Tuttavia, c'è una leggera differenza:

  1. Il rollup ha polyfill di nodi per l'importazione / esportazione, ma il webpack no.
  2. Il rollup supporta i percorsi relativi in config, ma il webpack no, motivo per cui utilizzi path.resolve o path.join.

Dipendenze e configurazione:

Le principali dipendenze per poter usare Rollup.js in modo da poter trasformare React TS in Javascript in vari moduli: UMD, CommoJS, ESNext.

Pacchetti core:

  1. Core-js. More info
  2. @babel/core e @babel/plugin-transform-runtime - Transpiler core
  3. Rollup.js con le seguenti estensioni: plugin-commonjs, plugin-node-resolver, plugin-replace

File di configurazione di Rollup:

Rollup.js si basa sui files di configurazione contenuti nella cartella ./scripts/rollup. Per maggiori info sulle varie esportazioni javascript

  1. rollup.config.js - Configurazione per esportare in : cjs, amd, umd.
  2. createRollupConfig.js - Funzione che genera la dist alla quale passo l'oggetto di config definito nel file al punto 1.

Esistono altre due file di configurazione per Inernet Explorer 11 (con relativo file tsconfig.ie11.json) e per ESM (Ecma Standard Module, import - export).

Linter + Github

Prettier & Eslint:

Per una correta formattazione e sintassi del codice si userà prettier e eslint. Entrmambi hanno il file di configurazione e diversi plugin. Nello specifico i plugin usati sono:

  1. @typescript-eslint/eslint-plugin & @typescript-eslint/parser
  2. eslint-config-prettier Disattiva tutte le regole non necessarie o che potrebbero entrare in conflitto con Prettier. Nota che questa configurazione disattiva solo le regole, quindi ha senso usarla solo insieme a qualche altra configurazione.
  3. eslint-plugin-cypress - Supporto alla libreria di test Cypress
  4. eslint-plugin-prettier - Da usare perforza con il punto 2. Quando la formattazione non "matcha" segnala i problemi come singoli problemi eslint.
  5. eslint-plugin-react - Rules preset for React
  6. eslint-plugin-react-hooks - React rule extension for hooks

NB: Nelle regole di eslint sono ammessi tutti i tipi di console(error, warn, log). In fase di compilazione (per la prod) i console.log() vengino strippati.

Github - Husky & Staged:

Grazie a una combo di husky e lint-staged il codice deve ad ogni commit viene controllato e lintato (fix) prima di fare un commit.

Entrambe queste estensioni non hanno file di configurazione ma vegono configurati nel package.json

Utility

Elenco di script e pacchetti utility per lo sviluppo e mantenimento della repo.

  1. npm run package:check, controlla la qualità del package (skypack/package-check).
  2. npm run bundlesize - Esegue una build e controlla la grandezza rispetto alla configurazione. La configurazione viene definita nel package.json
  3. npm run clean - Pulisco la cartella dist

Scripts

Elenco degli scripts disponibili in NPM:

  1. npm run bundlesize - Esegue la build e il controllo del peso secondo i parametri definiti nel package.
  2. check:package- Controlla il contenuto e la sintassi del package.json
  3. npm run cp:dts - Usando il pacchetto copyfiles copio i tipi Typescript del plugin
  4. npm run dev - Avvia lo sviluppo con storybook
  5. npm run test - Esegue i test
  6. npm run build - Crea direttamenta attraverso Rollup.js la build del progetto in vari formati js (CommoJs, umd, esnext)
  7. npm run prepublishOnly - Crea al build per la pubblicazione, quindi prima esegue controlli con il linter, avvia i test e poi crea la build.
  8. npm run lint - Controlla errori di sintatti e di forma
  9. npm run lint:fix - Risolve, dove possibile, eventuali errori di sintatti o forma

Build

La build è una transpilazione da Typescript a ES5 nei seguenti formati:

  1. CommonJs - Sviluppo e produzione
  2. ESM - Sviluppo e produzione
  3. UMD - Sviluppo e produzione
  4. ie11 - Sviluppo e produione

Vengono inoltre clonati tutti i Types di Typescript.
I tipi all'interno del src devono essere collocati nella cartella /src/types/

Inoltre è possibile attraverso il comando npm run check:package creare un build e controllarne il peso rispetto a quello massimo impostto.

Testing

NB: Enzyme non ha ancora rilasciato Adapter() ufficiale per la versione 17 di React.
Quindi il progtto è stato "wongraded" alla versione di React e React Dom React 16.14.0.

Per i test verrà usata il solito Jest e Cypress Visita il sito.

e2e Cypress: Ho deciso di integrare per la maggior parte test e2e e non unit test t1ramite Cypress.
I test di Cypress vengono assegnati tramite URL. Quindi è necessario compilare e avviare il plugin nel browser.
Quindi è necessaria una configurazione TS per integrare la libreria compilata in "componenti esempio" e avviarli. Tutta la configurazione per l'app di test e2e si trova nella folder ./app.

Per testare l'integrazione della library come "pacchetto" import * from 'react-magic-form'; esiste un comando

JEST + ENZYME:

Jest è stato integrato con Enzyme. Pensavo fossero più easy, ma essendo complesso il plugin i tes non sono immediati per un noob. Studiare e partire facendo "UNIT TEST" base. Anche vero che per l'esigenze del progetto e pe un fattore tempo i test migliori sono quelli e2e.

BYPASS LINT X GIT:

Dal package.json rimuovere la sezione relativa a husky

"husky": { "hooks": { "pre-commit": "npm run lint:fix && npm run lint" } }, "lint-staged": { ".{js,ts,tsx}": [ "npm run lint:fix" ], ".{md,json,yml}": [ "prettier --write" ] }