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

ma-librairie

v1.2.8

Published

Ma première librairie effectivement déployée sur NPM et fonctionnelle dans l'AC-Starter

Downloads

5

Readme

Angular2-Component-library

Un exemple de librairie Angular2 packagée avec webpack, réutilisable (sous conditions) dans nos applications.

Objectif

Trouver et montrer comment on peut s'y prendre pour écrire une bibliothèque de composants en Angular2.

  • Expliquer les règles à suivre, les limites.
  • Expliquer comment packager.
  • Expliquer comment interagir avec NPM (version, publish.
  • Expliquer comment l'application cliente doit être conçue pour pouvoir utiliser ces composants.
  • Expliquer comment installer ce composant dans l'application.

Ecriture des composants

  • Les composants sont écrits en Typescript avec les restrictions suivantes:
    • Le style est écrit en CSS, SASS n'est pas supporté (pour le moment).
    • le HTML et le CSS peut être inliné ou externalisé dans un fichier séparé. Cela se fait de la façon suivante: Exemple:
@Component({
    selector: 'zas-footer',
    pipes: [TranslatePipe],
    styleUrls: [require('./footer.component.css'],
    templateUrl: require('./footer.component.html')
})
  • les traductions sont de la responsabilité exclusive de l'application appelante, pour le moment. A voir si à terme chaque composant devrait être responsable de ses propres traductions (ce n'est pas forcément une bonne option).

  • Les images sont toutes dans un seul répertoire "img".

  • Elles partagent un préfixe spécifique à la librairie. Ex. la librairie "ma-librairie" a pour préfixe "lib" (image "lib-closemenu.png" etc.). Cela permet d'éviter l'écrasement entreimages provenants de différentes librairies ou avec celles de l'application cliente.

  • un fichier typescript portant le nom de la librairie exporte tous les composants de la librairie. Ex. "ma-librairie.ts" exporte les interfaces publiques de la librairie "ma-librairie". Cela simplifie l'utilisatin de la librairie par les applications.

  • un fichier CSS portant le nomde la librairie exporte toutes les images de la librairie. Ex. "ma-librairie.css" exporte autant de classes que la librairie a d'images, chaque classe portant le nom d'une image et pointant sur l'image. Cela permetà l'application, packagée avec Webpack, d'inclure ces images dans ses bundles.

.openmenu {
    background-image: url('img/lib-openmenu.png');
}
  • Important: aucune URL absolue n'est utilisée pour désigner un fichier, que ce soit une image, un fichier HTML ou un css.

publication de la librairie

pour publier la librairie il faut disposer d'une registry NPM. Soit on utilise la registry registry.npmjs.org, soit on utilse un outil interne. J'utilise par exemple l'outil "Sinopia", installable via npm https://www.npmjs.com/package/sinopia-altldap . la registry est alors accessible sur localhost:4873 .

La gestion des versions doit être conforme aux principes de semver (semantic versioning). Pour simplifier, x.y.z avec x=version majeure, y=version mineure et z=patch. Toute rupture de compatibilité dans une nouvelle version implique la création d'une version majeure. Une version mineure apporte des nouveautés compatibles, et des corrections. Un patch n'est que correctif.

Utilisation de NPM. Une fois le commit de la librairie effectué, utiliser la commande

  • npm version major|minor|patch selon le niveau de compatibilité (note: il y a d'autres poptions, se reporter à l'aide NPM)

  • Compiler la librairie par "typings install" puis "tsc". Cela génère une partie du répertoire "dist" de distribution

  • puis utiliser "npm publish". Le script "prepublish" sera exécuté au préalable. Je l'utilise pour copier des fichiers annexes dans le répertoire de distribution.

Utilisation de la librairie dans une application tierce

  • utiliser la commande "npm i --save ma-librairie[@x.y.z si la version doit être précisée]"

  • dans le vendor.ts importer le fichier "ma-librairie.css" pour déclencher la copie par webpack des images nécessaires au composant dans l'application.

  • dans le fichier typescript décrivant la page, importer le composant FooterComponent

import {FooterComponent} from 'ma-librairie/dist/ma-librairie';

@Component({ selector: 'app', encapsulation: ViewEncapsulation.None, directives: [HeaderComponent, FooterComponent, SideMenu], styleUrls: [ './app.component.scss' ], template: '<div class="application application-scrolling"> <zas-header (langChanged)="translate.setLang($event)" [currentLang]="translate.getLang()"></zas-header> <main> <div class="router-outlet"> <router-outlet></router-outlet> </div> </main> <zas-footer></zas-footer> </div> })