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 相关文章推荐
5款Javascript颜色选择器
Oct 25 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
生成二维码方法汇总
Dec 26 Javascript
js+html5实现canvas绘制简单矩形的方法
Jun 05 Javascript
详解JavaScript对象和数组
Dec 03 Javascript
javascript实现input file上传图片预览效果
Dec 31 Javascript
快速使用node.js进行web开发详解
Apr 26 Javascript
vue组件初学_弹射小球(实例讲解)
Sep 06 Javascript
webpack公共组件引用路径简化小技巧
Jun 15 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 Javascript
小程序:授权、登录、session_key、unionId的详解
May 15 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 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
基于empty函数的判断详解
2013/06/17 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
华为慧通面试题
2012/09/11 面试题
const和static readonly区别
2013/05/20 面试题
《她是我的朋友》教学反思
2014/04/26 职场文书
英语专业自荐书
2014/06/13 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
员工工作及收入证明
2014/10/28 职场文书
2014年库房工作总结
2014/11/26 职场文书
市级三好生竞选稿
2015/11/21 职场文书
2016国培研修心得体会
2016/01/08 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
python中super()函数的理解与基本使用
2021/08/30 Python
python实现会员管理系统
2022/03/18 Python