UI5 快速入门教程

环境准备

node >16.8 ,VSCode,官方网址

开始

创建一个根文件夹,根文件中创建一个package.json文件

{"name": "quickstart-tutorial","private": true,"version": "1.0.0","author": "SAP SE","description": "UI5 Demo App - Quickstart Tutorial","scripts": {"start": "ui5 serve","build": "ui5 build"},"devDependencies": {"@ui5/cli": "^3"}
}

然后再创建一个webapp文件夹,文件夹中创建index.html文件

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>UI5快速入门教程</title><script id="sap-ui-bootstrap" src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" data-sap-ui-libs="sap.m" data-sap-ui-compat-version="edge" data-sap-ui-async="true" data-sap-ui-on-init="module:ui5/quickstart/index"data-sap-ui-resource-roots='{ "ui5.quickstart": "./" }'> </script>
</head>
<body class="sapUiBody" id="content"></body>
</html>
  • id="sap-ui-bootstrap":为 script 元素指定了一个 ID,可以在其他地方引用它。
  • src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js":指定了要加载的 JavaScript 文件的 URL,这里是 SAPUI5 库的 URL。
  • data-sap-ui-libs="sap.m":指定了要加载的 SAPUI5 库中的模块,这里是 sap.m,表示加载 SAPUI5 的移动设备模块。
  • data-sap-ui-compat-version="edge":指定了 SAPUI5 库的兼容版本,这里是使用最新版本。
  • data-sap-ui-async="true":指定了加载 SAPUI5 库的方式,这里是异步加载。
  • data-sap-ui-on-init="module:ui5/quickstart/index":指定了初始化完成后要执行的 JavaScript 模块。这里是 ui5/quickstart/index 模块。
  • data-sap-ui-resource-roots='{"ui5.quickstart": "./"}':指定了用于加载资源的根路径。这里是将 ui5.quickstart 映射到当前目录。

在webapp文件夹中,创建一个新文件index.js

sap.ui.define(["sap/m/Button","sap/m/MessageToast"
], (Button, MessageToast) => {"use strict";new Button({text: "Ready...",press() {MessageToast.show("Hello World!");}}).placeAt("content");});
  1. sap.ui.define([...], (Button, MessageToast) => {...}):这是 SAPUI5 提供的模块定义函数,用于定义一个模块。它接受两个参数:

    • 第一个参数是一个数组,包含了当前模块所依赖的其他模块。在这里,依赖了两个模块:"sap/m/Button""sap/m/MessageToast"

    • 第二个参数是一个回调函数,用于定义模块加载完成后的逻辑。回调函数的参数是对应依赖模块的引用,这里用 ButtonMessageToast 来引用两个模块。

  2. "use strict";:这是 JavaScript 的严格模式声明,启用严格模式可以帮助捕获一些常见的编码错误并使代码更加规范。

  3. new Button({...}):这里创建了一个新的 SAPUI5 Button 控件的实例,通过传入一个包含控件属性的对象来配置控件。在这里,配置了按钮的文本为 “Ready1…” 和按钮点击事件的处理函数。

  4. press() {...}:这是按钮的点击事件处理函数,使用了 ES6 的简写语法来定义一个匿名函数。

  5. MessageToast.show("Hello World!1");:这里调用了 SAPUI5 的 MessageToast 控件的 show() 方法来显示一条消息,消息内容为 “Hello World!1”。

  6. .placeAt("content"):这是 SAPUI5 控件的方法,用于将创建的控件实例添加到页面中的指定位置。在这里,将按钮控件添加到页面上 id 为 “content” 的元素中。

在 webapp 文件夹中创建新文件manifest.json;它也被称为“应用描述符”。

{"_version": "1.58.0","sap.app": {"id": "ui5.quickstart"}
}
  1. "_version": "1.58.0":这个属性指定了当前 JSON 结构的版本。它可能是用来确保读取和解析该 JSON 数据的应用程序具有兼容的功能。

  2. "sap.app":这是一个命名空间,用于指定应用程序的基本属性。

  3. "id": "ui5.quickstart":这个属性定义了应用程序的唯一标识符。在 SAPUI5 中,应用程序的 ID 在整个应用程序中应该是唯一的,它通常用于引用应用程序的资源或者在 SAP Fiori Launchpad 中注册应用程序。

修改index.js

sap.ui.define(["sap/ui/core/mvc/XMLView"
], (XMLView) => {"use strict";XMLView.create({viewName: "ui5.quickstart.App"}).then((oView) => oView.placeAt("content"));
});
  1. sap.ui.define([...], (XMLView) => {...}):这是 SAPUI5 提供的模块定义函数,用于定义一个模块。它接受两个参数:

    • 第一个参数是一个数组,包含了当前模块所依赖的其他模块。在这里,依赖了一个模块:"sap/ui/core/mvc/XMLView"

    • 第二个参数是一个回调函数,用于定义模块加载完成后的逻辑。回调函数的参数是对应依赖模块的引用,这里用 XMLView 来引用 XMLView 模块。

  2. XMLView.create({...}):这是 XMLView 模块提供的 create 方法,用于创建一个 XML 视图。它接受一个配置对象作为参数,指定了要创建的视图的相关信息。

    • viewName: "ui5.quickstart.App":在配置对象中指定了要创建的视图的名称为 “ui5.quickstart.App”。这表示要加载名为 “App.view.xml” 的 XML 视图文件,该文件位于 “ui5/quickstart” 目录下。
  3. .then((oView) => oView.placeAt("content")):这是一个 Promise 对象的链式调用,用于在视图创建成功后将其渲染到页面上的指定位置。

    • .then() 方法接收一个回调函数,当 Promise 对象状态变为 resolved(成功)时,该回调函数会被调用,并传入创建的视图实例 oView

    • 在回调函数中,调用了 oView.placeAt("content") 方法,将创建的视图实例渲染到页面上的 id 为 “content” 的元素中。

在webapp文件夹下面创建App.view.xml文件

<mvc:ViewcontrollerName="ui5.quickstart.App"displayBlock="true"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"><App><Page title="My App"><Buttontext="Steady..."press=".onPress"type="Emphasized"class="sapUiSmallMargin"/></Page></App>
</mvc:View>
  1. <mvc:View ...>:这个标签定义了一个 MVC(Model-View-Controller)架构中的视图(View)。它包含了一些视图的配置信息和 UI 元素。

    • controllerName="ui5.quickstart.App":指定了该视图所对应的控制器的名称为 “ui5.quickstart.App”。这意味着视图会与名为 “App.controller.js” 的控制器文件相关联。

    • displayBlock="true":设置了视图的显示方式为块级显示(display: block),这意味着视图会占据父容器的整个空间。

    • xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc":这些属性定义了 XML 命名空间,其中 "sap.m" 命名空间用于引用 SAPUI5 的移动设备库中的 UI 控件,而 "sap.ui.core.mvc" 命名空间用于引用 MVC 相关的元素。

  2. <App>...</App>:这是一个自定义的 XML 元素,可能是用于组织视图中的内容。它包含了一个页面(Page)作为子元素。

  3. <Page ...>:这个标签定义了一个页面,它是 SAPUI5 中常用的容器控件,用于包裹其他 UI 元素,并提供标题、内容布局等功能。

    • title="My App":指定了页面的标题为 “My App”。
  4. <Button .../>:这个标签定义了一个按钮控件,并设置了一些属性和事件处理器。

    • text="Steady...":设置了按钮的文本为 “Steady…”。

    • press=".onPress":指定了按钮的点击事件处理器为控制器中的 “onPress” 方法。这个方法会在按钮被点击时被调用。

    • type="Emphasized":设置了按钮的类型为 “Emphasized”,表示它具有强调的样式。

    • class="sapUiSmallMargin":添加了一个 CSS 类,用于设置按钮的样式,这里是一个 SAPUI5 预定义的类,用于添加一些边距效果。

在webapp 文件夹下面创建App.controller.js文件

sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast"
], (Controller, MessageToast) => {"use strict";return Controller.extend("ui5.quickstart.App", {onPress() {MessageToast.show("Hello App!");}});
});
  1. sap.ui.define([...], (Controller, MessageToast) => {...}):这是 SAPUI5 提供的模块定义函数,用于定义一个模块。它接受两个参数:

    • 第一个参数是一个数组,包含了当前模块所依赖的其他模块。在这里,依赖了两个模块:"sap/ui/core/mvc/Controller""sap/m/MessageToast"

    • 第二个参数是一个回调函数,用于定义模块加载完成后的逻辑。回调函数的参数是对应依赖模块的引用,这里用 ControllerMessageToast 来引用两个模块。

  2. return Controller.extend("ui5.quickstart.App", {...}):这是通过控制器基类的 extend 方法来创建一个新的控制器。extend 方法接受两个参数:

    • 第一个参数是控制器的名称,这里是 “ui5.quickstart.App”。这个名称与 XML 视图文件中指定的控制器名称一致,确保视图与控制器正确关联。

    • 第二个参数是一个对象,包含了控制器的方法和属性。在这里,只定义了一个方法 onPress(),用于处理按钮点击事件。

  3. onPress() {...}:这是控制器中定义的一个方法,用于处理按钮点击事件。当按钮被点击时,会调用 MessageToast.show("Hello App!") 方法,显示一个消息提示框,内容为 “Hello App!”。

修改index.html

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>UI5快速入门教程</title><script id="sap-ui-bootstrap" src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" data-sap-ui-libs="sap.m,sap.ui.layout,sap.tnt" data-sap-ui-compat-version="edge" data-sap-ui-async="true" data-sap-ui-on-init="module:ui5/quickstart/index"data-sap-ui-resource-roots='{ "ui5.quickstart": "./" }'> </script>
</head>
<body class="sapUiBody" id="content"></body>
</html>

data-sap-ui-libs 添加sap.ui.layout,sap.tnt 两个库

  • sap.m: 这个参数表示添加 SAPUI5 的移动设备库(sap.m),它包含了用于移动设备的 UI 控件和样式。
  • sap.tnt: 这个参数表示添加 SAPUI5 的工具和导航库(sap.tnt),它包含了用于工具条和导航的 UI 控件和样式。
  • sap.ui.core: 这个参数表示添加 SAPUI5 的核心库(sap.ui.core),它包含了 SAPUI5 应用程序运行所需的核心功能和类。
  • sap.ui.layout: 这个参数表示添加 SAPUI5 的布局库(sap.ui.layout),它包含了用于布局管理的 UI 控件和样式。
  • themelib_sap_horizon: 这个参数表示添加 SAPUI5 的主题库(themelib_sap_horizon),它包含了 Horizon 主题的样式和资源。

修改App.view.xml

<mvc:ViewcontrollerName="ui5.quickstart.App"displayBlock="true"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"xmlns:l="sap.ui.layout"xmlns:core="sap.ui.core"xmlns:tnt="sap.tnt"><App id="app"><Page title="My App"><Buttonicon="sap-icon://sap-ui5"text="Go!"press=".onPress"type="Emphasized"class="sapUiSmallMargin"/></Page><Page id="intro" title="Create Enterprise-Ready Web Apps with Ease"><l:BlockLayout background="Light"><l:BlockLayoutRow><l:BlockLayoutCell><core:Icon color="#1873B4" src="sap-icon://sap-ui5" size="20rem" class="sapUiMediumMarginBottom" width="100%"/><Title level="H1" titleStyle="H1" text="This is UI5!" width="100%" textAlign="Center"/></l:BlockLayoutCell></l:BlockLayoutRow><l:BlockLayoutRow><l:BlockLayoutCell><FlexBox items="{/features}" justifyContent="Center" wrap="Wrap" class="sapUiSmallMarginBottom"><tnt:InfoLabel text="{}" class="sapUiSmallMarginTop sapUiSmallMarginEnd"/></FlexBox></l:BlockLayoutCell></l:BlockLayoutRow><l:BlockLayoutRow><l:BlockLayoutCell><Panel headerText="Are you ready?" expandable="true"><Switch change=".onChange" customTextOn="yes" customTextOff="no"/><l:HorizontalLayout id="ready" visible="false" class="sapUiSmallMargin"><Text text="Ok, let's get you started!" class="sapUiTinyMarginEnd"/><Link text="Learn more" href="https://sdk.openui5.org/"/></l:HorizontalLayout></Panel></l:BlockLayoutCell></l:BlockLayoutRow></l:BlockLayout></Page></App>
</mvc:View>
  1. <mvc:View ...>:这个标签定义了一个 SAPUI5 视图。其中的 mvc 命名空间用于引用 SAPUI5 的 MVC(Model-View-Controller)相关元素。
    • controllerName="ui5.quickstart.App":指定了该视图所对应的控制器的名称为 “ui5.quickstart.App”。这意味着视图会与名为 “App.controller.js” 的控制器文件相关联。
    • displayBlock="true":设置了视图的显示方式为块级显示(display: block),这意味着视图会占据父容器的整个空间。
    • xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" xmlns:l="sap.ui.layout" xmlns:core="sap.ui.core" xmlns:tnt="sap.tnt":这些属性定义了 XML 命名空间,用于引用 SAPUI5 中的 UI 控件和布局元素。
  2. <App id="app">...</App>:这是一个自定义的 XML 元素,可能是用于组织视图中的内容。它包含了两个页面(Page)作为子元素,其中一个页面有一个按钮。
  3. 第一个页面:
    • <Page title="My App">...</Page>:这个标签定义了一个页面,并设置了页面的标题为 “My App”。
    • <Button .../>:这个标签定义了一个按钮控件,并设置了一些属性和事件处理器。
  4. 第二个页面:
    • <Page id="intro" title="Create Enterprise-Ready Web Apps with Ease">...</Page>:这个标签定义了另一个页面,并设置了页面的标题为 “Create Enterprise-Ready Web Apps with Ease”。这个页面包含了一些更复杂的布局和控件。
    • <l:BlockLayout>:这个标签定义了一个块布局(BlockLayout),用于将页面内容分块显示。
    • <l:BlockLayoutRow>...</l:BlockLayoutRow>:这个标签定义了一个块布局行(BlockLayoutRow),用于将内容分行显示。
    • <l:BlockLayoutCell>...</l:BlockLayoutCell>:这个标签定义了一个块布局单元格(BlockLayoutCell),用于将内容放置在块布局行中。
    • <Panel ...>...</Panel>:这个标签定义了一个面板(Panel),用于显示一个可折叠的区域,并包含了一个开关(Switch)和一些其他控件。
    • <Switch .../>:这个标签定义了一个开关控件,用于切换某些状态。
    • <l:HorizontalLayout ...>...</l:HorizontalLayout>:这个标签定义了一个水平布局(HorizontalLayout),用于将一些文本和链接水平排列显示。
    • <Text .../>:这个标签定义了一个文本控件,用于显示一些静态文本。
    • <Link .../>:这个标签定义了一个链接控件,用于显示一个可点击的链接。

修改App.controller.js

sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast","sap/ui/model/json/JSONModel"
], (Controller, MessageToast, JSONModel) => {"use strict";return Controller.extend("ui5.quickstart.App", {onPress() {MessageToast.show("Hello UI5!");this.byId("app").to(this.byId("intro"));},onInit() {this.getView().setModel(new JSONModel({features: ["Enterprise-Ready Web Toolkit","Powerful Development Concepts","Feature-Rich UI Controls","Consistent User Experience","Free and Open Source","Responsive Across Browsers and Devices"]}));},onChange(oEvent) {const bState = oEvent.getParameter("state");this.byId("ready").setVisible(bState);}});
});
  1. sap.ui.define([...], (Controller, MessageToast, JSONModel) => {...}):这是 SAPUI5 提供的模块定义函数,用于定义一个模块。它接受三个参数:

    • 第一个参数是一个数组,包含了当前模块所依赖的其他模块。在这里,依赖了三个模块:"sap/ui/core/mvc/Controller""sap/m/MessageToast""sap/ui/model/json/JSONModel"

    • 第二个参数是一个回调函数,用于定义模块加载完成后的逻辑。回调函数的参数是对应依赖模块的引用,这里用 ControllerMessageToastJSONModel 来引用三个模块。

  2. return Controller.extend("ui5.quickstart.App", {...}):这是通过控制器基类的 extend 方法来创建一个新的控制器。extend 方法接受两个参数:

    • 第一个参数是控制器的名称,这里是 “ui5.quickstart.App”。这个名称与 XML 视图文件中指定的控制器名称一致,确保视图与控制器正确关联。

    • 第二个参数是一个对象,包含了控制器的方法和属性。在这里,定义了三个方法:onPressonInitonChange

  3. onPress() {...}:这个方法用于处理按钮点击事件。当按钮被点击时,会显示一个消息提示框,内容为 “Hello UI5!”,然后通过 this.byId("app").to(this.byId("intro")) 将视图中的名为 “app” 的导航容器(通常是一个 sap.m.NavContainer 控件)导航到名为 “intro” 的页面。

  4. onInit() {...}:这个方法用于视图初始化。在这里,通过 this.getView().setModel(...) 方法为视图设置了一个 JSON 数据模型,用于存储一些功能特性的信息。

  5. onChange(oEvent) {...}:这个方法用于处理开关控件的状态改变事件。根据事件的参数,控制页面中名为 “ready” 的布局元素的可见性。
    在这里插入图片描述

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

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

相关文章

【JavaWeb】Day51.Mybatis动态SQL

什么是动态SQL 在页面原型中&#xff0c;列表上方的条件是动态的&#xff0c;是可以不传递的&#xff0c;也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中&#xff0c;我们会看到&#xff0c;我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

flutter 实现表单的封装包含下拉框和输入框

一、表单封装组件实现效果 //表单组件 Widget buildFormWidget(List<InputModel> formList,{required GlobalKey<FormState> formKey}) {return Form(key: formKey,child: Column(children: formList.map((item) {return Column(crossAxisAlignment: CrossAxisAlig…

java优先级队列(堆)详解

一、优先级概念 什么是优先级&#xff1a;比如女士优先&#xff0c;个子低的优先排到前面去&#xff0c;有一部分数据具备优先级&#xff0c;要以优先级的顺序将顺序存储起来。 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#…

Java:String类

目录 1.String类的重要性2.String对象的比较2.1 比较是否引用同一个对象2.2 boolean equals(Object anObject) 方法&#xff1a;按照字典序比较2.3int compareTo(String s)方法: 按照字典序进行比较2.4 boolean equalsIgnoreCase(Object anObject)方法&#xff1a;忽略大小写的…

word批量修改表格样式

利用宏&#xff0c;批量选中表格&#xff0c;然后利用段落和表设计来操作。 利用宏&#xff0c;批量选中表格&#xff0c;参考百度安全验证段落&#xff0c;表格里面的内容有空格&#xff0c;应该是有缩进&#xff0c;在段落中去掉缩进&#xff0c;即缩进-特殊&#xff0c;选择…

node的事件循环

异步同步啥的就不多说了&#xff0c;直接看node中有哪些是异步 其中灰色部分和操作系统有很大的关系&#xff0c;就不多说了&#xff0c;其中定时器属于timers队列&#xff0c;I/O操作属于poll队列&#xff0c;setImmediate属于check队列&#xff0c;其中nextTick和promise不属…

【Java IO】那字节流和字符流有什么区别?

&#x1f331;以贴近现实的【面试官面试】形式涵盖大部分Java程序员需要掌握的后端知识、面试问题&#xff0c;系列博客收录在我开源的JavaGetOffer中&#xff0c;会一直完善下去&#xff0c;希望收到大家的 ⭐️ Star ⭐️支持&#xff0c;这是我创作的最大动力&#xff1a; h…

2024团体程序设计天梯赛L1-101 别再来这么多猫娘了!

题目链接L1-101 别再来这么多猫娘了&#xff01; #include<iostream> #include<stdio.h> #include<string.h> #include<string> #include<algorithm> using namespace std; string s[105], text; int n, k, ans, a[5005];int main() { // ios::s…

第21天:信息打点-公众号服务Github监控供应链网盘泄漏证书图标邮箱资产

