最简单的包装
在这里,我们分享一些最小的工作流程来构建和发布 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
导入外部模块时,types 脚本使用 index.d.ts
文件。它有助于编辑器自动完成和功能提示。
export * from './lib';
index.js
这是包入口点。当你使用 NPM 安装此软件包并在应用程序中导入时,你只需传递软件包名称,你的应用程序将了解在哪里可以找到软件包的任何 EXPORTED 组件。
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": "bruno@tzadi.com",
"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
创建一个 dist 文件夹并将此文件放在里面。该文件用于告诉 Typescript 如何编译你的应用程序。在哪里获取 typescript 文件夹以及放置编译文件的位置。
{
"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 /角 -X-最小 -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 /角 -X-最小 -NPM-package.component.html
<div>
<h1 (click)="onClick()">{{message}}</h1>
</div>
SRC /角 -X-数据 table.component.css
h1{
color: red;
}
SRC /角 -X-最小 -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
就这些!!!