Angular 2
Utwórz pakiet Angular 2+ NPM
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!!!