使用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 相关文章推荐
网页的标准,IMG不支持onload标签怎么办
Jun 29 Javascript
javascript的onchange事件与jQuery的change()方法比较
Sep 28 Javascript
DOM_window对象属性之--clipboardData对象操作代码
Feb 03 Javascript
SeaJS 与 RequireJS 的差异对比
Dec 08 Javascript
基于jQuery实现复选框是否选中进行答题提示
Dec 10 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
基于jQuery实现仿百度首页选项卡切换效果
May 29 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
Jun 22 Javascript
基于zepto.js实现登录界面
Oct 09 Javascript
vue prop属性传值与传引用示例
Nov 13 Javascript
node.js如何操作MySQL数据库
Oct 29 Javascript
Javascript 解构赋值详情
Nov 17 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 分页类 扩展代码
2009/06/11 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
php rsa加密解密使用详解
2015/01/14 PHP
php字符串函数学习之substr()
2015/03/27 PHP
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
ptyhon实现sitemap生成示例
2014/03/30 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
对于Python深浅拷贝的理解
2019/07/29 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
经理职责范文
2013/11/08 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL