Angular 2
Создайте пакет с угловым 2+ NPM
Поиск…
Вступление
Иногда нам нужно разделить какой-то компонент между некоторыми приложениями и опубликовать его в npm, это один из лучших способов сделать это.
Есть некоторые трюки, которые нам нужно знать, чтобы иметь возможность использовать обычный компонент в качестве пакета npm без изменения структуры как вставки внешних стилей.
Вы можете увидеть минимальный пример здесь
Простейший пакет
Здесь мы используем минимальный рабочий процесс для создания и публикации пакета Angular 2+ npm.
Файлы конфигурации
Нам нужны некоторые файлы конфигурации, чтобы сообщить git
, npm
, gulp
и typescript
как действовать.
.gitignore
Сначала мы создаем файл .gitignore
чтобы избежать версий нежелательных файлов и папок. Содержание:
npm-debug.log
node_modules
jspm_packages
.idea
build
.npmignore
Во-вторых, мы создаем файл .npmignore
чтобы избежать публикации нежелательных файлов и папок. Содержание:
examples
node_modules
src
gulpfile.js
Нам нужно создать gulpfile.js
чтобы сообщить Gulp, как скомпилировать наше приложение. Эта часть необходима, потому что перед публикацией нашего пакета нам необходимо свести к минимуму и включить все внешние шаблоны и стили. Содержание:
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
используется машинописным index.d.ts
. Он помогает редактору с автозаполнением и подсказками функций.
export * from './lib';
index.js
Это точка входа в пакет. Когда вы устанавливаете этот пакет с помощью NPM и импортируете в приложение, вам просто нужно передать имя пакета, и ваше приложение узнает, где найти какой-либо ЭКСПОРТНЫЙ компонент вашего пакета.
exports.AngularXMinimalNpmPackageModule = require('./lib').AngularXMinimalNpmPackageModule;
Мы использовали папку lib
потому что когда мы компилируем наш код, вывод помещается в папку /lib
.
package.json
Этот файл используется для настройки публикации npm и определения необходимых пакетов для работы.
{
"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"
}
}
расстояние / tsconfig.json
Создайте папку dist и поместите этот файл внутри. Этот файл используется для указания TypScript как скомпилировать ваше приложение. Где взять папку с машинописными текстами и куда поместить скомпилированные файлы.
{
"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
}
}
После создания файлов конфигурации мы должны создать наш компонент и модуль. Этот компонент получает клик и отображает сообщение. Он используется как html-тег <angular-x-minimal-npm-package></angular-x-minimal-npm-package>
. Просто установите этот пакет npm и загрузите его модуль в модель, которую вы хотите использовать.
SRC / углового-х-минимальной 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 / углового-х-минимальной NPM-package.component.html
<div>
<h1 (click)="onClick()">{{message}}</h1>
</div>
SRC / Угловое-х-данных table.component.css
h1{
color: red;
}
SRC / углового-х-минимальной 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 {}
После этого вы должны скомпилировать, создать и опубликовать свой пакет.
Сборка и компиляция
Для сборки мы используем gulp
и для компиляции мы используем tsc
. Команда устанавливается в файле package.json по параметру scripts.build
. У нас есть этот набор gulp js:build && rm -rf lib && tsc -p dist
. Это наши цепочки, которые будут выполнять эту работу для нас.
Чтобы создать и скомпилировать, запустите в корневом каталоге следующую команду:
npm run build
Это вызовет цепочку, и в итоге вы получите свою папку сборки /dist
и скомпилированный пакет в папке /lib
. Вот почему в index.js
мы экспортировали код из папки /lib
а не из /src
.
Публиковать
Теперь нам просто нужно опубликовать наш пакет, чтобы мы могли установить его через npm. Для этого просто запустите команду:
npm publish
Это все!!!