私有仓库搭建

目前市面上比较常见的私有仓库搭建方法为:

  • 通过 Sinopia 或 verdaccio 搭建(Sinopia 已经停止维护,verdaccio 是 Fork 自 Sinopia,基本上大同小异),其优点是搭建简单,不需要其他服务。
  • 通过 cnpm 搭建,需要数据库服务,后期也支持了 redis 缓存(当 redis 设置了密码,访问好像有些问题),目前用的人最多,cnpm 推荐的是用 docker 作为容器。
  • 基于github私有库来搭建npm私有库,搭建简单管理方便,只需要维护github私有库,不需要本地搭建服务器、数据库等。
    1. 但是需要在package.json设置private为true(为了保证不小心发布到npm官方库)
    2. 安装之后,想要更新,只能重新npm install xxx;
    3. 发布的时候不能使用npm的相关命令,比如npm version patch、npm publish;
    4. 有时候拉取都比较慢,有时容易失败

npm及私有npm的工作原理?

当我们使用npm install去安装一个模块时,会先检查node_modules目录中是否已经存在这个模块,如果没有便会向远程仓库查询。

npm提供了一个模块信息查询服务,通过访问

registry.npmjs.org/packaename/version

就可以查到某个发布在npm模块上的具体信息以及下载地址,下载并解压到本地完成安装。
在这里插入图片描述
那如果我们搭建了私有的npm
使用 npm install 命令安装包时,NPM 将首先检查是否可以从私有注册表获取所需的包。如果私有注册表配置为代理公共注册表,且包不存在于私有注册表中,它还可以从公共注册表中拉取包。
在这里插入图片描述

verdaccio

Verdaccio 是一个轻量级、易于配置的开源私有 NPM 仓库解决方案,非常适合用于内部团队的包管理。下面是使用 Verdaccio 搭建私有 NPM 仓库的步骤。

安装 Verdaccio

  1. 安装 Node.js
    确保你已经安装了 Node.js。Verdaccio 要求 Node.js 的版本至少是 10.x。

  2. 安装 Verdaccio
    使用 npm 安装 Verdaccio:

    npm install -g verdaccio
    
  3. 运行 Verdaccio
    安装完成后,运行 Verdaccio:

    verdaccio
    

    默认情况下,Verdaccio 会在 http://localhost:4873 上运行。
    在这里插入图片描述

配置 Verdaccio

  1. 配置文件
    Verdaccio 会在首次运行时创建一个默认的配置文件 ~/.config/verdaccio/config.yaml。你可以编辑这个文件来调整设置,如端口、权限、存储路径等。
    文档: https://verdaccio.org/zh-cn/docs/configuration/
    • 全部配置

      # #号后面是注释
      # 所有包的缓存目录
      storage: ./storage
      # 插件目录
      plugins: ./plugins
      
      #开启web 服务,能够通过web 访问
      web:
        # WebUI is enabled as default, if you want disable it, just uncomment this line
        #enable: false
        title: Verdaccio
      #验证信息
      auth:
        htpasswd:
          #  用户信息存储目录
          file: ./htpasswd
          # Maximum amount of users allowed to register, defaults to "+inf".
          # You can set this to -1 to disable registration.
          #max_users: 1000
      
      # a list of other known repositories we can talk to
      #公有仓库配置
      uplinks:
        npmjs:
          url: https://registry.npmjs.org/
      
      packages:
        '@*/*':
          # scoped packages
          access: $all
          publish: $authenticated
      
          #代理 表示没有的仓库会去这个npmjs 里面去找 ,
          #npmjs 又指向  https://registry.npmjs.org/ ,就是上面的 uplinks 配置
          proxy: npmjs
      
        '**':
          # 三种身份,所有人,匿名用户,认证(登陆)用户
          # "$all", "$anonymous", "$authenticated"
      
          #是否可访问所需要的权限
          access: $all
      
          #发布package 的权限
          publish: $authenticated
      
          # 如果package 不存在,就向代理的上游服务发起请求
          proxy: npmjs
      
      # To use `npm audit` uncomment the following section
      middlewares:
        audit:
          enabled: true
      # 监听的端口,IP,重点,不配置这个,只能本机能访问
      listen: 0.0.0.0:4873
      # log settings
      logs:
        - {type: stdout, format: pretty, level: http}
        #- {type: file, path: verdaccio.log, level: info}
      
    • Verdaccio 允许你通过修改 config.yaml 中的 authpackages 部分来配置访问控制和权限:

      auth:
        htpasswd:
          file: ./htpasswd
          max_users: 1000
      
      packages:
        '@*/*':
          access: $authenticated
          publish: $authenticated
          proxy: npmjs
      
        '**':
          access: $authenticated
          publish: $authenticated
          proxy: npmjs
      

      这样配置后,只有经过认证的用户才能访问和发布包。

