将功能模块打包成第三方npm包

1、首先通过ng new master创建一个master项目,如下图所示:

2、输入y后一路回车即可,如下图所示:

3、然后cd到项目中,执行如下命令:

ng g library battery-tree --prefix wincom

如下图所示:

创建第三方库 (--prefix: 前缀;在用命令行新建组件/指令时,selector的属性值的前缀,如图所示前缀为wincom,然后是库的名称)

4、此时目录中会有一个projects文件夹,如下图所示:

5、然后就是库的名称,如下图所示:

6、以下就是自动生成的文件以及文件夹

6、此时在项目的根目录中的angular.json中会自动添加库的信息,如下图所示:

7、然后使用vscode打开文件夹,选择项目的文件,如下图所示:

8、此时将项目使用vscode打开了,如下图所示:

9、然后修改项目的package.json加入第三方依赖包,如下图所示:

10、然后打开终端输入npm install安装新加的依赖包,如下图所示:

11、配置新加的依赖包,首先打开angular.json文件,然后在其中添加相应的配置

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "master": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "app",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/master",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "assets": [
              "src/favicon.ico",
              "src/assets",
              {
                "glob": "**/*",
                "input":"node_modules/@ant-design/icons-angular/src/inline-svg/",
                "output": "/assets/"
              }
            ],
            "styles": [
              "src/styles.css",
              "node_modules/ng-zorro-antd/ng-zorro-antd.min.css"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": true,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true,
              "budgets": [
                {
                  "type": "initial",
                  "maximumWarning": "2mb",
                  "maximumError": "5mb"
                }
              ]
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "master:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "master:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "master:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.spec.json",
            "karmaConfig": "src/karma.conf.js",
            "styles": [
              "src/styles.css"
            ],
            "scripts": [],
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ]
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "src/tsconfig.app.json",
              "src/tsconfig.spec.json"
            ],
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    },
    "master-e2e": {
      "root": "e2e/",
      "projectType": "application",
      "prefix": "",
      "architect": {
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "master:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "master:serve:production"
            }
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": "e2e/tsconfig.e2e.json",
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    },
    "battery-tree": {
      "root": "projects/battery-tree",
      "sourceRoot": "projects/battery-tree/src",
      "projectType": "library",
      "prefix": "wincom",
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-ng-packagr:build",
          "options": {
            "tsConfig": "projects/battery-tree/tsconfig.lib.json",
            "project": "projects/battery-tree/ng-package.json"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "projects/battery-tree/src/test.ts",
            "tsConfig": "projects/battery-tree/tsconfig.spec.json",
            "karmaConfig": "projects/battery-tree/karma.conf.js"
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "projects/battery-tree/tsconfig.lib.json",
              "projects/battery-tree/tsconfig.spec.json"
            ],
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    }
  },
  "defaultProject": "master"
}

如下图所示:

12、然后在配置battery-tree.module.ts文件,代码如下:

import { NgModule } from '@angular/core';
import { BatteryTreeComponent } from './battery-tree.component';
import {NgZorroAntdModule} from 'ng-zorro-antd';
@NgModule({
  declarations: [BatteryTreeComponent],
  imports: [
    NgZorroAntdModule
  ],
  exports: [BatteryTreeComponent]
})
export class BatteryTreeModule { }

将NgZorroAntdModule加入到imports中,如下图所示:

如果在battery-tree还有其他的Component,则需要将其他的也加入到exports: [BatteryTreeComponent]中,否则无法导出。

13、然后在battery-tree.component.ts加入信息,如下代码所示:

import { Component, OnInit } from '@angular/core';
import {NzFormatEmitEvent} from 'ng-zorro-antd';
import {Router} from '@angular/router';
@Component({
  selector: 'wincom-battery-tree',
  template: `
    <nz-tree
        [nzData]="nodesLine"
        nzCheckable="true"
        nzShowLine="true"
        (nzClick)="nzEvent($event)">
    </nz-tree>
  `,
  styles: []
})
export class BatteryTreeComponent implements OnInit {
  constructor(public router: Router) { }

  ngOnInit() {
  }
  nodesLine = [ {
    title   : 'parent 1',
    key     : '100',
    expanded: true,
    children: [ {
      title   : 'parent 1-0',
      key     : '1001',
      expanded: true,
      children: [
        { title: 'leaf', key: '10010', isLeaf: true },
        { title: 'leaf', key: '10011', isLeaf: true },
        { title: 'leaf', key: '10012', isLeaf: true }
      ]
    }, {
      title   : 'parent 1-1',
      key     : '1002',
      children: [
        { title: 'leaf', key: '10020', isLeaf: true },
        { title: 'leaf', key: '100101', isLeaf: true },
        { title: 'leaf', key: '100112', isLeaf: true },
        { title: 'leaf', key: '100123', isLeaf: true }
      ]
    }, {
      title   : 'parent 1-2',
      key     : '1003',
      children: [
        { title: 'leaf', key: '10030', isLeaf: false, children: [
            { title: 'leafsdfsasdf', key: '100307', isLeaf: true },
            { title: 'leaf', key: '100318', isLeaf: true },
            { title: 'leaf', key: '100107', isLeaf: true },
            { title: 'leasdfasssssssssssssssfsdf', key: '100118', isLeaf: true },
            { title: 'leaf', key: '100129', isLeaf: true }
          ]},
        { title: 'leaf', key: '10031', isLeaf: false, children: [
            { title: 'leaf', key: '1003012', isLeaf: false, children: [
                { title: 'lesdfsdfsssssssssssssssssssdaf', key: '1003017', isLeaf: true },
                { title: 'leaf', key: '1003118', isLeaf: true },
                { title: 'leaf', key: '1001017', isLeaf: true },
                { title: 'lesdfadfssdsssssssssssssssssssfsfsadaf', key: '1001118', isLeaf: true },
                { title: 'leaf', key: '1001219', isLeaf: true }
              ]},
            { title: 'leaf', key: '1003134', isLeaf: true },
            { title: 'leaf', key: '10010445', isLeaf: true },
            { title: 'leaf', key: '10011545', isLeaf: true },
            { title: 'leaf', key: '10012656', isLeaf: true }
          ] },
        { title: 'leaf', key: '100104566', isLeaf: true },
        { title: 'leaf', key: '1001156778', isLeaf: true },
        { title: 'leaf', key: '100126898', isLeaf: true }
      ]
    } ]
  } ];
  nzEvent(event: NzFormatEmitEvent): void {
    console.log(event);
  }
}

14、然后在app.module.ts文件中加入刚刚填写的模块,如下代码所示:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {HttpClientModule} from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

import zh from '@angular/common/locales/zh';
import {NgZorroAntdModule, NZ_I18N, zh_CN} from 'ng-zorro-antd';
import {registerLocaleData} from '@angular/common';
import {BatteryTreeModule} from '../../projects/battery-tree/src/lib/battery-tree.module'
registerLocaleData(zh);
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpClientModule,
    BrowserAnimationsModule,
    ReactiveFormsModule,
    NgZorroAntdModule,
    BatteryTreeModule,
    AppRoutingModule
  ],
  providers: [{ provide: NZ_I18N, useValue: zh_CN }],
  bootstrap: [AppComponent]
})
export class AppModule { }

如下图所示:

15、然后在app.component.html文件中加入<wincom-battery-tree></wincom-battery-tree>,如下图所示:

16、然后通过ng serve --open启动服务,此时即可显示树,如下图所示:

如果想在加入一个tree的控件可以分别执行如下命令:

cd projects/battery-tree/src/lib
ng g c tree

如下图所示:

17、此时在本地运行没有问题,那么就开始发布了,首先cd到battery-tree目录构建npm包,如下图所示:

18、然后执行ng build battery-tree命令,如下图所示:

19、此时在根目录中会生成一个dist目录,如下图所示:

20、然后cd到dist/battery-tree目录,如下图所示:

21、然后开始上传到npm网站中,首先执行如下命令设置当前目录的镜像

npm config set registry https://registry.npmjs.org

如下图所示:

22、使用npm login登录(注意:必须先在npm官网注册账号并且已经通过邮箱认证激活才行),输入用户名,密码,邮箱等信息,如下图所示:

23、然后执行npm publish即可将该包上传至npm官网,如下图所示:

24、然后登录官网查看即可看到上传的npm包,如下图所示:

25、然后就可以通过npm来安装使用了,比如我们新建一个treeTest项目,如下图所示:

26、然后修改package.json文件,加入对应的依赖包,如下图所示:

27、然后重新执行npm install即可。

28、此时node_modules目录就会有刚刚上传的npm包,如下图所示:

29、在angular.json的配置与第11步相同,如下图所示:

30、然后在app.module.ts中添加如下代码:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {HttpClientModule} from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

import zh from '@angular/common/locales/zh';
import {NgZorroAntdModule, NZ_I18N, zh_CN} from 'ng-zorro-antd';
import {registerLocaleData} from '@angular/common';
import {BatteryTreeModule} from 'battery-tree';
registerLocaleData(zh);
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpClientModule,
    BrowserAnimationsModule,
    ReactiveFormsModule,
    NgZorroAntdModule,
    BatteryTreeModule,
    AppRoutingModule
  ],
  providers: [{ provide: NZ_I18N, useValue: zh_CN }],
  bootstrap: [AppComponent]
})
export class AppModule { }

注意此处的BatteryTreeModule位置是从node_modules中导入的,如下图所示:

31、然后在app.component.html中加入:<wincom-battery-tree></wincom-battery-tree>,如下图所示:

32、启动服务,查看结果即可成功,如下图所示:

npm更新发布后的包:

具体体现为:

对于"version":"x.y.z"

1.修复bug,小改动,增加z

2.增加了新特性,但仍能向后兼容,增加y

3.有很大的改动,无法向后兼容,增加x

参考:https://www.cnblogs.com/zero-zm/p/9932304.html

ng命令用法:

1、可以通过ng g m realtime-monitor --routing命令来创建一个module和routing,如下图所示:

2、然后只用ng g c realtime-monitor来创建component,如下图所示:

转自:https://blog.csdn.net/u011127019/article/details/79114886

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值