Szukaj…


Wprowadzenie

Czasami musimy udostępnić jakiś komponent między niektórymi aplikacjami i opublikowanie go w npm jest jednym z najlepszych sposobów na zrobienie tego.

Jest kilka sztuczek, które musimy znać, aby móc używać normalnego komponentu jako pakietu npm bez zmiany struktury jako wbudowanych stylów zewnętrznych.

Możesz zobaczyć minimalny przykład tutaj

Najprostszy pakiet

Tutaj dzielimy się minimalnym przepływem pracy w celu zbudowania i opublikowania pakietu npm Angular 2+.

Pliki konfiguracyjne

Potrzebujemy plików konfiguracyjnych, aby powiedzieć git , npm , gulp i typescript jak mają działać.

.gitignore

Najpierw tworzymy plik .gitignore , aby uniknąć wersjonowania niechcianych plików i folderów. Treść jest:

npm-debug.log
node_modules
jspm_packages
.idea
build

.npmignore

Po drugie tworzymy plik .npmignore , aby uniknąć publikowania niechcianych plików i folderów. Treść jest:

examples
node_modules
src

gulpfile.js

Musimy utworzyć plik gulpfile.js aby poinformować Gulp, jak skompilować naszą aplikację. Ta część jest konieczna, ponieważ przed opublikowaniem naszego pakietu musimy zminimalizować i umieścić wszystkie zewnętrzne szablony i style. Treść jest:

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

Plik index.d.ts jest używany przez maszynopis podczas importowania modułu zewnętrznego. Pomaga redaktorowi z automatycznym uzupełnianiem i wskazówkami dotyczącymi funkcji.

export * from './lib';

index.js

To jest punkt wejścia paczki. Po zainstalowaniu tego pakietu za pomocą NPM i zaimportowaniu do aplikacji wystarczy przekazać nazwę pakietu, a aplikacja dowie się, gdzie można znaleźć dowolny EKSPORTOWANY komponent pakietu.

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

Użyliśmy folderu lib ponieważ kiedy kompilujemy nasz kod, dane wyjściowe są umieszczane w folderze /lib .

pakiet.json

Ten plik służy do konfigurowania publikacji npm i określa niezbędne pakiety do działania.

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

Utwórz folder dist i umieść ten plik w środku. Ten plik służy do informowania Typescript, jak skompilować aplikację. Gdzie uzyskać folder maszynopisu i gdzie umieścić skompilowane pliki.

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

Po utworzeniu plików konfiguracyjnych musimy utworzyć nasz komponent i moduł. Ten komponent otrzymuje kliknięcie i wyświetla komunikat. Jest on używany jak znacznik HTML <angular-x-minimal-npm-package></angular-x-minimal-npm-package> . Wystarczy zainstalować ten pakiet npm i załadować jego moduł w modelu, którego chcesz użyć.

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

Następnie musisz skompilować, skompilować i opublikować swój pakiet.

Kompiluj i kompiluj

Do kompilacji używamy gulp a do kompilacji używamy tsc . Polecenie jest ustawione w pliku package.json, w opcji scripts.build . Mamy ten zestaw gulp js:build && rm -rf lib && tsc -p dist . To są nasze łańcuchowe zadania, które wykonają za nas zadanie.

Aby skompilować i skompilować, uruchom następujące polecenie w katalogu głównym pakietu:

npm run build

To uruchomi łańcuch i skończysz z folderem /dist i skompilowanym pakietem w folderze /lib . Dlatego w index.js wyeksportowaliśmy kod z folderu /lib a nie z /src .

Publikować

Teraz musimy tylko opublikować nasz pakiet, abyśmy mogli go zainstalować za pomocą npm. W tym celu wystarczy uruchomić polecenie:

npm publish

To wszystko!!!



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow