当前位置: 首页 > news >正文

【npm】前端工程项目配置文件package.json详解

简言

详细介绍了package.json中每个字段的作用。

package.json

本文档将为您介绍 package.json 文件的所有要求。它必须是实际的 JSON,而不仅仅是 JavaScript 对象文字。
如果你要发布你的项目,这是一个特别重要的文件,其中name和version是发布时的必要字段,两者组成发布包的唯一性。

字段描述

npm init 后默认字段如下:
在这里插入图片描述
我们可以按指定规则修改这个json文件。

name

name 是指软件包名
命名规则:

  • 名称必须小于或等于 214 个字符。这包括范围软件包的范围。
  • 作用域软件包的名称可以以点或下划线开头。如果没有作用域,则不允许这样做。
  • 新软件包名称中不能有大写字母。
  • 名称最终会成为 URL、命令行参数和文件夹名称的一部分。因此,名称中不能包含任何非 URL 安全字符。
  • 名称可选择以作用域作为前缀,例如 @myorg/mypackage。

提示:

  • 不要使用与 Node 核心模块相同的名称。
  • 不要在名称中使用 "js "或 “node”。因为你编写的是 package.json 文件,所以我们假定它是 js,你可以使用 "引擎 "字段指定引擎。(见下文)。
  • 该名称可能会作为参数传递给 require(),因此应该简短,但也要有合理的描述性。
  • 你可能需要检查一下 npm 注册表,看看是否已经有使用该名称的软件,以免过于依赖它。https://www.npmjs.com/

这是发布包的注意事项,如果你的项目不准备分享发布,则无所谓,建议和你项目相同。

version

指发布包版本号,x.x.x的形式。
版本必须能被 node-semver 解析,node-semver 作为依赖项与 npm 捆绑。(npm install semver 可自行使用)。
命名版本号建议遵循版本语义规范,:

代码状态阶段规则示例
首次发布新项目从 1.0.0 开始1.0.0
向后兼容的错误修复补丁发布递增第三个数字,相当于修改了bug,小改动1.0.1
向后兼容的新功能小版本递增中间数位,并将最后一位数重置为零,例如增加了新功能1.1.0
破坏向后兼容性的更改主要版本将第一位数字递增,并将中间和最后一位数字重置为零,破坏性重大更新,改动很大2.0.0

description

项目描述。
这是一个字符串。这有助于人们发现你的软件包,因为它会在 npm 搜索中列出。

keywords

项目关键字
这是一个字符串数组。这有助于人们在 npm 搜索中发现你的软件包。

homepage

项目主页的网址。
你可以写你git仓库readme地址,例如:

"homepage": "https://github.com/owner/project#readme"

bugs

项目问题跟踪器的网址和/或报告问题的电子邮件地址。这些信息对遇到软件包问题的人很有帮助。

{"bugs": {"url": "https://github.com/owner/project/issues","email": "project@hostname.com"}
}

您可以指定一个或两个值。如果只想提供一个 url,可以将 "bugs "的值指定为一个简单的字符串,而不是一个对象。

如果提供了 url,npm bugs 命令将使用该 url。

license

开源声明许可
您应指定软件包的许可证,以便人们知道他们可以如何使用该软件包,以及您对其设置的任何限制。
单个:

{"license": "BSD-3-Clause"
}

多个:

{"license": "(ISC OR GPL-3.0)"
}

不要任何开源许可:

{"license": "UNLICENSED"
}

author

项目作者名
包含一个 "姓名 "字段以及可选的 "url "和 “电子邮件”,就像这样:

{"name": "Barney Rubble","email": "b@rubble.com","url": "http://barnyrubble.tumblr.com/"
}

可以简写:

{"author": "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"
}

contributors

"贡献者 "是一个作者数组,规则和author一样。

private

为true代表是私有的项目
如果在 package.json 中设置 “private”:true,那么 npm 将拒绝发布它。

main

入口文件
main 字段是一个模块 ID,它是程序的主要入口。也就是说,如果你的软件包名为 foo,用户安装后执行 require(“foo”) 命令,就会返回主模块的 exports 对象。

这应该是一个相对于软件包文件夹根目录的模块。

对于大多数模块来说,最合理的做法是有一个主脚本,而通常没有太多其他脚本。

如果未设置 main,则默认为软件包根目录下的 index.js。

browser

