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 相关文章推荐
jquery BS,dialog控件自适应大小
Jul 06 Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
js onclick事件传参讲解
Nov 06 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
基于JavaScript实现div层跟随滚动条滑动
Jan 12 Javascript
深入分析javascript中console命令
Aug 14 Javascript
AngularJS 执行流程详细介绍
Aug 18 Javascript
微信小程序 教程之数据绑定
Oct 18 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
Sep 07 Javascript
在小程序中推送模板消息的实现方法
Jul 22 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
一些php技巧与注意事项分析
2011/02/03 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
javascript常用方法总结
2015/05/14 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
原生js实现购物车
2020/09/23 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
利用Python如何生成随机密码
2016/04/20 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
PyQt5实现简单的计算器
2020/05/30 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
宿舍卫生检讨书
2014/01/16 职场文书
北京申奥口号
2014/06/19 职场文书
教师节学生演讲稿
2014/09/03 职场文书
校运动会广播稿300字
2014/10/07 职场文书
2014年党务工作总结
2014/11/25 职场文书