第二十一天 一、开发泄漏-Github监控 1.短期查看 1.密码搜索 根据攻击目标的域名在GitHub上进行搜索密码&#xff0c;如果目标网站的文件与搜索到的源码相关&#xff0c;那就可以联想目标网站是否使用这套源码进行开发 原理就是开发者在上传文件的时候忘记更改敏感文件或者…

利用FFmpeg 转换课程vtt 字幕到 srt字幕

字幕转换工具 经常学习udemy 视频课程的&#xff0c;可能知道&#xff0c;从网络下载的udemy 课程文件里面有时候字幕是vtt 格式的&#xff0c;有时候想导入到百度网盘里面&#xff0c;怎奈百度网盘&#xff0c;不支持vtt 字幕格式。有字幕的时候&#xff0c;会比较好多了。既可…

【机器学习】《ChatGPT速通手册》笔记

文章目录 第0章 前言第1章 ChatGPT的由来&#xff08;一&#xff09;自然语言处理任务&#xff08;二&#xff09;ChatGPT所用数据数据大小&#xff08;三&#xff09;ChatGPT的神经网络模型有175亿个参数&#xff08;四&#xff09;模型压缩 方案 第2章 ChatGPT页面功能介绍&a…

日期相关的题目

日期相关的题目 1. 计算日期到天数转换2. 日期累加3. 打印日期4. 日期差值 1. 计算日期到天数转换 输出示例: 思路&#xff1a;计算前n-1个月的天数在加上这个月的天数。 #include <iostream> using namespace std;int main() {int year, month, day;cin >> yea…

llama2 与 llama3比较

Llama 3 刚刚在4月18号推出&#xff0c;距 Llama 2 发布正好 9 个月。它已经可以在 Meta 网站上进行聊天&#xff0c;可以从 Huggingface 以 safetensors 或 GGUF 格式下载。 llama 2 与 llama3 比较 1. 模型输出&#xff08;model output&#xff09; llama 2 输出只能是文本…

const成员函数 以及 取地址及const取地址操作符重载

目录 const成员函数 结论&#xff1a; 取地址及const取地址操作符重载 const成员函数 将const 修饰的 “ 成员函数 ” 称之为 const成员函数 &#xff0c; const 修饰类成员函数&#xff0c;实际修饰该成员函数的&#xff08;*this&#xff09; &#xff0c;表明在该成员函数…

网络原理-IP协议

一、IP协议报头 版本号:用来表示IP协议的版本,现在常用的IP协议有两个版本,IPv4和IPv6&#xff0c;其他版本可能只存在于实验室中&#xff0c;并没有被广泛的使用。 首部长度:用来表示IP报头的长度,因为存在"选项"字段&#xff0c;所以IP报头是可变长的,此处单位为4…

日期类的实现

目录 Date.h Test.cpp 测试代码Test.cpp 日期类的实现 代码分享 Date.h #pragma once #include<iostream> using namespace std; #include<assert.h>class Date {//友元函数声明friend ostream& operator<<(ostream& out, Date& d);friend…

[渗透测试学习] Headless-HackTheBox

Headless-HackTheBox 信息搜集 使用nmap扫描一下 nmap -sV -sC -v --min-rate 1000 10.10.11.8可以发现5000端口是开放的,继续扫一下目录 访问/dashboard发现只有admin才可以,我们注意到cookie值为JWT加密,拿到揭秘网站验证下猜想 cookie为user用户,那么我们要想访问必须…

[阅读笔记29][AgentStudio]A Toolkit for Building General Virtual Agents

这篇论文是24年3月提交的&#xff0c;提出了一个用于agent开发的全流程工具包。 作者提到目前agent开发主要有两个阻碍&#xff0c;一个是缺乏软件基础&#xff0c;另一个是缺乏在真实世界场景中进行评估。针对这两个阻碍&#xff0c;作者涉及了一个开发工具包&#xff0c;包括…

[已解决]react打包部署

react打包部署 问题 npm install 命令无反应 思路 换成 yarn install 安装完hadoop的环境后&#xff0c;使用node的yarn会报错&#xff1a; 我们在cmd使用where yarn&#xff0c;如下&#xff1a; 看你想保留哪一个&#xff0c;我平时node用的多&#xff0c;就把hadoop的y…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…