使用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 相关文章推荐
文件编码导致jquery失效的解决方法
Jun 26 Javascript
js图片处理示例代码
May 12 Javascript
javascript的动态加载、缓存、更新以及复用(一)
Jun 09 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
Apr 25 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
Oct 16 Javascript
javascript实现全角转半角的方法
Jan 23 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
基于JavaScript实现树形下拉框
Aug 10 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
Angular2学习笔记——详解路由器模型(Router)
Dec 02 Javascript
利用JavaScript写一个简单计算器
Nov 27 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
模仿OSO的论坛(三)
2006/10/09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
PHP中MD5函数使用实例代码
2008/06/07 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
基于php无限分类的深入理解
2013/06/02 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
window.ActiveXObject使用说明
2010/11/08 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
教导主任竞聘演讲稿
2014/05/16 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
导游词之日本富士山
2020/01/06 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android