使用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 相关文章推荐
javascript:以前写的xmlhttp池,代码
May 18 Javascript
js 分栏效果实现代码
Aug 29 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
React父子组件间的传值的方法
Nov 13 Javascript
vue + element-ui的分页问题实现
Dec 17 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 Javascript
基于Vue SEO的四种方案(小结)
Jul 01 Javascript
详解如何构建一个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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
vue二级路由设置方法
2018/02/09 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
js实现筛选功能
2020/11/24 Javascript
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Python类继承和多态原理解析
2020/02/05 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python能做什么
2020/06/02 Python
Python如何进行时间处理
2020/08/06 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
python urllib和urllib3知识点总结
2021/02/08 Python
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
自我鉴定思想方面
2013/10/07 职场文书
写自荐信要注意什么
2013/12/26 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
Minikube搭建Kubernetes集群
2022/03/31 Servers
springcloud整合seata
2022/05/20 Java/Android
Python实现聚类K-means算法详解
2022/07/15 Python