使用 Verdaccio

  1. 添加用户
    如果你想要管理用户登录,可以通过命令行添加用户:

    npm adduser --registry http://localhost:4873
    

    这将创建一个用户,并将其信息存储在 Verdaccio 的用户数据库中。
    在这里插入图片描述

  2. 登录到私有注册表

    npm login --registry=http://your-private-registry-url/
    
  3. 发布包

    • 配置你的 package.json 中的 publishConfig 字段指向 Verdaccio 的 URL:

      "publishConfig": {
        "registry": "http://localhost:4873"
      }
      

      文档:https://docs.npmjs.com/cli/v8/using-npm/registry#how-can-i-prevent-my-package-from-being-published-in-the-official-registry在这里插入图片描述

    • 使用 npm 发布包:

      npm publish
      // 更新版本
      npm version patch
      
    • 再次发布之前要先进行更新版本,否则会失败

           // 更新版本
           npm version patch
      
  4. 撤销

    npm unpublish 命令用于从 npm 注册表中删除已发布的包。这个命令非常有用,但也应谨慎使用,因为它会影响到依赖该包的任何人或任何项目。以下是命令的格式和详细解释:

    格式

    npm unpublish [<@scope>/]<pkg>@<version>
    

    解释

    • <@scope>/: 可选项。如果你的包是发布在一个作用域下(通常是组织或团队的命名空间),你需要包含这个作用域。作用域名称前面加上 @ 符号,并与包名通过 / 分隔。

    • <pkg>: 必需项。这是你想要取消发布的包的名称。

    • <version>: 必需项。这是你想要取消发布的包的具体版本号。提供版本号是必须的,因为 npm unpublish 默认不允许删除整个包,只能删除指定版本。

    使用示例

    假设你有一个名为 example-package 的包,版本 1.0.1,并且这个包是在作用域 @mycompany 下:

    npm unpublish @mycompany/example-package@1.0.1
    

    如果你的包没有使用作用域,命令如下:

    npm unpublish example-package@1.0.1
    
  5. 安装包

    • 通过设置 .npmrc 文件

      //可以通过以下命令设置npm 的注册表地址
      npm set registry http://localhost:4872/
      
      //临时使用不同的注册表:如果您只想临时更改注册表地址(例如,仅对当前的终端会话有效),您可以在安装包时指定注册表地址,而不是全局更改设置:
      
      npm install <package-name> --registry http://localhost:4872/
      
      //还原默认的 npm 注册表地址:
      
      npm set registry https://registry.npmjs.org/
      

      这个命令用于快速设置 npm 配置项,如注册表的 URL。
      然后执行 npm install可以下载

    • 使用命令行参数指定 Verdaccio 的 URL 来安装包:

      npm install <package-name> --registry http://localhost:4873
      

优点与缺点

优点

  • 易于安装和配置:快速搭建,简单易用。
  • 轻量级:非常适合小团队和个人使用。
  • 支持插件:可以通过插件扩展功能。

缺点

  • 缩放性:对于非常大的企业或高负载环境,可能不够强大。
  • 高级特性缺乏:相比于一些商业解决方案,如 Artifactory 或 Nexus,功能上可能有所欠缺。

