Sök…


Introduktion

Ibland måste vi dela någon komponent mellan vissa appar och att publicera den i npm är ett av de bästa sätten att göra detta.

Det finns några knep som vi behöver veta för att kunna använda en normal komponent som paket npm utan att ändra strukturen som att inrätta externa stilar.

Du kan se ett minimalt exempel här

Enklaste paketet

Här delar vi lite minimalt arbetsflöde för att bygga och publicera ett Angular 2+ npm-paket.

Konfigurationsfiler

Vi behöver några konfigurationsfiler för att berätta för git , npm , gulp och typescript hur man ska agera.

.gitignore

Först skapar vi en .gitignore fil för att undvika versionering av oönskade filer och mappar. Innehållet är:

npm-debug.log
node_modules
jspm_packages
.idea
build

.npmignore

För det andra skapar vi en .npmignore fil för att undvika att publicera oönskade filer och mappar. Innehållet är:

examples
node_modules
src

gulpfile.js

Vi måste skapa en gulpfile.js att berätta för Gulp hur man sammanställer vår applikation. Den här delen är nödvändig eftersom vi måste minimera och ange alla externa mallar och stilar innan vi publicerar vårt paket. Innehållet är:

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 används av typskript vid import av en extern modul. Det hjälper redaktören med automatisk komplettering och funktionstips.

export * from './lib';

index.js

Detta är paketets ingångspunkt. När du installerar detta paket med NPM och importerar i din applikation, behöver du bara skicka paketnamnet och din applikation kommer att lära sig var du kan hitta en EXPORTD komponent i ditt paket.

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

Vi använde lib mappen eftersom när vi sammanställer vår kod placeras utgången inuti /lib mappen.

package.json

Denna fil används för att konfigurera din npm-publikation och definierar nödvändiga paket för att den ska fungera.

{
  "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

Skapa en dist-mapp och placera den här filen inuti. Denna fil används för att berätta för TypeScript hur du sammanställer din applikation. Var kan man få typskriptmappen och var man ska placera de kompilerade filerna.

{
  "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
  }
}

När vi har skapat konfigurationsfilerna måste vi skapa vår komponent och modul. Den här komponenten får ett klick och visar ett meddelande. Det används som en html-tagg <angular-x-minimal-npm-package></angular-x-minimal-npm-package> . Installera bara detta npm-paket och ladda dess modul i den modell du vill använda det.

src / vinkel-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 / vinkel-x-minimal-NPM-package.component.html

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

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

h1{
    color: red;
}

src / vinkel-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 {}

Efter det måste du sammanställa, bygga och publicera ditt paket.

Bygg och kompilera

För byggnad använder vi gulp och för sammanställning använder vi tsc . Kommandot är inställt i package.json-filen, på alternativet scripts.build . Vi har denna set gulp js:build && rm -rf lib && tsc -p dist . Detta är våra kedjeuppgifter som kommer att göra jobbet för oss.

För att bygga och kompilera, kör följande kommando i roten till ditt paket:

npm run build

Detta utlöser kedjan och du kommer att hamna med din inbyggda /dist mapp och det kompilerade paketet i din /lib mapp. Det är därför vi i index.js exporterade koden från mappen /lib och inte från /src .

Publicera

Nu behöver vi bara publicera vårt paket så att vi kan installera det via npm. För det, kör bara kommandot:

npm publish

Det är allt!!!



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow