使用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动态移动滚动条至底部示例代码
Apr 24 Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 Javascript
完美解决JS文件页面加载时的阻塞问题
Dec 18 Javascript
你可能不知道的前端算法之文字避让(inMap)
Jan 12 Javascript
详解js动态获取浏览器或页面等容器的宽高
Mar 13 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
谈谈IntersectionObserver懒加载的具体使用
Oct 15 Javascript
Postman内建变量常用方法实例解析
Jul 28 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
Feb 05 Javascript
JavaScript实现登录窗体
Jun 22 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/08/07 PHP
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
php调用C代码的实现方法
2014/03/11 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php中动态调用函数的方法
2015/03/16 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
js动态引入的四种方法
2018/05/05 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
Python模块包中__init__.py文件功能分析
2016/06/14 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python range实例用法分享
2020/02/06 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
MIS软件工程师的面试题
2016/04/22 面试题
化学教师教学反思
2014/01/17 职场文书
《梅花魂》教学反思
2014/04/30 职场文书
安全生产月活动总结
2014/05/04 职场文书
个人工作能力自我评价
2015/03/05 职场文书