Verdaccio 是一个非常实用的工具,对于希望快速搭建私有 NPM 仓库的小团队或个人开发者来说,它提供了一个成本低且维护简单的解决方案。

服务器Linux搭建NPM私有仓库-verdaccio

创建opt文件夹

liunx文件夹都有自己的用途,可以看这篇Linux 系统目录结构

mkdir opt
安装verdaccio
docker pull verdaccio/verdaccio
创建项目结构和文件

执行以下命令

mkdir -p opt/{plugins,config,storage}

生成以下目录结构

-opt
  -docker-compose.yml   #docker-compose 配置文件
  -plugins              
  -config
      -config.yaml      #verdaccio 配置文件
  -storage
编辑 docker-compose 配置文件
version: '3.4'

services:
  verdaccio:
    image: verdaccio/verdaccio
    container_name: "verdaccio"
    networks:
      - node-network
    environment:
      # VERDACCIO 服务端口
      - VERDACCIO_PORT=3005
      # 当前登录 linux 服务器的用户名
      - VERDACCIO_USER_NAME="root" 
    ports:
      # 宿主和容器的端口
      - "3005:3005"
    volumes:
      - "./storage:/verdaccio/storage"
      - "./config:/verdaccio/conf"
      - "./plugins:/verdaccio/plugins"
networks:
  node-network:
    driver: bridge

下面是对每一行配置的详细解释:

version: '3.4'
  • 版本: 这一行指定了 docker-compose 文件使用的版本是 3.4。每个版本的 docker-compose 支持特定的功能集合。
services:
  • 服务: 开始定义一个或多个服务的部分,每个服务将对应一个容器。
  verdaccio:
  • verdaccio 服务: 这里定义了一个名为 verdaccio 的服务。
    image: verdaccio/verdaccio
  • 镜像: 为 verdaccio 服务指定使用 verdaccio/verdaccio 镜像,这是一个预构建的 Docker 镜像,可从 Docker Hub 获取。
    container_name: "verdaccio"
  • 容器名称: 设置这个容器运行时的名称为 “verdaccio”。
    networks:
      - node-network
  • 网络: 将该服务连接到名为 node-network 的网络。
    environment:
  • 环境变量: 开始定义环境变量的部分。
      # VERDACCIO 服务端口
      - VERDACCIO_PORT=3005
  • 环境变量: 设置环境变量 VERDACCIO_PORT3005,这通常用于指定应用监听的端口。
      # 当前登录 linux 服务器的用户名
      - VERDACCIO_USER_NAME="root"
  • 环境变量: 设置环境变量 VERDACCIO_USER_NAME 为 “root”,这可以用于应用中需要引用服务器用户的场景。
    ports:
      # 宿主和容器的端口
      - "3005:3005"
  • 端口映射: 将容器内的端口 3005 映射到宿主机的端口 3005 上,使得外部可以通过宿主机的端口访问服务。
    volumes:
      - "./storage:/verdaccio/storage"
      - "./config:/verdaccio/conf"
      - "./plugins:/verdaccio/plugins"
  • 卷挂载:
    • ./storage:/verdaccio/storage:将宿主机上当前目录下的 storage 目录挂载到容器的 /verdaccio/storage 目录,用于数据持久化。
    • ./config:/verdaccio/conf:将宿主机上当前目录下的 config 目录挂载到容器的 /verdaccio/conf 目录,用于配置文件的持久化。
    • ./plugins:/verdaccio/plugins:将宿主机上当前目录下的 plugins 目录挂载到容器的 /verdaccio/plugins 目录,用于插件的持久化。
networks:
  node-network:
    driver: bridge
  • 网络定义:
    • node-network: 这里定义了一个名为 node-network 的网络。
    • 驱动: 使用 bridge 驱动,这是 Docker 默认的网络类型,适用于同一宿主机上的容器间通信。

整体来看,这个 docker-compose.yml 文件配置了一个单服务的应用,使用了网络、环境变量、端口映射和卷挂载来确保 verdaccio 正常运行并且是配置化和持久化的。

编辑 verdaccio 配置文件
storage: /verdaccio/storage
auth:
  htpasswd:
    file: /verdaccio/conf/htpasswd
uplinks:
  npmjs:
   url: https://registry.npmjs.org/
  server2:
    url: https://registry.npm.taobao.org/
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    proxy: npmjs server2
  '**':
    # 这里如果不设置在使用 npm i xxx、 npm publish 时将会提示包不存在,为了方便这里直接设置上如下两行
    access: $all
    publish: $authenticated
    proxy: npmjs
logs:
  - {type: stdout, format: pretty, level: http}
listen:
  # 这个端口务必对应上
  - 0.0.0.0:3005
启动容器
docker-compose up -d --build

在浏览器打开 服务器网址:端口(3005) 将会出现如下页面
在这里插入图片描述

可能的报错

npm版本太低
这个是因为本地npm 版本太低导致的, https://github.com/verdaccio/verdaccio/issues/3413
在这里插入图片描述
本地添加用户报错 500
查看日志

 error--- the user hehe could not being added. Error: EACCES: permission denied, open '/verdaccio/conf/htpasswd'

在这里插入图片描述
是因为Verdaccio在容器中以非根用户(uid=10001)的身份运行,要授权
因为当前的目录结构为

-opt
  -docker-compose.yml   #docker-compose 配置文件
  -plugins              
  -config
      -config.yaml      #verdaccio 配置文件
  -storage

所以先进入opt文件夹,从报错来看是/verdaccio/conf/htpasswd没有权限
因为./config:/verdaccio/conf:将宿主机上当前目录下的 config 目录挂载到容器的 /verdaccio/conf 目录,用于配置文件的持久化。
执行一下操作就可以解决

chown -R 10001:65533 ./config/

CNPM

要使用 cnpm(中国国内镜像版本的 npm)来搭建私有 NPM 仓库,我们主要会使用到 cnpmjs.org,这是一个开源的私有 NPM 服务解决方案,支持 npm 的所有功能。cnpm 本身主要是为了优化在中国大陆访问 npm 的速度,而 cnpmjs.org 提供了完整的私有库服务。

安装和配置 cnpmjs.org

下面是基于 cnpmjs.org 搭建私有 NPM 仓库的步骤:

  1. 环境要求

    • 需要 Node.js 环境,确保你的系统上已安装 Node.js。
    • 安装 MySQL 或其他数据库,因为 cnpmjs.org 需要数据库来存储数据。
  2. 安装 cnpmjs.org

    • 使用 npm 安装 cnpmjs.org
      npm install -g cnpmjs.org
      
  3. 配置数据库

    • cnpmjs.org 默认使用 SQLite,但对于生产环境,推荐使用 MySQL。
    • 创建一个 MySQL 数据库并配置到 cnpmjs.org 的配置文件中。可以从 cnpmjs.org 的 GitHub 仓库 下载默认的 config.js 文件,然后修改数据库设置部分。
  4. 启动服务

    • 启动 cnpmjs.org 服务:
      cnpmjs.org start --admins='admin:admin@example.com' --config=config.js
      
    • 其中 admins 是管理员账号的设置,可以根据实际情况调整。
  5. 使用 cnpm

    • 安装 cnpm(如果尚未安装):
      npm install -g cnpm --registry=https://registry.npmmirror.com
      
    • 配置 cnpm 使用你的私有仓库:
      cnpm set registry http://localhost:7001
      

发布和安装包

  • 发布包:使用 cnpm publish 发布你的 npm 包。
  • 安装包:使用 cnpm install <package-name> 来安装包。

优点与缺点

优点

  • 完全控制:私有部署意味着你拥有对仓库的完全控制。
  • 扩展性:相比于简单的 Verdaccio,cnpmjs.org 支持更多的定制和扩展功能。
  • 适合中国用户cnpm 的设置和优化适合中国国内用户,网络连接更快、更稳定。

