使用Angular-CLI构建NPM包的方法


Posted in Javascript onSeptember 07, 2018

1.创建项目

# PROJECT_NAME :创建的项目名称
ng new PROJECT_NAME

2.创建第三方包(我们要构建的NPM包)

cd PROJECT_NAME

# LIBRARY_NAME :创建的包的名称(如 zorro)
# PREFIX :组件前缀(如 nz-zorro 的组件前都是 nz-)
ng g library LIBRARY_NAME --prefix PREFIX

上面命令执行后会在我们项目根目录生成projects目录,目录里就是刚才generate的第三方library,如下图:

使用Angular-CLI构建NPM包的方法

3.构建自己的模块

编辑模块,实现我们需要的功能,我在改模块中加入了directive.tsmodels.ts,如下图:

使用Angular-CLI构建NPM包的方法

directive.ts只在模块内部使用,导入在当前module.ts里,如下:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { NePreviewComponent } from './ne-preview.component';

import { ViewerDirectiveModule } from './ne-preview.directive';

@NgModule({
 imports: [
 BrowserModule,
 ViewerDirectiveModule # 这里
 ],
 declarations: [NePreviewComponent],
 exports: [NePreviewComponent]
})
export class NePreviewModule { }

models.ts可能在外部使用,则需在public_api.ts导出,如下:

export * from './lib/ne-preview.service';
export * from './lib/ne-preview.component';
export * from './lib/ne-preview.module';

export * from './lib/ne-preview.model'; # 这个是新加,其他为自动生成

4.构建NPM包

打包前修改package.json中的项目信息,每次更新npm包需修改version,版本相同提交不上去,可以手动修改,也可命令修改,如下:

npm version prepatch

更多操作

# 版本号从 1.2.3 变成 1.2.4-0,就是 1.2.4 版本的第一个预发布版本。
npm version prepatch

# 版本号从 1.2.4-0 变成 1.3.0-0,就是 1.3.0 版本的第一个预发布版本。
npm version preminor

# 版本号从 1.2.3 变成 2.0.0-0,就是 2.0.0 版本的第一个预发布版本。
npm version premajor

# 版本号从 2.0.0-0 变成 2.0.0-1,就是使预发布版本号加一。
npm version prerelease

编译打包

#切到项目根目录
cd 项目根目录路径
ng build LIBRARY_NAME

编译成功,如下图:

使用Angular-CLI构建NPM包的方法

在项目根目录会生成dist目录,如下:

使用Angular-CLI构建NPM包的方法

到这里我们的NPM包就制作完成了,接下来就是发布到NPM仓库~

5.发布NPM包

这里得先登录NPM,

npm login # 详细操作自行百度
#切到目录
cd dist/LIBRARY_NAME
#发布
npm publish

6.使用发布的NPM包

安装我们发布的包

# NPM_PACKAGE_NAME :projects/LIBRARY_NAME/package.json 里面的 name,默认为:LIBRARY_NAME
npm install NPM_PACKAGE_NAME

在项目app.module.ts中引入我们创建的组件,如下:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { registerLocaleData } from '@angular/common';
import zh from '@angular/common/locales/zh';

import { EchoImagePreviewModule } from './echo-image-preview/echo-image-preview.module';
import { EchoModuleModule } from 'echo-image-preview';
import { NePreviewModule } from 'ne-img-preview'; # <===这里


registerLocaleData(zh);

@NgModule({
 declarations: [
 AppComponent
 ],
 imports: [
 BrowserModule,
 BrowserAnimationsModule,
 FormsModule,
 HttpClientModule,
 EchoImagePreviewModule,
 EchoModuleModule,
 NePreviewModule # <===这里
 ],
 providers: [],
 bootstrap: [AppComponent]
})
export class AppModule { }

model.ts直接引用:

import { IMGLIST } from 'ne-img-preview';

组件使用,如下:

<ne-ne-preview [imgList]="imgList"></ne-ne-preview>

感谢:harlan:如何构建一个Angular6的第三方npm包

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
简单的js分页脚本
May 21 Javascript
JavaScript DOM学习第六章 表单实例
Feb 19 Javascript
javascript学习笔记(十三) js闭包介绍(转)
Jun 20 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
Node.js 条形码识别程序构建思路详解
Feb 14 Javascript
BootStrap table使用方法分析
Nov 08 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
Jun 19 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
详解如何构建一个Angular6的第三方npm包
Sep 07 #Javascript
vue2.0 可折叠列表 v-for循环展示的实例
Sep 07 #Javascript
Js中使用正则表达式验证输入是否有特殊字符
Sep 07 #Javascript
vue.js+element-ui动态配置菜单的实例
Sep 07 #Javascript
详解npm 配置项registry修改为淘宝镜像
Sep 07 #Javascript
vue 点击按钮实现动态挂载子组件的方法
Sep 07 #Javascript
关于JavaScript中高阶函数的魅力详解
Sep 07 #Javascript
You might like
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
js a标签点击事件
2017/03/30 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
Python监控主机是否存活并以邮件报警
2015/09/22 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
python 实现按对象传值
2019/12/26 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
python属于解释语言吗
2020/06/11 Python
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
入党申请人的自我鉴定
2013/12/01 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
幼儿园春季开学寄语
2014/04/03 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
学习心理学心得体会
2016/01/22 职场文书
oracle数据库去除重复数据
2022/05/20 Oracle
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server