Angular 多模块项目构建过程


Posted in Javascript onFebruary 13, 2020

引言

两个月前,已存在录题系统,需要构建出题系统,且两套系统存在公用的实体、组件以及服务,如何在构建新系统的同时复用原系统的代码成为了项目难点。

当时的解决方案是将两个系统放在一个应用里,并为该应用配置两套构建方案,当进行 ng serveng build 时,加载相应配置,动态构建出两套系统,从而解决了共享代码的问题。

现在再去看 Angular ,理解又不同了。

新的思想与理解都源于后端的思考,在构建后端项目时,为了实现代码复用,会构建多模块。

就像下图所示一样,通用的代码放在 CoreCommon 模块中,各业务模块依赖这两个模块,通过模块间依赖实现代码复用。

Angular 多模块项目构建过程

那么问题就来了,在 Angular 里,我们可不可以像后台一样去构建多模块项目,以达到复用的目的呢?

实现

参考学习

之前一直使用 Angular Multi Module 作为关键字进行搜索,结果查询出来的都是多模块惰性加载的文章,参考意义不大。

直到最近才发现之前搜索的关键字错误,应该是 Angular Multi Library And Application

具体学习请参考以下两篇文章:

ANGULAR WORKSPACES: MULTI-APPLICATION PROJECTS

创建库 - ANGULAR官方文档

初始化命令

创建一个 Angular 项目,其名为 angular-project ,不创建 Application ,不进行交互,跳过依赖的安装。

ng new angular-project
 --createApplication=false 
--interactive=false 
--skipInstall=true

生成库 common ,生成应用 sso ,跳过依赖的安装。

ng g library common
 --skipInstall=true
ng g application sso 
--style=scss 
--routing=true
 --skipInstall=true

安装依赖:

npm install 
--registry=https://registry.npm.taobao.org

项目结构

最终的项目结构长这样,所有模块位于 projects 目录下。

Angular 多模块项目构建过程

Angular Library 的结构如下,就像平常用的一样,也有 ModuleModule 中包含组件、服务等等。

Angular 多模块项目构建过程

同时我们开始反思之前用过的 ShareModule ,其实我们应该将其做成一个 Angular Library ,并将其发布到 npm 仓库,这样在多个项目之间快速移植公共模块也更高效快捷。

但是在开发过程中,共享模块可能有所改动,频繁发布就有些麻烦,如何直接引用本地的模块呢?

构建 common 库:

ng build common

如果该库频繁改动的话,可以添加监听参数,文件修改后自动构建:

ng build common --watch

命令执行后会在 dist 目录生成构建成功的 common 库。

Angular 多模块项目构建过程

使用起来就像我们使用的其他 Angular 库一样,直接 importWebStorm 会自动提示。

import 
{ 
CommonModule
 } 
from 'common';

测试

在业务模块中引入 CommonModule

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

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { CommonModule } from 'common';

@NgModule({
 declarations: [
  AppComponent
 ],
 imports: [
  BrowserModule,
  AppRoutingModule,
  CommonModule
 ],
 providers: [],
 bootstrap: [AppComponent]
})
export class AppModule { }

AppComponent 组件中使用 CommonModule 中的 CommonComponent

<h1>App Component HTML</h1> 
<lib-common></lib-common>

注:库组件生成的默认前缀是 lib

进入业务组件进行 ng serve ,成功。

Angular 多模块项目构建过程

总结

以上所述是小编给大家介绍的Angular 多模块项目构建过程,希望对大家有所帮助!

Javascript 相关文章推荐
javascript 短路法代码精简
Aug 20 Javascript
js几个验证函数代码
Mar 25 Javascript
纯JS代码实现气泡效果
May 04 Javascript
JS Ajax请求如何防止重复提交
Jun 13 Javascript
JS中使用FormData上传文件、图片的方法
Aug 07 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
jQuery 选择符详细介绍及整理
Dec 02 Javascript
微信小程序实现图片压缩功能
Jan 26 Javascript
vue中的过滤器及其时间格式化问题
Apr 09 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
Feb 13 #Javascript
JavaScript实现省市区三级联动
Feb 13 #Javascript
jquery传参及获取方式(两种方式)
Feb 13 #jQuery
JS实现页面数据懒加载
Feb 13 #Javascript
node.js中fs文件系统模块的使用方法实例详解
Feb 13 #Javascript
原生JS与JQ获取元素的区别详解
Feb 13 #Javascript
node.js中path路径模块的使用方法实例分析
Feb 13 #Javascript
You might like
新闻分类录入、显示系统
2006/10/09 PHP
推荐php模板技术[转]
2007/01/04 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
利用Python抓取行政区划码的方法
2016/11/28 Python
Python编程求质数实例代码
2018/01/31 Python
Django 自定义分页器的实现代码
2019/11/24 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
Python try except finally资源回收的实现
2021/01/25 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
员工考勤管理制度
2015/08/06 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书