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

neotoast-forwardref

v1.7.7

Published

test publish react component

Downloads

3

Readme

Creazione modulo NPM

Fonte: Build And Publish A React Component Library

Riferimento:

https://www.youtube.com/watch?v=hf6Z8OZanec&t=835s

Steps:

  • Initializing The Project
  • Storybook
  • Component Library Source Code
  • Rollup
  • Publish To NPM

Step 1 - Initializing The Project

  • Creare cartella di progetto
  • Entrare nella cartella creata con Terminale run: npm init Crea package.json
    • package name: (nome cartella default) cambiare il nome del progetto facoltativo -> ok
    • version: (1.0.0) -> ok
    • description: aggiungere breve descrizione progetto -> ok
    • entry point: (index.js) / in seguito verrà modificata per ora si puo lasciare cosi.
    • author: "inserire nome"
    • licence: (ISC default) - Consigliano di mettere MIT (io non l'ho fatto)
  • Creare scafholding di progetto:
    • creare cartella "src"
    • dentro "src" creare cartella "components"
    • dentro "components" creare file index.js
index.js:
    export * from './components/ParentComponent'

esporta il componente padre oppure aggiungere altre eventuali esportazioni se necessario

  • installare react e react-dom npm install --save-dev react react-dom
  • aggiungere al package.json "peerDependecies": {cp react e react-dom}
    devDependencies": {
            "react": "^18.2.0",
            "react-dom": "^18.2.0"
    },
     "peerDependecies": {
            "react": "^18.2.0",
            "react-dom": "^18.2.0"
     }

Serve a non creare collisioni tra le varie versioni di react nell'eventualità che qualcuno installa questo componente con una versione di react differente

Step 2 - STORYBOOK

Serve a visualizzare il componente in fase di sviluppo evitando di fare "build" e "publish su npm" per ogni modifica effettuata.

  • install STORYBOOK (non funziona con node v18 usato con node v16) npx sb init
Dopo installazione Tips:
  • Terminale: "Detecting project type ok" - conferma che ha trovato react
  • aggiunge diverse devDep di babel
  • il comando per lasciare il progetto è: npm run storybook (da usare in seguito)
  • nella cartella di progetto (root) crea cartella .storybook con dentro file di configurazione generati automaticamente dentro "src" crea cartella "stories" con dentro file di esempio (in questo caso sono stati eliminati in quanto non è un tutorial su Storybook)
Creare componenti di progetto

Creare una cartella (in components) per ogni componente che si vuole utilizzare ES. ParentComponent e Child Src | . | . | . ------------ | ------------- | ------------- | ------------- . | components | . . | . | Child . | . | . | Child.jsx . | . | . | index.js . | . | ParentComponent . | . | . | ParentComponent.jsx . | . | . | index.js

in ogni cartella creare due file index.js - NomeComponent.jsx

  • index.js 'per l'esportazione del componente'
  • NomeComponent.jsx 'il componente e la sua logica'
index.js:
export * from './ParentComponent'
ParentComponent.jsx

export const ParentComponent = () => {
    return ( 
    <div> 
      <h2>Hello Parent</h2>
    </div>
    );
 }

Dentro cartella src nel file index.js aggiungere:

export * from './components/ParentComponent'

Per esportare i nostri componenti (ParentComponent e Child) nel caso in cui ci fossero più componenti da esporare assicurati di farlo in questo file

Tips:

solitamente il file "index.js" nelle normali applicazioni React serve per importare "App" (router - store etc) in questo caso sarà il file NomeStoria.stories.js a simulare "App"

Creare storia - Storybook

Dentro cartella "stories" creare file NomeStoria.stories.js + file "style.css"

NomeStoria.stories.js
import React from "react";
import {storiesOf} from "@storybook/react";
import { ParentComponent } from "../components/ParentComponent";
import './style.css'

const stories = storiesOf('App test', module);

stories.add('App', () => {
    return(<ParentComponent/>)
})

Il secondo parametro della funzione (stories.add('Param1', Param2)) può essere interpretato come un normale componente react (si possono utilizzare hook, funzioni, props etc etc)

Per controllare il corretto funzionamento di storybook run npm run storybook

Tips:
Potrebbe aprire ill broswer su porta 192.168.0.1/6006
sostituire con http://localhost:6006

potrebbe essere necessario fare diverse storie per più componenti
Step 3 - Component Library Source Code

Esempio codice:

  • https://github.com/patriziosbr/react-pwr2 - Repo personale privata richiedere accesso a patriziosbr
  • https://github.com/portexe/react-pwr - Repo pubblica del video tutorial
Step 4 - Rollup

Rollup.js serve a compilare il progetto npm install rollup rollup-plugin-babel @rollup/plugin-node-resolve rollup-plugin-peer-deps-external --save-dev Dipendenze aggiuntive: npm install --save-dev @babel/preset-react npm install --save-dev rollup-plugin-postcss npm install --save-dev rollup-plugin-terser npm install --save-dev rollup-plugin-babel

Nella root project fuori da src Creare file rollup.config.js per far funzionare il progetto ho modificato l'estenzione del file in rollup.config.mjs (m sta per modulo)

rollup.config.mjs:
import babel from 'rollup-plugin-babel';
import resolve from '@rollup/plugin-node-resolve';
import external from 'rollup-plugin-peer-deps-external';
import { terser } from 'rollup-plugin-terser';
import postcss from 'rollup-plugin-postcss';

export default [
  {
    input: './src/index.js',
    output: [
      {
        file: 'dist/index.js',
        format: 'cjs', //commonjs
      },
      {
        file: 'dist/index.es.js', //da studiare
        format: 'es',
        exports: 'named',
      }
    ],
    plugins: [
      postcss({
        plugins: [],
        minimize: true,
      }),
      babel({
        exclude: 'node_modules/**',
        presets: ['@babel/preset-react']
      }),
      external(),
      resolve(),
      terser(), //per minify
    ]
  }
];

Creare la build/dist

Andare nel package.json aggiungere scripts -> "build-lib": "rollup -c" "module": "dist/index.es.js", modificare main -> "main": "dist/index.js":

Package.json:
{
  "name": "pu-react-pwr2",
  "version": "1.7.2",
  "description": "test publish react component",
  "main": "dist/index.js", //edit me
  "module": "dist/index.es.js", //add me
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "storybook": "start-storybook -p 6006",
    "build-storybook": "build-storybook",
    "build-lib": "rollup -c" //add me
  },
  "author": "yourname",
  //resto del codice

npm run build-lib

Step 5 - Publish To NPM
  • Creare account su npm
  • nella root project folder run: npm adduser

Username: inserire username Password: pass Email: mail OTP Code via mail: 0000000

npm publish