NiceFish(美人鱼)

前端有 3 个版本:

  • 浏览器环境
  • 移动端环境
  • Electron 环境

服务端有 2 个版本:

  • SpringBoot 版本(已实现基于 Apache Shiro 的 RBAC 权限控制)
  • SpringCloud 版本

1.主要依赖

名称版本描述
Angular16.2.0Angular 核心库。
PrimeNG16.2.0开源组件库。
Bootstrap5.2.3响应式布局。
ngx-bootstrap11.0.2基于 Bootstrap 的开源组件库。
echarts5.4.2来自百度的图形库。
ngx-echarts15.0.3基于 echarts 封装的 Angular 组件库。
ckeditor5-angular5.2.0富文本编辑器。
font-awesome4.7.0开源图标库。

注意:为了防止出现 NodeJS 模块兼容性问题,本项目在 package.json 中锁定了所有 Node 模块版本。如有需要,您可以自己测试兼容版本号(不建议这样做,因为会消耗掉大量的时间)。

2.启动项目

打开终端,依次执行以下命令:

git clone https://gitee.com/mumu-osc/NiceFish.git
cd NiceFish
npm i -g @angular/cli
npm i
ng serve

打开浏览器,访问 http://localhost:4200/

🚀🚀🚀 中文开发者:网络原因,推荐安装 nrm 来管理 npm 的 registry。

npm i -g nrm
nrm use taobao

这时候用 npm 安装 node 模块就会使用 taobao 提供的 registry 了。

3.在 Mock 版本和带服务端版本之间切换

为了方便前后端分离开发,本项目提供 2 种启动模式:

  • 带 mock 数据的启动模式:ng serve --configuration development-mock (或者直接 ng serve 启动,默认是 mock 模式),所有 mock 数据都在 src/mock-data 目录中,json 格式,与服务端接口返回的数据格式保持一致。
  • 访问真实的服务端接口的启动模式: ng serve --configuration development-backend (使用此模式启动需要有真实的服务端,把 proxy.config.json 中的服务端地址改成你自己的接口地址,NiceFish 提供了一个基于 SpringBoot 的服务端接口实现版本,

与启动环境有关的配置项在 environment.* 和 angular.json 中。

4.单元测试

执行以下命令进行单元测试:

ng test

默认使用 ChromeHeadless 执行单元测试,按照 CPU 核心数量并发执行测试用例,karmar.conf.js 配置方式参考了 VWware 的 Clarity 项目,

代码覆盖率报告:

关于单元测试的详细使用方法,以及 Jasmine 的语法

5.集成测试

Angular 从 v12 开始,官方废弃了原来的集成测试工具 Protractor (量角器),本项目已经切换到官方推荐的 Cypress 集成测试工具,执行以下命令启动集成测试:

ng e2e

 

6.构建

与开发状态对应,构建模式有 2 种:

  1. 构建开发环境(带 mock 数据,不访问服务端):ng build --configuration development-mock
  2. 构建带有服务端接口的开发环境(访问真实的服务端接口):ng build --configuration development-backend

如果需要在构建产物的 index.html 中出现 <base href="/NiceFish/"/>,请在以上命令后面加上参数: --base-href /NiceFish/

注意,这里的 NiceFish 是项目名,如果你把项目名改成了其它的,请把 NiceFish 改成你自己的项目名。

7.直接部署到 nginx

  1. 根据上一步的描述构建出最终产物。
  2. 安装好 nginx,把 dist/browser 目录下的所有内容拷贝到 nginx 的 html 目录下。
  3. 参考本项目根目录下的 nginx.conf 配置文件,修改配置(此项目中的默认配置用于 Docker 环境,在 Windows 平台下无法使用)。
  4. 重启 nginx。

8.部署到 Docker 环境

请依次执行以下命令(请不要使用我的 ID ,改成你自己的 Docker 平台 ID ):

  1. 构建镜像:sudo docker build -t damoqiongqiu/nice-fish .
  2. 查看镜像列表:sudo docker images
  3. 启动容器:sudo docker run -d -it -p 8080:80/tcp --name nice-fish damoqiongqiu/nice-fish:latest
  4. 查看运行中的容器:sudo docker ps -a
  5. 查看容器日志:docker logs --details CONTAINER_ID
  6. 进入容器:sudo docker exec -it CONTAINER_ID sh

9.打包分析

以下是用 webpack-bundle-analyzer 分析打包之后的模块构成:

看起来 CKEditor 和 ECharts 占了很大的体积,需要做一下异步加载。

webpack-bundle-analyzer 使用方法,请依次执行以下操作:

  1. npm i webpack-bundle-analyzer --save-dev
  2. package.json 的 scripts 配置里面加一行 "bundle-report": "webpack-bundle-analyzer dist/browser/stats.json"
  3. ng build --stats-json 编译(--stats-json 选项会生成一份 stats.json 配置文件)
  4. 执行 npm run bundle-report 查看打包过程

10.系列项目

NiceFish 的客户端项目:
NiceFish 的服务端项目:

11.关于 NodeJS 环境的常见坑点

  • 中文开发者:如果你使用 cnpm 来安装依赖,可能会导致某些包不一致,导致应用起不来,目前原因不明,需要 cnpm 官方来解决。(cnpm 不是单纯的加速节点,它做了很多自己的处理,包括对一些 C++ 编写的 Node 模块做了预编译缓存,因此用它安装的包可能和官方源不一致。这不是 Angular 框架的问题,所有前端框架都存在这个问题。)
  • 如果之前装过@angular/cli 需要先卸载:npm uninstall -g @angular/cli
  • 如果之前装过老版本的 angular-cli 需要先卸载:npm uninstall -g angular-cli
  • 如果你之前已经尝试用 npm install 安装过 node 模块,请手动把 NiceFish 根目录下的 node_moduels 目录删掉重新 npm install
  • 命令行删除 node_modules 速度更快,Windows 平台使用: rmdir /s/q node_modules ,*nix 平台使用:sudo rm -rf node_modules
  • 如果你遇到其它任何看起来比较玄幻的问题,请手动删掉 node_modules 目录,然后切换到 npm 官方源,重新安装所有 node 模块
  • 如果你需要把项目发布到其它类型的 Server 上,例如 Tomcat,需要对 Server 进行一些简单的配置才能支持 HTML5 下的 PushState 路由模式,在 How to: Configure your server to work with html5Mode 这个小节里面把常见的 WEB 容器的配置方式都列举出来了,包括:IIS、Apache、nginx、NodeJS、Tomcat 全部都有。(请注意,这个配置不是 Angular 所特有的,当前主流的 SPA 型前端框架都需要做这个配置。)

12.界面截图

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为ENSP:STP和链路聚合的管理与配置

这里将不再过度阐述STP和链路聚合的理论知识&#xff0c;不清楚的同学可以去观看Cisco文章中的理论知识 理论知识https://blog.csdn.net/2301_76341691/article/details/145166547?fromshareblogdetail&sharetypeblogdetail&sharerId145166547&sharereferPC&…

dl学习笔记:(4)简单神经网络

&#xff08;1&#xff09;单层正向回归网络 bx1x2z100-0.2110-0.05101-0.051110.1 接下来我们用代码实现这组线性回归数据 import torch x torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype torch.float32) z torch.tensor([-0.2, -0.05, -0.05, 0.1]) w torch.…

三、华为交换机 Hybrid

一、Hybrid功能 Hybrid口既可以连接普通终端的接入链路&#xff08;类似于Access接口&#xff09;&#xff0c;又可以连接交换机间的干道链路&#xff08;类似于Trunk接口&#xff09;。它允许多个VLAN的帧通过&#xff0c;并可以在出接口方向将某些VLAN帧的标签剥掉&#xff0…

Tensor 基本操作1 | PyTorch 深度学习实战

目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考&#xff1a;https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html 常用操作 unsqueeze 将多维数组解套&#xf…

Grafana系列之面板接入Prometheus Alertmanager

关于Grafana的仪表板Dashboard&#xff0c;以及面板Panel&#xff0c;参考Grafana系列之Dashboard。可以直接在面板上创建Alert&#xff0c;即所谓的Grafana Alert&#xff0c;参考Grafana系列之Grafana Alert。除了Grafana Alert外&#xff0c;面板也可接入Prometheus Alertma…

Windows 上安装 MongoDB 的 zip 包

博主介绍&#xff1a; 大家好&#xff0c;我是想成为Super的Yuperman&#xff0c;互联网宇宙厂经验&#xff0c;17年医疗健康行业的码拉松奔跑者&#xff0c;曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 近期专注&#xff1a; RPA应用研究&#xff0c;主流厂商产…

LeetCode 2266.统计打字方案数:排列组合

【LetMeFly】2266.统计打字方案数&#xff1a;排列组合 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-number-of-texts/ Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母&#xff0c;Alice 需要 按 对应字母 i 次&#xff0c…

PTA乙级1001~1005【c++】

首先讲解一下PTA乙级在哪里。PTA乙级题其实就是PAT (Basic Level) Practice &#xff08;中文&#xff09; 1001 害死人不偿命的(3n1)猜想 #include<iostream> using namespace std;int main() {int cnt 0;int n;cin >> n;while(n ! 1){cnt ;if (n & 1){n …

渗透笔记1

第一天 工具&#xff1a;cs cobalt strike 4.9 / msf kali &#xff08;自带 Ubuntu&#xff09; cs cobalt strike 4.9&#xff1a;server-client server部署在云服务器上&#xff0c;client分别在各地&#xff0c;与server相连接&#xff1b;连接上后就可以共享上线主机。…

用Python实现SVM搭建金融反诈模型(含调试运行)

1.概述 信用卡盗刷一般发生在持卡人信息被不法分子窃取后&#xff0c;复制卡片进行消费或信用卡被他人冒领后激活并消费等情况下。一旦发生信用卡盗刷&#xff0c;持卡人和银行都会遭受一定的经济损失。本节要运用支持向量机分类算法搭建一个金融反欺诈模型。 2.数据集 使用…

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置&#xff08;batch size 1&#xff09;&#xff1a; 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…

第6章 ThreadGroup详细讲解(Java高并发编程详解:多线程与系统设计)

1.ThreadGroup 与 Thread 在Java程序中&#xff0c; 默认情况下&#xff0c; 新的线程都会被加入到main线程所在的group中&#xff0c; main线程的group名字同线程名。如同线程存在父子关系一样&#xff0c; Thread Group同样也存在父子关系。图6-1就很好地说明了父子thread、父…

Python编程与在线医疗平台数据挖掘与数据应用交互性研究

一、引言 1.1 研究背景与意义 在互联网技术飞速发展的当下,在线医疗平台如雨后春笋般涌现,为人们的就医方式带来了重大变革。这些平台打破了传统医疗服务在时间和空间上的限制,使患者能够更加便捷地获取医疗资源。据相关报告显示,中国基于互联网的医疗保健行业已进入新的…

Linux网络_套接字_UDP网络_TCP网络

一.UDP网络 1.socket()创建套接字 #include<sys/socket.h> int socket(int domain, int type, int protocol);domain (地址族): AF_INET网络 AF_UNIX本地 AF_INET&#xff1a;IPv4 地址族&#xff0c;适用于 IPv4 协议。用于网络通信AF_INET6&#xff1a;IPv6 地址族&a…

1 行命令引发的 Go 应用崩溃

一、前言 不久前&#xff0c;阿里云 ARMS 团队、编译器团队、MSE 团队携手合作&#xff0c;共同发布并开源了 Go 语言的编译时自动插桩技术。该技术以其零侵入的特性&#xff0c;为 Go 应用提供了与 Java 监控能力相媲美的解决方案。开发者只需将 go build 替换为新编译命令 o…

Flink(十):DataStream API (七) 状态

1. 状态的定义 在 Apache Flink 中&#xff0c;状态&#xff08;State&#xff09; 是指在数据流处理过程中需要持久化和追踪的中间数据&#xff0c;它允许 Flink 在处理事件时保持上下文信息&#xff0c;从而支持复杂的流式计算任务&#xff0c;如聚合、窗口计算、联接等。状…

C#项目生成时提示缺少引用

问题描述 刚从git或svn拉取下来的C#项目&#xff0c;在VS生成时提示缺少引用 解决方案 1、从“管理NuGet程序包”中下载并安装缺少的引用&#xff0c;如果引用较多逐个下载安装会比较麻烦&#xff0c;建议采用下面第2种方案处理 2、通过命令对所有缺少引用进行安装 &#…

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成 1所有的材料都可以在EAMM: One-Shot Emotional Talking Face via Audio-Based Emotion-Aware Motion Model网站上找到。 摘要 尽管音频驱动的对话人脸生成技术已取得显著进展&#xff0c;但现有方法要么忽…

BeanFactory 是什么?它与 ApplicationContext 有什么区别?

谈到Spring&#xff0c;那势必要讲讲容器 BeanFactory 和 ApplicationContext。 BeanFactory是什么&#xff1f; BeanFactory&#xff0c;其实就是 Spring 容器&#xff0c;用于管理和操作 Spring 容器中的 Bean。可能此时又有初学的小伙伴会问&#xff1a;Bean 是什么&#x…

python实现pdf转word和excel

一、引言   在办公中&#xff0c;我们经常遇收到pdf文件格式&#xff0c;因为pdf格式文件不易修改&#xff0c;当我们需要编辑这些pdf文件时&#xff0c;经常需要开通会员或收费功能才能使用编辑功能。今天&#xff0c;我要和大家分享的&#xff0c;是如何使用python编程实现…