如果您的模块要在客户端使用,则应使用browser字段而不是main字段。这有助于提示用户,该模块可能依赖于 Node.js 模块中不可用的模块。(例如 window)

config

配置 "对象可用于设置软件包脚本中使用的配置参数,这些参数会在升级过程中持续存在。例如,如果一个软件包有以下配置:

{"name": "foo","config": {"port": "8080"}
}

scripts

运行命令集合(字典)
脚本 "属性是一个字典,包含在软件包生命周期的不同时间运行的脚本命令。键是生命周期事件,值是在该时刻运行的命令。

package.json 文件的 "scripts "属性支持大量内置脚本、预设生命周期事件以及任意脚本。这些脚本都可以通过运行 npm run-script 或 npm run 来执行。名称匹配的前置和后置命令也会被执行(例如 premyscript、myscript、postmyscript)。使用 npm explore – npm run 可以运行来自依赖项的脚本。
例如:

{"scripts": {"precompress": "{{ executes BEFORE the `compress` script }}","compress": "{{ run command to compress files }}","postcompress": "{{ executes AFTER `compress` script }}"}
}
npm run compress

有一个默认的 npm start命令,它会执行根目录的server文件,可以修改它。
后面路径写法:
命令行脚本 + 执行文件path + 参数

  • 可执行命令行脚本: 可以是全局的可执行bash脚本,也可一是依赖包目录下(node_modules/.bin)的bash脚本。
  • 执行文件 : 脚本运行的目标文件。
  • 参数: 参数使用 – 传递–前缀标志和选项,否则 npm 将对其进行解析。例如
node index.js --path=123

或者

npm run test -- --grep="pattern"

参数用 process.argv接收。

dependencies

生产依赖关系对象,对象内的所有依赖在正式发布打包时包含在内
依赖关系在一个简单对象中指定,该对象将软件包名称映射到版本范围。版本范围是一个字符串,包含一个或多个空格分隔的描述符。依赖关系也可以用 tar 包或 git URL 来标识。
依赖格式如下:

  • version : 必须与版本完全匹配
  • >version : 必须大于该版本,例如:>1.0.0,则依赖要比1.0.0版本大。
  • >=version :大于等于~
  • <version : 必须小于该版本
  • <=version:小于等于该版本
  • ~version:“大致相当于当前版本”,只接受小版本(第三个数变动)向后变动,1.0.x。
  • ^version:“与版本兼容”,只接受第2个数,第三个数变动,1.x.x
  • 1.2.x : 1.2.0、1.2.1 等,但不包括 1.3.0
  • http://… : 作为依赖项的 URL
    • 或者"" : 与任何版本匹配
  • version1 - version2 : version1到version2范围内,>=version1 <=version2
  • range1 || range2 :如果满足范围 1 或范围 2,则通过。
  • git… : 将 Git URL 作为依赖项,这个形式有点多,例如:git+ssh://git@github.com:npm/cli.git#v1.0.27
    git+ssh://git@github.com:npm/cli#semver:^5.0
    git+https://isaacs@github.com/npm/cli.git
    git://github.com/npm/cli.git#v1.0.27
  • tag : 可以时发布的标记版本,例如latest,代表最新版本
  • path/path/path : 本地项目依赖路径。

devDependencies

本地开发环境依赖、项目构建、和测试依赖的存放目录
在发布正式生产包时不会包含在内。
如果有人打算下载并在其程序中使用您的模块,那么他们可能不希望或不需要下载并构建您使用的外部测试或文档框架。

在这种情况下,最好将这些附加项目映射到 devDependencies 对象中。

peerDependencies

项目的同行依赖,也可以说项目在这些依赖的基础上创造,所以别人下载你的包会同时下载peerDependencies下的依赖包。

peerDependenciesMeta

同行依赖可选版本,可配置依赖是否可选。

{"name": "tea-latte","version": "1.3.5","peerDependencies": {"tea": "2.x","soy-milk": "1.2"},"peerDependenciesMeta": {"soy-milk": {"optional": true}}
}

bundleDependencies

打包依赖,定义了一个依赖数组,将在发布项目时将其中的依赖打包在一起。

如果需要在本地保存 npm 软件包,或通过单个文件下载来获得它们,可以通过在 bundleDependencies 数组中指定软件包名称并执行 npm pack,将软件包捆绑到一个压缩包文件中。

{"name": "awesome-web-framework","version": "1.0.0","bundleDependencies": ["renderized", "super-streams"]
}