缺点

  • 维护成本:需要自行维护服务器和数据库。
  • 配置复杂:相比直接使用 npm 或 Verdaccio,配置和管理稍显复杂。
  • 资源消耗:相对于轻量级的方案,cnpmjs.org 可能会占用更多的系统资源。

使用 cnpmjs.org 搭建私有 NPM 仓库是一种有效的方式,特别是对于需要高度定制化和控制的大型团队或企业。这种方法提供了良好的性能和可扩展性,但也需要相应的技术支持来维护和管理。

GitHub Packages

使用 GitHub Packages 创建私有 NPM 库允许你将 NPM 包直接存储在 GitHub 上,利用 GitHub 提供的版本控制和协作功能,以及包管理的便利性。这是一个集成度高、配置简单的方案,适合已经使用 GitHub 进行源代码管理的团队。以下是详细的步骤说明:

步骤概览

  1. 启用 GitHub Packages

    • GitHub Packages 通常默认在所有账户上启用。
  2. 创建或选择一个 GitHub 仓库

    • 使用一个现有的 GitHub 仓库或创建一个新仓库用于托管你的私有 NPM 包。
  3. 生成 Personal Access Token

    • 在 GitHub 上生成一个访问令牌(Personal Access Token, PAT),确保它包含对 Packages 的适当权限。
  4. 配置 NPM 使用 GitHub Packages

    • 在你的项目中配置 .npmrc 文件以使用 GitHub 的 NPM 仓库。
  5. 发布 NPM 包

    • 将你的 NPM 包发布到 GitHub Packages。
  6. 安装和使用包

    • 通过 GitHub Packages 安装和使用你的 NPM 包。

详细步骤

1. 启用 GitHub Packages
  • 此服务通常已为 GitHub 用户启用。如果未启用,你可能需要联系 GitHub 支持。
2. 创建或选择一个仓库
  • 直接在 GitHub 上创建一个新的仓库或选择一个已有仓库。私有包必须存储在私有仓库中。
3. 生成 Personal Access Token
  • 在 GitHub 网站上,点击你的头像 > Settings > Developer settings > Personal access tokens > Generate new token。
  • 选择 write:packages 用于上传包,read:packages 用于下载包。确保也选择了 repo 权限,这对私有仓库是必需的。
4. 配置 NPM 使用 GitHub Packages
  • 在你的项目根目录下创建 .npmrc 文件,加入以下内容(替换 OWNER 为你的 GitHub 用户名或组织名):
    registry=https://npm.pkg.github.com/OWNER
    
  • 在你的用户主目录下的 .npmrc 文件中配置 PAT:
    //npm.pkg.github.com/:_authToken=YOUR_TOKEN
    
5. 发布 NPM 包
  • 修改你的 package.json 文件中的 name 属性,以确保它是 @owner/repo 形式,其中 owner 是你的 GitHub 用户或组织名,repo 是仓库名。
  • 确保你已登录到 NPM(使用命令 npm login),然后运行:
    npm publish
    
6. 安装和使用包
  • 确保 .npmrc 文件配置正确。然后你可以像使用其他 NPM 包一样安装和使用这些包:
    npm install @owner/package-name
    

优点与缺点

优点

  • 集成:紧密集成于 GitHub,简化了源代码和包管理的流程。
  • 安全性:利用 GitHub 的安全设置,可以细粒度控制包的访问权限。
  • 方便的版本控制和协作:利用 GitHub 强大的版本控制和协作特性。

缺点

  • 成本:对于私有仓库和私有包,需要 GitHub 的付费账户。
  • 依赖性:依赖 GitHub 的在线服务,如果 GitHub 服务中断,可能会影响到包的访问。
  • 配置和使用限制:虽然相对简单,但对于不熟悉 GitHub 的用户来说可能需要一定的学习曲线。

这些步骤总结了如何通过 GitHub Packages 设置和管理私有 NPM 库,希望对你的项目或团队有所帮

