讲一下初始化angular13 + spring boot 2.7 的流程,以及遇到的问题。
Angular初始化
安装Node.js
查看你的电脑是否安装了node.js
, 若没有可以去https://nodejs.org/zh-cn/安装。我们将用其下的npm来安装一些软件.
转到终端并输入node -v
, 可以看到你安装的node -v 版本。
安装Angular CLI
运行npm install -g @angular/cli
可以以安装 Angular CLI,
或者执行 npm i @angular/cli@^13.0.0
以安装特定版本的CLI。
然后输入ng version
以检查它正确地安装到了电脑上。
创建Angular项目
首先在终端中进入你选择的目录, 然后运行ng new
来创建一个Anagular项目
创建好的目录如下图
在Angular 项目目录中打开一个终端会话,然后运行以在ng serve
中构建和运行应用程序。应该在终端中看到此编译成功消息。
期间遇到的问题
1. 版本不对
其实在创建的时候用的是angluar12的版本,
但是在后面想添加某一个组件的时候,
报错The package that you are trying to add does not support schematics.
后来查看官网得知后来发现这个组件需要的是的是angular13的版本,于是重新创建使用angular13版本。
这也提醒我们要注意所使用的组件的适配版本。
2. Jasmine tests单元测试为空
但是我在控制台中打印当前组件的htmlElement元素,是可以看到正常打印的
可以看到正确打印了htmlElement元素,说明渲染是成功的。但是页面仍然没有显示。
后来发现在 Angular 13
中,他们为测试引入了一个新的优化特性:
来自https://blog.angular.io/angul...
我们对 TestBed 进行了一些重要的改进,现在可以更好地在每次测试后拆除测试模块和环境。现在,每次测试后都会清理 DOM,开发人员可以期待更快、更少内存密集、更少相互依赖和更优化的测试。
原因是每次测试的时候会清理DOM,导致页面没有显示。
解决方法:添加 teardown: { destroyAfterEach: false }
,如下第9行的内容。
1 beforeEach(async () => {
2 await TestBed.configureTestingModule({
3 declarations: [],
4 imports: [
5 IndexModule,
6 HttpClientModule,
7 RouterTestingModule
8 ],
9 teardown: { destroyAfterEach: false } +
10 })
11 .compileComponents();
12 });
就可以退出这个模式。
感想:
事实上我觉得使用fit的时候很有必要查看页面渲染的内容,但是angular13直接一刀切了。
如果加一个设置,全局打开/关闭 这个模式,这样全局单元测试的时候清理DOM,使用fit的时候就不清理。 两全其美多好。
Spring Boot 初始化
JDK 和 Maven
首先确保你的电脑安装了JDK
和Maven
, 命令如下。
若没有安装,可以参考安装
https://www.kancloud.cn/yunzh...
初始化Sring boot 项目
前往https://start.spring.io
可以选择需要的版本,这里选择的是2.7.1
, 以及java8
版本。
最后点击Generate the project 生成项目将其下载的任意自己喜欢的文件夹,下载成后解压
这里我解压成名为api的文件夹,与angular项目放在同一个目录下。
之后可以看到运行项目成功的结果
遇到的问题
在开始的时候本来是用的最新版本的spring boot ,选择了3.0.0(M3)
版本, 并根据项目要求使用的是java8
。
但之后运行的时候报错: invalid target release 17
接下来找了半天问题。
最后找到了pom.xml
文件。发现它指的是java verison 的17,无法解析。
但是一想:我刚才初始化的不是用的是java8吗,怎么变17了。
之后参考以前的项目,发现用java8, 里面要填成1.8
再运行发现了新的错误: class file has wrong version。
然后又改了几次,仍然不行。然后就猜想是 spring boot 版本的问题,
之后再运行,没有报错,而且pom.xml也是我选择的1.8。 解决问题。
可能java8 不适合3.0.0版本的spring boot 。
总结:
这次初始化中遇到版本的问题比较多,但是这也是很正常的问题。再加上以前的初始化的经验,这次解决问题的速度快了很多。总之熟能生巧,多经历多解决。