我们可以通过运行 npm pack 获取 awesome-web-framework-1.0.0.tgz 文件。该文件包含依赖包 renderized 和 super-streams,执行 npm install awesome-web-framework-1.0.0.tgz 即可将其安装到新项目中。请注意,软件包名称中不包含任何版本,因为这些信息已在依赖项中指定。

overrides

依赖覆盖
如果需要对依赖包的依赖项进行特定更改,例如替换存在已知安全问题的依赖包版本、用分叉包替换现有依赖包,或确保所有地方都使用相同版本的软件包,则可以添加overrides。
重载提供了一种方法,可将依赖树中的软件包替换为另一个版本,或完全替换为另一个软件包。
例如:

{"overrides": {"foo": "1.0.0"}
}

无论什么情况foo的版本都是1.0.0
可以嵌套覆盖,表示baz的子代bar,bar版本2.0.0的子代foo设置为1.0.0:

{"overrides": {"baz": {"bar@2.0.0": {"foo": "1.0.0"}}}
}

不建议覆盖dependencies下的依赖,除非依赖软件包和覆盖本身共享完全相同的规范。为了使这一限制更容易处理,覆盖也可以定义为对直接依赖包规范的引用,方法是在希望版本匹配的软件包名称前加上 $

{"dependencies": {"foo": "^1.0.0"},"overrides": {// BAD, will throw an EOVERRIDE error// "foo": "^2.0.0"// GOOD, specs match so override is allowed// "foo": "^1.0.0"// BEST, the override is defined as a reference to the dependency"foo": "$foo",// the referenced package does not need to match the overridden one"bar": "$foo"}
}

engines

版本依赖范围
该字段仅为建议性字段,只有在软件包作为依赖关系安装时才会产生警告。

{"engines": {"node": ">=0.10.3 <15"}
}

与依赖关系一样,如果不指定版本(或指定 "*"作为版本),那么任何版本的 node 都可以使用。

os

您可以指定模块将在哪些操作系统上运行:

{"os": ["darwin", "linux"]
}

cpu

如果您的代码只能在某些 CPU 架构上运行,您可以指定是哪些架构。

{"cpu": ["x64", "ia32"]
}

publishConfig

这是一组将在发布时使用的配置值。如果你想设置标签、注册表或访问权限,它就特别方便,这样你就能确保给定的软件包不会被标记为 “最新”、不会被发布到全局公共注册表或某个作用域模块默认为私有。

workspaces

工作区
可选的 workspaces 字段是一个文件模式数组,用于描述安装客户端应在本地文件系统中查找的位置,以便找到需要以符号链接方式连接到顶级 node_modules 文件夹的每个工作区。

它既可以描述用作工作区的文件夹的直接路径,也可以定义将解析到这些相同文件夹的 globs(父路径)。

在下面的示例中,只要文件夹 ./packages 内有有效的 package.json 文件,位于该文件夹内的所有文件夹都将被视为工作区:

{"name": "workspace-example","workspaces": ["./packages/*"]
}

files

可选的 files 字段是一个文件模式数组,用于描述将你的软件包作为依赖关系安装时要包含的条目。文件模式的语法与 .gitignore 类似,但正好相反:包含文件、目录或 glob 模式(、**/ 等)将使该文件在打包时包含在压缩包中。省略该字段将使其默认为[“*”],即包含所有文件。

你也可以在软件包的根目录或子目录中提供 .npmignore 文件,这样文件就不会被包含在内了。在软件包的根目录中,它不会覆盖 "files "字段,但在子目录中则会。.npmignore 文件的作用与 .gitignore 文件类似。如果存在 .gitignore 文件,而 .npmignore 丢失,则将使用 .gitignore 的内容。

bin

很多软件包都有一个或多个可执行文件,它们希望将这些文件安装到 PATH 中。npm 可以轻松实现这一点(事实上,它就是利用这一功能来安装 "npm "可执行文件的)。

要使用此功能,请在 package.json 中提供 bin 字段,该字段是命令名称与本地文件名称的映射。在全局安装此软件包时,该文件会链接到全局 bins 目录中,或者创建一个 cmd(Windows 命令文件)来执行 bin 字段中指定的文件,因此可以通过名称或 name.cmd (在 Windows PowerShell 上)来运行。当该软件包作为依赖关系安装到另一个软件包时,该文件将被链接到该软件包中,可直接通过 npm exec 执行,或在其他脚本中通过 npm run-script 以名称调用。
例如:

{"bin": {"myapp": "./cli.js"}
}

因此,当你安装 myapp 时,如果是 unix-like 操作系统,它会从 cli.js 脚本创建一个符号链接到 /usr/local/bin/myapp;如果是 windows 操作系统,它会创建一个 cmd 文件,通常位于 C:\Users{Username}\AppData\Roaming\npm\myapp.cmd,用于运行 cli.js 脚本。

如果只有一个可执行文件,且其名称应是软件包的名称,那么只需以字符串形式提供即可。例如

{"name": "my-program","version": "1.2.5","bin": "./path/to/program"
}

相同写法:

{"name": "my-program","version": "1.2.5","bin": {"my-program": "./path/to/program"}
}

请确保 bin 中引用的文件以 #!/usr/bin/env node 开头,否则脚本将在没有 node 可执行文件的情况下启动!

结语

结束了。

相关文章:

【npm】前端工程项目配置文件package.json详解

简言 详细介绍了package.json中每个字段的作用。 package.json 本文档将为您介绍 package.json 文件的所有要求。它必须是实际的 JSON&#xff0c;而不仅仅是 JavaScript 对象文字。 如果你要发布你的项目&#xff0c;这是一个特别重要的文件&#xff0c;其中name和version是…...

Python快速入门系列-2(Python的安装与环境设置)

第二章&#xff1a;Python的安装与环境设置 2.1 Python的下载与安装2.1.1 访问Python官网2.1.2 安装Python对于Windows用户对于macOS用户对于Linux用户 2.2 集成开发环境&#xff08;IDE&#xff09;的选择与设置2.2.1 PyCharm2.2.2 Visual Studio Code2.2.3 Jupyter Notebook2…...

Linux的环境安装以及项目部署

LInux软件安装 是在发行版是CentOS下安装 通常使用yum安装,可以在rpm上增加了自动解决依赖的功能 传输安装包方式安装JDK与tomcat 安装JDK ●安装包&#xff1a;将.gz文件通过Xftp传输到/opt目录下准备安装 ●解压&#xff1a;进入/opt目录,使用命令tar -zxvf 压缩包名称 (名称…...

ASUS华硕天选2锐龙版笔记本电脑FA506ICB/FA706IC原装出厂Windows11系统,预装OEM系统恢复安装开箱状态

链接&#xff1a;https://pan.baidu.com/s/122iHHEOtNUu4azhVPnxNuA?pwdsqk7 提取码&#xff1a;sqk7 适用型号&#xff1a; FA506IM、FA506IE、FA506IC、FA506IHR FA506IR、FA506IHRB、FA506ICB、FA506IEB FA706IM、FA706IE、FA706IC、FA706IHR FA706IR、FA706IHRB、F…...

登录校验认证

会话技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪&#xff1a; 一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请…...

Kubernetes 几大概念的作用

更详细的组件通信流程 Kubernetes 主要由以下几个核心组件组成&#xff1a; 1. etcd 保存了整个集群的状态&#xff1b; 2. API Server 提供了资源操作的唯一入口&#xff0c;并提供认证&#xff0c;授权&#xff0c;访问控制&#xff0c;API 注册和发现等机制&#xff1b; …...

力扣199. 二叉树的右视图(DFS,BFS)

Problem: 199. 二叉树的右视图 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 无论是DFS还是BFS我们都要思考到达二叉树的每一层&#xff08;或者每一层中的每一个节点&#xff09;时&#xff0c;我们都该如何按题目要求做出对应得处理!!!在本体中我们主要是&#x…...

[数据集][目标检测]光伏板太阳能版缺陷检测数据集VOC+YOLO格式2400张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2400 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注…...

根据QQ号获取暗恋的人的全部歌单

文章目录 前言一、成果展示二、后端开发流程三、前后端障碍与难点解决四、待扩展内容五、总结 前言 本人喜欢使用QQ音乐听歌&#xff0c;并且喜欢点击好友栏目观看最近在听&#xff0c;了解暗恋的人最近在听什么歌曲&#xff0c;知己知彼&#xff0c;百战不殆。但是每次都需要…...

解决火狐浏览器访问地址受限制问题(This address is restricted)

问题如下图&#xff1a; This address is restrictedThis address uses a network port which is normally used for purposes other than Web browsing. Firefox has canceled the request for your protection. 此地址受到限制 此地址使用通常用于 Web 浏览以外的目的的网…...

基于MPPT的太阳能光伏电池simulink性能仿真,对比扰动观察法,增量电导法,恒定电压法

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 扰动观察法 (Perturb and Observe Method) 4.2 增量电导法 (Incremental Conductance Method) 4.3 恒定电压法 (Constant Voltage Method) 5.完整工程文件 1.课题概述 在simulink中&#xff0c;实…...

HUAWEI 华为交换机 配置 MAC 防漂移 防MAC伪造示例

组网需求 某企业网络中&#xff0c;用户需要访问企业的服务器。如果某些非法用户从其他接口假冒服务器的MAC 地址发送报文&#xff0c;则服务器的 MAC 地址将在其他接口学习到。这样用户发往服务器的报文就会发往非法用户&#xff0c;不仅会导致用户与服务器不能正常通信&…...

Java 反射机制实践案例

Java反射机制允许程序在运行时查询和操作对象的类信息&#xff0c;甚至可以调用类的方法、访问字段和创建新的对象。下面通过几个简单的示例来展示Java反射的实践应用。 1. 获取Class对象的引用 有三种主要方式可以在运行时获得Class对象的引用&#xff1a; // 方法1: 通过对…...

OJ:循环队列

622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 思路 思路&#xff1a;首先循环队列的意思是&#xff1a;空间固定&#xff0c;就是提前开辟好&#xff0c;满了就不能插入了&#xff0c;但是删除数据后仍有空间&#xff0c;删除循环队列里面的数据后&#xff0c;保…...

专业140+总430+电子科技大学858信号与系统考研经验成电电子信息与通信工程,电科大,真题,大纲,参考书。

今年考研成绩出来&#xff0c;初试专业课858信号与系统140&#xff0c;总分430&#xff0c;其余各门分数都比较平稳&#xff0c;总分好于自己估分&#xff0c;应群里很多同学要求&#xff0c;我总结一下自己的复习经验。首先我是一个大冤种&#xff0c;专业课资料学长给了一套&…...

C++:STL - set map

C&#xff1a;STL - set & map 关联式容器pairset模板参数typedef的类型构造函数迭代器常规接口特殊接口 multisetmap模板参数typedef的类型常规接口特殊接口 multimap 关联式容器 关联式容器是C标准库提供的一种数据结构&#xff0c;用于存储操作键值对&#xff08;key-v…...

一招鲜吃遍天之Haproxy集群

四层&#xff1a; LVS&#xff1a;Linux Virtual Server Nginx&#xff1a; HAProxy&#xff1a;High Availability Proxy 七层: HAProxy Nginx 硬件&#xff1a; F5 F5 | 多云安全和应用交付 Netscaler NetScaler: Application Delivery at Scale Array 北京华耀科技…...

数据库的筛选条件

【一】筛选过滤条件 【1】完整的查询语句 -- 查询当前表中的全部数据select * from 表名 where 筛选条件;​-- 查询当前表中的指定字段的数据select 字段名,字段名 from 表名 where 筛选条件;# 执行顺序from where select ​select 你选择的列1, 你选择的列2, ... from 查询的…...

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)

一、数据库事务隔离级别 数据库事务的隔离级别有4种&#xff0c;由低到高分别为Read uncommitted &#xff08;读未提交&#xff09;、Read committed&#xff08;读提交&#xff09; 、Repeatable read&#xff08;可重复读&#xff09; 、Serializable &#xff08;串行化&a…...

如何在Linux上为PyCharm创建和配置Desktop Entry

在Linux操作系统中&#xff0c;.desktop 文件是一种桌面条目文件&#xff0c;用于在图形用户界面中添加程序快捷方式。本文将指导您如何为PyCharm IDE创建和配置一个 .desktop 文件&#xff0c;从而能够通过应用程序菜单或桌面图标快速启动PyCharm。 步骤 1: 确定PyCharm安装路…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...

无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技

无需布线的革命&#xff1a;电力载波技术赋能楼宇自控系统 在楼宇自动化领域&#xff0c;传统控制系统依赖复杂的专用通信线路&#xff0c;不仅施工成本高昂&#xff0c;后期维护和扩展也极为不便。电力载波技术&#xff08;PLC&#xff09;的突破性应用&#xff0c;彻底改变了…...