参考文档
https://verdaccio.org/zh-cn/docs/configuration/#storage
https://juejin.cn/post/7096701542408912933
https://auan.cn/internet/2010.html
https://juejin.cn/post/7063032346206797860

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32-C3模组上跑通OTA升级(11)

接前一篇文章&#xff1a;ESP32-C3模组上跑通OTA升级&#xff08;10&#xff09; 本文内容参考&#xff1a; 《ESP3-C3 物联网工程开发实战》 乐鑫科技 特此致谢&#xff01; 上一回说到解决了证书验证的问题&#xff0c;但紧接着又出现了一个新的问题&#xff1a;版本相同无…

分享一款开源可自行托管的 Heroku / Netlify / Vercel 替代方案工具,高达16.9K Star

之前分享了一篇文章【AI云部署】盘点开源项目免费云部署的几种技术方案 &#xff0c; 你可能会有这样的一个想法&#xff0c;要不我自建一个云平台自行托管。你看大公司都是自建的服务&#xff0c;托管在外面有隐私安全顾虑。 Coolify 是 Heroku / Netlify / Vercel 等的开源…

零基础入门学习Python第二阶04SQL详解03

MySQL 新特性 JSON类型 很多开发者在使用关系型数据库做数据持久化的时候&#xff0c;常常感到结构化的存储缺乏灵活性&#xff0c;因为必须事先设计好所有的列以及对应的数据类型。在业务发展和变化的过程中&#xff0c;如果需要修改表结构&#xff0c;这绝对是比较麻烦和难…

PLM系统与PDM系统、ERP系统、CRM系统有哪些关系?

在当今快速发展的信息技术时代&#xff0c;企业信息化已成为提升管理水平和增强竞争力的关键。其中&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;作为企业信息化的基石&#xff0c;与其他信息系统如产品数据管理&#xff08;PDM&#xff09;、企业资源规划&#xf…

流量卡,你买的是长期套餐的还是短期套餐?

大家可能都知知道&#xff0c;网上的流量卡有两种不同的套餐&#xff0c;长期和短期&#xff0c;那么如果是你的话&#xff0c;你是会选择长期套餐还是短期套餐 在介绍这个问题之前&#xff0c;我们先了解一下什么是长期套餐&#xff1f;什么是短期套餐&#xff1f; 1、长期套…

PS系统教程08

色彩模式 色彩模式我们可能每天都有使用。Photoshop提供了多种颜色模式&#xff0c;每种模式都有其特定的用途和特点。以下是几种常见的颜色模式及其区别。 HSB模式-人眼 点击前景色滑动色相带&#xff08;0-360度&#xff09; 颜色色相&#xff1a;颜色相貌&#xff08;H&a…

【护网急训】应急响应靶场集,24年想参加hvv的同学抓紧练习吧。

应急响应靶场集 网络安全资源分享&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 护网中最重要的就是通过各类安全设备…

如何自建yum源仓库

文章目录 1&#xff0c;创建可用的yum源文件夹&#xff0c;把你自己的软件包&#xff0c;并放在这个目录文件夹中2&#xff0c;将yum源文件夹目录复制到/var/www/html/中3&#xff0c;客户端修改配置文件4&#xff0c;创建一个 RPM 软件包存储库5&#xff0c;查验是否成功6&…

基于springboot+vue的医院信息管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

软件设计详细需求分析报告-word(直接套用实际文档)

第3章 技术要求 3.1 软件开发要求 第4章 项目建设内容 第5章 系统安全需求 5.1 物理设计安全 5.2 系统安全设计 5.3 网络安全设计 5.4 应用安全设计 5.5 对用户安全管理 5.6 其他信息安全措施 第6章 其他非功能需求 6.1 性能设计 6.2 稳定性设计 6.3 安全性设计 6.4 兼容性设计…

1638. 统计只差一个字符的子串数目

题目 给你两个字符串 s 和 t&#xff0c;请找出 s 中的非空子串的数目&#xff0c;这些子串满足替换一个不同字符以后&#xff0c;是 t 串的子串。换言之&#xff0c;请你找到 s 和 t 串中恰好只有一个字符不同的子字符串对的数目。 一个子字符串是一个字符串中连续的字符。 …

