Buscar..


Introducción

A veces necesitamos compartir algún componente entre algunas aplicaciones y publicarlo en npm es una de las mejores formas de hacerlo.

Hay algunos trucos que necesitamos saber para poder usar un componente normal como paquete npm sin cambiar la estructura como estilos externos integrados.

Puedes ver un ejemplo mínimo aquí

Paquete mas simple

Aquí compartimos un flujo de trabajo mínimo para crear y publicar un paquete Angular 2+ npm.

Archivos de configuración

Necesitamos algunos archivos de configuración para decirle a git , npm , gulp y typescript cómo actuar.

.gitignore

Primero creamos un archivo .gitignore para evitar la .gitignore de versiones de archivos y carpetas no deseados. El contenido es:

npm-debug.log
node_modules
jspm_packages
.idea
build

.npmignore

En segundo lugar, creamos un archivo .npmignore para evitar la publicación de archivos y carpetas no deseados. El contenido es:

examples
node_modules
src

gulpfile.js

Necesitamos crear un gulpfile.js para decirle a Gulp cómo compilar nuestra aplicación. Esta parte es necesaria porque debemos minimizar e incluir todas las plantillas y estilos externos antes de publicar nuestro paquete. El contenido es:

var gulp = require('gulp');
var embedTemplates = require('gulp-angular-embed-templates');
var inlineNg2Styles = require('gulp-inline-ng2-styles');

gulp.task('js:build', function () {
    gulp.src('src/*.ts') // also can use *.js files
        .pipe(embedTemplates({sourceType:'ts'}))
        .pipe(inlineNg2Styles({ base: '/src' }))
        .pipe(gulp.dest('./dist'));
});

index.d.ts

index.d.ts archivo index.d.ts al importar un módulo externo. Ayuda editor con auto-finalización y consejos de función.

export * from './lib';

index.js

Este es el punto de entrada del paquete. Cuando instale este paquete usando NPM e importe en su aplicación, solo necesita pasar el nombre del paquete y su aplicación aprenderá dónde encontrar cualquier componente EXPORTADO de su paquete.

exports.AngularXMinimalNpmPackageModule = require('./lib').AngularXMinimalNpmPackageModule;

Usamos la carpeta lib porque cuando compilamos nuestro código, la salida se coloca dentro de la carpeta /lib .

paquete.json

Este archivo se utiliza para configurar su publicación npm y define los paquetes necesarios para que funcione.

{
  "name": "angular-x-minimal-npm-package",
  "version": "0.0.18",
  "description": "An Angular 2+ Data Table that uses HTTP to create, read, update and delete data from an external API such REST.",
  "main": "index.js",
  "scripts": {
    "watch": "tsc -p src -w",
    "build": "gulp js:build && rm -rf lib && tsc -p dist"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vinagreti/angular-x-minimal-npm-package.git"
  },
  "keywords": [
    "Angular",
    "Angular2",
    "Datatable",
    "Rest"
  ],
  "author": "[email protected]",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/vinagreti/angular-x-minimal-npm-package/issues"
  },
  "homepage": "https://github.com/vinagreti/angular-x-minimal-npm-package#readme",
  "devDependencies": {
    "gulp": "3.9.1",
    "gulp-angular-embed-templates": "2.3.0",
    "gulp-inline-ng2-styles": "0.0.1",
    "typescript": "2.0.0"
  },
  "dependencies": {
    "@angular/common": "2.4.1",
    "@angular/compiler": "2.4.1",
    "@angular/core": "2.4.1",
    "@angular/http": "2.4.1",
    "@angular/platform-browser": "2.4.1",
    "@angular/platform-browser-dynamic": "2.4.1",
    "rxjs": "5.0.2",
    "zone.js": "0.7.4"
  }
}

dist / tsconfig.json

Crea una carpeta dist y coloca este archivo dentro. Este archivo se utiliza para indicar a Typescript cómo compilar su aplicación. Dónde obtener la carpeta mecanografiada y dónde colocar los archivos compilados.

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "mapRoot": "",
    "rootDir": ".",
    "target": "es5",
    "lib": ["es6", "es2015", "dom"],
    "inlineSources": true,
    "stripInternal": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "removeComments": true,
    "sourceMap": true,
    "outDir": "../lib",
    "declaration": true
  }
}

Después de crear los archivos de configuración, debemos crear nuestro componente y módulo. Este componente recibe un clic y muestra un mensaje. Se utiliza como una etiqueta html <angular-x-minimal-npm-package></angular-x-minimal-npm-package> . Simplemente instale este paquete npm y cargue su módulo en el modelo que desea usar.

src / angular-x-minimal-npm-package.component.ts

import {Component} from '@angular/core';
@Component({
    selector: 'angular-x-minimal-npm-package',
    styleUrls: ['./angular-x-minimal-npm-package.component.scss'],
    templateUrl: './angular-x-minimal-npm-package.component.html'
})
export class AngularXMinimalNpmPackageComponent {
    message = "Click Me ...";
    onClick() {
        this.message = "Angular 2+ Minimal NPM Package. With external scss and html!";
    }
}

src / angular-x-minimal-npm-package.component.html

<div>
  <h1 (click)="onClick()">{{message}}</h1>
</div>

src / angular-x-data-table.component.css

h1{
    color: red;
}

src / angular-x-minimal-npm-package.module.ts

import { NgModule } from '@angular/core';
import { CommonModule  } from '@angular/common';

import { AngularXMinimalNpmPackageComponent } from './angular-x-minimal-npm-package.component';

@NgModule({
  imports: [ CommonModule ],
  declarations: [ AngularXMinimalNpmPackageComponent ],
  exports:  [ AngularXMinimalNpmPackageComponent ],
  entryComponents: [ AngularXMinimalNpmPackageComponent ],
})
export class AngularXMinimalNpmPackageModule {}

Después de eso, debes compilar, construir y publicar tu paquete.

Construir y compilar

Para construir usamos gulp y para compilar usamos tsc . El comando se establece en el archivo package.json, en la opción scripts.build . Tenemos este conjunto gulp js:build && rm -rf lib && tsc -p dist . Esta es nuestra cadena de tareas que hará el trabajo por nosotros.

Para compilar y compilar, ejecute el siguiente comando en la raíz de su paquete:

npm run build

Esto activará la cadena y terminará con su compilación en la carpeta /dist y el paquete compilado en su carpeta /lib . Es por eso que en index.js exportamos el código de la carpeta /lib y no de /src .

Publicar

Ahora solo necesitamos publicar nuestro paquete para poder instalarlo a través de npm. Para eso, simplemente ejecuta el comando:

npm publish

¡¡¡Eso es todo!!!



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow