Angular 2
Crear un paquete Angular 2+ NPM
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!!!