全域外卖加盟是真的还是割韭菜?

近日&#xff0c;被业内公认为是2024年创业风口的全域外卖赛道迎来了第一场危机——多位想做全域外卖服务商的创业者在购买某公司的全域外卖系统后&#xff0c;发现其存在实物与描述严重不符的情况&#xff0c;并在退款阶段遇到诸多阻挠。在此背景下&#xff0c;外界对于全域外…

EPIC Fantasy Village - Low Poly 3D Art(梦幻村庄乡村小镇模型)

这个包提供了一个以幻想为主题的多边形风格游戏,适合TopDown、RPG、冒险、社交和RTS。它允许你创建自己的美丽幻想村庄和角色。 EPIC 幻想村庄包 EPIC幻想村庄包提供了一个以幻想为主题的多边形风格游戏,适用于TopDown、RPG、冒险、社交和RTS游戏。这个包允许你创建自己的美丽…

【Spring Cloud Alibaba】初识Spring Cloud Alibaba

目录 回顾主流的微服务框架Spring Cloud 版本简介Spring Cloud以往的版本发布顺序排列如下&#xff1a; 由停更引发的"升级惨案"哪些Netflix组件被移除了&#xff1f; 替换方案服务注册中心&#xff1a;服务调用&#xff1a;负载均衡&#xff1a;服务降级&#xff1a…

PCB 走线注意事项

PCB 走线注意事项 引言正文 引言 PCB 英文全称 Printed circuit board&#xff0c;中文翻译为印刷电路板。 正文 PCB 板不能直角走线。 直角走线会使传输线的线宽发生变化&#xff0c;造成阻抗的不连续&#xff0c;会引起待高频信号本身的反射&#xff0c;信号在 PCB 中传输…

HarmonyOS NEXT星河版之自定义List下拉刷新与加载更多

文章目录 一、加载更多二、下拉刷新三、小结 一、加载更多 借助List的onReachEnd方法&#xff0c;实现加载更多功能&#xff0c;效果如下&#xff1a; Component export struct HPList {// 数据源Prop dataSource: object[] []// 加载更多是否ingState isLoadingMore: bool…

旋转编码器、DS1302 实时时钟、红外遥控模块、雨滴探测传感器 | 配合Arduino使用案例

旋转编码器 旋转编码器是一种用作检测自动化领域中的角度、速度、长度、位置和加速度的传感器。 有绝对式和增量式&#xff0c;这里使用增量式&#xff08;相对&#xff09;。 绝对输出只是周的当前位置&#xff0c;是他们成为角度传感器。增量输出关于轴的运动信息&#xff0…

干货分享 | 详解TSMaster CAN 与 CANFD 的 CRCE2E 校验方法

面对切换工具链的用户来说&#xff0c;在 TSMaster 上完成总线通讯中的 CRC/E2E 校验处理不是特别熟悉&#xff0c;该文章可以协助客户快速使用 TSMaster 完成 CAN/CAN FD 总线通讯的 CRC/E2E 校验。 本文关键字&#xff1a;TSMaster&#xff0c;CAN/CANFD&#xff0c;CRC 校验…

【漏洞复现】SpringBlade tenant/list SQL 注入漏洞

0x01 产品简介 SpringBlade ,是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpingBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 后台框架 /api/blade-system/tenantist路径存在SQL注入漏洞&#xff0c;攻击者除了可以利用 SQL 注…

参数介绍 安捷伦Agilent4155C、4156C 半导体测试仪

Agilent / HP 4155C 半导体参数分析仪是一款经济高效、精确的实验室台式解决方案&#xff0c;可用于高级设备特性分析。Agilent / HP 4155C 分析仪的功能和规格包括&#xff1a;一般功能&#xff1a; 经济高效、精确的实验室台式参数分析仪4 个中等功率 SMU、2 个 VSU 和 2 个 …