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中strike()方法的使用
Jun 08 Javascript
js实现简单折叠、展开菜单的方法
Aug 28 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
Oct 08 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
详解Vue.js搭建路由报错 router.map is not a function
Jun 27 Javascript
解决vue打包项目后刷新404的问题
Mar 06 Javascript
javascript数组的定义及操作实例
Nov 10 Javascript
基于JavaScript实现表格隔行换色
May 08 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
Jun 05 Javascript
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
小程序卡片切换效果组件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
改造一台复古桌面收音机
2021/03/02 无线电
建立动态的WML站点(三)
2006/10/09 PHP
深入了解php4(1)--回到未来
2006/10/09 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
PHP反射实际应用示例
2019/04/03 PHP
JS target与currentTarget区别说明
2011/08/28 Javascript
Js nodeType 属性全面解析
2013/11/14 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Django REST framwork的权限验证实例
2020/04/02 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
惠普香港官方商店:HP香港
2019/04/30 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
幼儿园校车司机的岗位职责
2014/01/30 职场文书
个人求职信范文分享
2014/01/31 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
2014年网管工作总结
2014/12/11 职场文书
教师工作决心书
2015/02/04 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
Elasticsearch 基本查询和组合查询
2022/04/19 Python