NPM进阶知识与用法详解(二)

文章目录

  • 一、NPM高级用法
    • 1. NPM模块发布与私有模块管理
    • 2. NPM钩子函数
    • 3. NPM包管理与优化
  • 二、NPM与现代化前端工具链
    • 1. NPM与Yarn、PNPM的比较
    • 2. NPM在Webpack、Vite等构建工具中的应用
    • 3. NPM与Monorepo架构
  • 三、总结与展望
    • 1. 前端包管理工具发展趋势
    • 2. 提高NPM使用效率的建议与资源推荐

一、NPM高级用法

1. NPM模块发布与私有模块管理

1. 发布模块到NPM仓库

发布一个模块到NPM公共仓库之前,你需要确保以下几点:

  • 你的模块代码已经完成并通过了测试。
  • 你已经在package.json文件中正确填写了所有必要的元信息,如模块名、版本、描述、入口文件、依赖项等。
  • 你已经在npm官网上注册了一个NPM账号,并且在本地通过npm adduser命令将你的账号信息添加到了NPM客户端。

发布模块的基本步骤如下:

  1. 在模块的根目录下运行npm login,输入你的NPM账号信息完成登录。
  2. 运行npm publish命令。这个命令会将你的模块打包并发布到NPM仓库。

如果你的模块名在NPM仓库中已经存在,或者你没有权限发布这个模块,发布过程会失败。在发布新版本的模块之前,你需要更新package.json文件中的版本号。

2. 私有模块搭建与管理

私有模块是指那些只被特定用户或组织使用的模块,它们通常不会发布到公共的NPM仓库。搭建私有模块仓库可以使用多种方案,比如:

  • 使用NPM企业版(NPM Enterprise):这是一个商业产品,提供了私有模块仓库的功能,以及额外的安全和管理特性。
  • 使用Verdaccio、Sinopia等开源工具自建私有仓库:这些工具可以在本地或服务器上搭建一个私有的NPM仓库,你可以将模块发布到这个仓库,并在你的项目中使用这些私有模块。

管理私有模块与管理公共模块类似,你需要在package.json文件中指定私有模块的来源(即你的私有仓库地址),然后使用npm install命令来安装这些模块。

3. 模块版本控制策略

NPM使用语义化版本控制(Semantic Versioning)来管理模块的版本。语义化版本控制规定版本号的格式为MAJOR.MINOR.PATCH,其中:

  • MAJOR版本:当你做了不兼容的API修改时应该增加。
  • MINOR版本:当你以向后兼容的方式添加功能时应该增加。
  • PATCH版本:当你做了向后兼容的bug修复时应该增加。

你可以在package.json文件中指定你的模块版本,并在发布新版本时更新这个文件。使用npm version <update_type>命令可以方便地更新版本号,其中<update_type>可以是majorminorpatch

代码示例

假设你有一个名为my-module的模块,你想将它发布到NPM仓库。首先,你需要确保你的模块根目录下有一个package.json文件,内容类似于:

{"name": "my-module","version": "1.0.0","description": "This is my awesome module","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"repository": {"type": "git","url": "git+https://github.com/yourusername/my-module.git"},"keywords": ["my","module"],"author": "Your Name <your.email@example.com>","license": "MIT","bugs": {"url": "https://github.com/yourusername/my-module/issues"},"homepage": "https://github.com/yourusername/my-module#readme"
}

然后,你可以通过以下命令发布你的模块:

npm login
# 输入你的NPM账号信息npm publish

如果你想发布一个新版本,首先更新package.json中的版本号,然后再次运行npm publish

对于私有模块,你可能需要配置你的.npmrc文件来指向你的私有仓库地址,例如:

registry=http://your-private-registry.com/

然后,你可以像发布到公共仓库一样发布你的私有模块。注意,私有仓库可能需要身份验证或其他安全措施,具体取决于你使用的私有仓库解决方案。

2. NPM钩子函数

NPM 钩子函数允许开发者在特定的NPM生命周期事件发生时执行自定义脚本。这些钩子可以与NPM的生命周期脚本事件(如preinstallinstallpostinstall等)相关联,从而提供对包安装、卸载、更新等过程的细粒度控制。

1. pre与post钩子

NPM 为每个生命周期事件都提供了 prepost 钩子。例如,在安装一个包时,会依次触发 preinstallinstallpostinstall 脚本。开发者可以在项目的 package.json 文件的 scripts 字段中定义这些钩子对应的脚本。

{"name": "my-package","version": "1.0.0","scripts": {"preinstall": "echo 'About to install dependencies!'","install": "echo 'Installing dependencies... this is actually not necessary as npm handles it'","postinstall": "echo 'Dependencies installed!'"}
}

需要注意的是,通常情况下你不需要(也不应该)覆盖 install 脚本,因为NPM会自动处理依赖的安装。上面的例子中,install 脚本仅用于演示,实际上你应该省略它。

然而,preinstallpostinstall 脚本是非常有用的,它们允许你在依赖安装前后执行自定义逻辑。

2. 自定义钩子函数

除了内置的 prepost 钩子外,NPM 还允许你通过定义自己的脚本来创建自定义的钩子函数。这些脚本可以在 package.json 文件的 scripts 字段中定义,并通过运行 npm run <script-name> 来调用。

{"name": "my-package","version": "1.0.0","scripts": {"setup": "npm install && npm run build","build": "echo 'Building the project...'"}
}

在上面的例子中,setup 脚本就是一个自定义的钩子函数,它会在运行 npm run setup 时依次执行 npm installnpm run build

3. 钩子函数在项目中的应用

钩子函数在项目中有很多应用场景,例如:

  • 环境准备:在安装依赖之前设置环境变量或配置文件。
  • 构建过程:在安装完成后执行构建脚本,如编译 TypeScript、压缩 JavaScript 等。
  • 集成测试:在代码提交之前运行测试脚本,以确保代码质量。
  • 部署:在代码发布之前执行部署脚本,如上传到服务器、更新配置文件等。

下面是一个更实际的例子,展示了如何在安装依赖后自动运行构建脚本:

{"name": "my-web-app","version": "1.0.0","scripts": {"postinstall": "npm run build","build": "webpack --config webpack.config.js"},"dependencies": {"react": "^17.0.0","react-dom": "^17.0.0"},"devDependencies": {"webpack": "^5.0.0","webpack-cli": "^4.0.0"}
}

在这个例子中,postinstall 钩子被用来在依赖安装完成后自动运行 build 脚本,该脚本使用 Webpack 来构建项目。这样,每当你或者其他人安装这个项目的依赖时,构建过程都会自动发生,确保项目始终处于可运行的状态。

3. NPM包管理与优化

随着项目的发展,依赖的NPM包数量可能会不断增加,这可能会导致包体积膨胀、安装时间延长以及潜在的版本冲突问题。因此,对NPM包进行有效管理和优化变得至关重要。

1. 包体积优化策略

优化NPM包的体积可以减少项目的存储空间需求,加快安装和构建速度。以下是一些优化策略:

  • 只安装必要的包:定期审查package.json文件,移除不再使用的依赖项。
  • 使用更小的替代包:有时可以找到功能相似但体积更小的包来替换现有包。
  • 启用Tree Shaking:对于JavaScript项目,通过Webpack等构建工具启用Tree Shaking可以移除未使用的代码。
  • 压缩和优化代码:使用如UglifyJS或Terser等工具来压缩和优化生成的代码。

2. 依赖树可视化工具

理解项目的依赖关系对于管理和优化NPM包非常有帮助。以下是一些常用的依赖树可视化工具:

  • npm-remote-ls:可以列出并可视化一个包的远程依赖树。
  • npm-dependency-tree:生成项目的依赖树并将其输出为文本或JSON格式。
  • depcheck:检测项目中未使用的依赖项。

虽然这些工具不一定直接提供可视化界面,但它们可以通过命令行或与其他工具结合使用来提供依赖关系的视图。

3. 清理无用依赖与冗余文件

随着时间的推移,项目中可能会积累未使用的依赖和冗余文件。以下是一些清理策略:

  • depcheck:如上所述,这个工具可以帮助检测未使用的依赖项。使用示例:

    npx depcheck
    

    该命令将列出所有未在项目代码中使用的依赖包,之后你可以手动从package.json中移除它们。

  • npm-dedupe:尝试减少node_modules中的重复包。但请注意,npm install已经默认进行了一定的去重操作。你可以使用以下命令尝试进一步优化:

    npm dedupe
    

    或者利用npm ci(在CI环境中或使用package-lock.json时)来确保依赖的一致性并自动进行去重。

  • .npmignore:创建一个.npmignore文件来指定在发布到NPM时哪些文件或目录应该被忽略。这有助于减少发布的包体积。

  • 手动审查:定期手动审查node_modules和项目的其他部分,以查找和移除不再需要的文件或目录。

请注意,自动清理工具应该谨慎使用,并且总是在运行它们之前备份项目,以防意外删除重要的依赖或文件。

总的来说,通过采用这些策略和工具,你可以更有效地管理和优化NPM包,从而提高项目的性能和可维护性。

二、NPM与现代化前端工具链

1. NPM与Yarn、PNPM的比较

功能pnpmYarnnpm
工作空间支持(monorepo)✔️✔️✔️
隔离的 node_modules✔️ - 默认✔️✔️
提升的 node_modules✔️✔️✔️ - 默认
自动安装 peers✔️✔️
Plug’n’Play✔️✔️ - 默认
零安装✔️
修补依赖项✔️✔️
管理 Node.js 版本✔️
有锁文件✔️ - pnpm-lock.yaml✔️ - yarn.lock✔️ - package-lock.json
支持覆盖✔️✔️ - 通过 resolutions✔️
内容可寻址存储✔️
动态包执行✔️ - 通过 pnpm dlx✔️ - 通过 yarn dlx✔️ - 通过 npx
辅助缓存✔️
列出许可证✔️ - 通过 pnpm licenses list✔️ - 通过插件

2. NPM在Webpack、Vite等构建工具中的应用

1. Webpack中的应用

Webpack是一个前端模块化打包工具,可以将许多分散的模块按照依赖关系打包成静态资源。在这个过程中,NPM主要被用来安装和管理这些模块。

例如,假设我们正在开发一个React应用,我们需要React和React-DOM这两个库。首先,我们会在项目的根目录下通过NPM安装这两个库:

npm install react react-dom

安装完成后,这些库就会被添加到node_modules文件夹中,同时package.jsonpackage-lock.json文件也会被更新,以记录这些新的依赖。

然后,在Webpack的配置文件webpack.config.js中,我们可以设置入口文件和各种加载器、插件等。Webpack会自动分析这些入口文件及其依赖,并将它们打包成浏览器可以理解的静态资源。

2. Vite中的应用

Vite是一个新型的构建工具,旨在提供更快的开发体验和更优化的构建输出。在Vite中,NPM同样被用来安装和管理项目依赖。

例如,假设我们正在开发一个Vue 3应用,我们首先需要安装Vue和@vue/compiler-sfc:

npm install vue @vue/compiler-sfc

然后,我们可以通过Vite创建一个开发服务器,该服务器将利用ES模块进行快速的模块热更新。在开发过程中,我们可以直接在浏览器中看到修改后的效果,而无需每次都重新构建整个项目。

对于生产环境,Vite会使用Rollup进行代码的打包和优化。Rollup是一个小巧且高效的JavaScript模块打包器,可以将项目的代码和依赖打包成优化的静态资源,以供部署。

请注意,Vite对项目的依赖有一些特殊要求。由于Vite在开发环境中直接使用了ES模块,因此所有的依赖都需要提供ES模块的版本。幸运的是,大部分主流的库和框架都已经提供了ES模块的支持。

3. NPM与Monorepo架构

Monorepo概念及优势

Monorepo,即单个仓库(Monolithic Repository),是一种源代码管理策略,其中多个项目被存储在一个版本控制仓库中。这与传统的每个项目一个仓库的做法形成对比。Monorepo的主要优势包括:

  1. 代码共享和重用:所有项目都在同一个仓库中,使得跨项目的代码共享变得简单。
  2. 一致的版本和依赖管理:所有项目都使用同一个package.json(或者通过工具管理的多个package.json),减少了版本冲突和依赖不一致的问题。
  3. 简化的构建和部署流程:可以使用统一的构建和部署工具链。
  4. 原子提交:更改可以跨多个包进行,确保所有更改都是一致的,并作为一个单元进行测试和发布。

NPM在Monorepo中的实践

NPM原生支持Monorepo,尽管在过去它并不是为这种架构设计的。但是,通过一些约定和工具,开发者可以成功地使用NPM来管理Monorepo。

  1. 多个package.json:在Monorepo中,通常每个包都有自己的package.json文件。这些文件定义了每个包的依赖关系和其他元数据。
  2. 使用file:协议:在Monorepo中,一个包可能依赖于另一个包。通过使用file:协议,可以在不发布到NPM的情况下,在本地链接这些包。
  3. 统一的版本控制:所有包都使用同一个版本控制系统(如Git),并且版本号是同步的。
  4. 使用NPM脚本进行构建和测试:可以在根目录的package.json中定义脚本,以同时构建、测试和发布所有包。

Lerna等工具介绍

Lerna是一个流行的工具,用于管理具有多个包的JavaScript项目,即Monorepo。它提供了以下功能:

  • 版本管理:Lerna可以自动管理所有包的版本号,确保它们是同步的。
  • 依赖管理:它允许你在本地链接包,而无需将它们发布到NPM。
  • 发布流程:Lerna可以自动化发布流程,包括版本控制、构建和发布到NPM。

代码示例

假设我们有一个Monorepo,其中包含两个包:package-apackage-b

目录结构如下:

/monorepo/packages/package-apackage.json/package-bpackage.jsonpackage.jsonlerna.json

在根目录的package.json中,我们可以定义一些用于构建和测试的脚本:

{"scripts": {"bootstrap": "lerna bootstrap","build": "lerna run build","test": "lerna run test"}
}

lerna.json中,我们可以配置Lerna的行为:

{"packages": ["packages/*"],"version": "independent"
}

package-apackage.json中,如果它依赖于package-b,我们可以这样定义:

{"name": "package-a","version": "1.0.0","dependencies": {"package-b": "file:../package-b"}
}

然后,我们可以使用NPM和Lerna来管理这个Monorepo:

# 安装所有依赖
npm install# 或者使用Lerna
npx lerna bootstrap# 构建所有包
npm run build# 或者使用Lerna
npx lerna run build# 发布所有包
npx lerna publish

这就是NPM与Monorepo架构的关系,以及如何使用Lerna等工具来管理Monorepo的简要概述。

三、总结与展望

1. 前端包管理工具发展趋势

随着前端技术的不断发展,前端包管理工具也在持续演进,以满足开发者日益复杂的需求。以下是前端包管理工具的一些发展趋势:

a. 多元化与集成化:前端项目日益复杂,单一的包管理工具很难满足所有需求。因此,未来的包管理工具可能会更加多元化,集成多种功能,如依赖管理、构建、部署等。同时,它们也会更加注重与其他工具的兼容性和协作性。

b. 智能化与自动化:为了提高开发效率,包管理工具可能会更加智能化和自动化。例如,通过机器学习算法,工具可以自动推荐和优化依赖关系,减少手动配置的工作量。此外,自动化构建、测试和部署等功能也将成为标配。

c. 安全性与稳定性:随着网络安全问题的日益突出,包管理工具的安全性也越来越受到关注。未来的包管理工具可能会加强对依赖项的安全审核和漏洞修复能力,确保项目的安全性。同时,稳定性也是开发者非常关心的问题,因此包管理工具需要不断提高自身的稳定性和可靠性。

d. Monorepo支持:随着Monorepo架构的流行,包管理工具对Monorepo的支持也变得越来越重要。未来的包管理工具可能会提供更好的Monorepo管理功能,如统一的版本控制、依赖管理和构建流程等。

e. 云端化与协作化:随着云计算技术的发展,包管理工具可能会向云端化方向发展。云端化的包管理工具可以提供更强大的计算和存储能力,支持更大规模的项目和团队。同时,协作化也是未来的一个重要趋势,包管理工具需要提供更好的团队协作功能,如代码审查、版本控制等。

2. 提高NPM使用效率的建议与资源推荐

NPM是前端开发中常用的包管理工具之一,以下是一些提高NPM使用效率的建议和资源推荐:

a. 优化依赖管理:合理管理依赖关系是提高NPM使用效率的关键。建议使用npm dedupe命令来减少重复依赖,使用npm shrinkwrappackage-lock.json来锁定依赖版本,确保项目的稳定性。

b. 使用缓存:NPM支持缓存机制,可以加速包的下载和安装过程。建议在项目根目录下使用.npmrc文件配置缓存路径和过期时间等参数,提高缓存的利用率。

c. 选择合适的源:选择合适的NPM源可以加快包的下载速度。国内用户可以选择淘宝NPM镜像等国内源,国外用户可以选择离自己较近的源。

d. 使用NPM脚本:NPM提供了强大的脚本功能,可以在package.json中定义各种构建、测试和部署等脚本。使用NPM脚本可以简化项目的构建和部署流程,提高开发效率。

e. 学习和掌握NPM命令:熟悉NPM命令可以提高使用效率。建议学习和掌握常用的NPM命令,如npm installnpm uninstallnpm updatenpm run等。

f. 资源推荐

  • 文档:NPM官方文档是学习NPM的最佳资源之一,包含了详细的命令说明和使用示例。
  • 社区:Stack Overflow等社区网站上有大量关于NPM的问题和答案,可以帮助解决使用中的疑难问题。
  • 工具npm-check-updates是一个用于检查并更新NPM依赖的工具;npm-outdated可以列出所有过时的依赖项;npm-audit用于检查依赖项中的已知安全漏洞等。
  • 教程和文章:有许多优秀的在线教程和博客文章介绍了如何使用和优化NPM,可以作为学习和提高的参考。

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

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

相关文章

从传统到智能:机器视觉检测赋能PCB行业数字化转型!

PCB板在现代电子设备中是一个重要的组成部分&#xff0c;它是用来集成各种电子元器件的信息载体。在电子领域中&#xff0c;PCB板有着广泛的应用&#xff0c;而它的质量直接影响到产品的性能。随着电子科技技术和电子制造业的发展&#xff0c;贴片元器件的体积 变小&#xff0c…

AOSP 编译

AOSP清华镜像站 [2023-11-21 20:44:21] 内存太小导致编译失败&#xff0c;这里通过删除原来的 swap 然后创建更大的 swap 来解决 # 首先关闭并删除现存的 swap sudo swapoff /swapfile sudo rm /swapfile# 创建新 swap sudo dd if/dev/zero of/swapfile bs1G count32 sudo c…

亚马逊怎么防止店铺关联?

亚马逊&#xff08;Amazon&#xff09;为了确保公平竞争和防止不当行为&#xff0c;采取了一些措施来防止店铺关联&#xff0c;即通过不同的方式将多个店铺相关联&#xff0c;以获取不正当的竞争优势。以下是一些亚马逊防止店铺关联的主要措施&#xff1a; 同一经营者规定&…

在Anaconda(conda)(命令行/Linux )中新建环境安装python版本,删除环境等

1.在命令行终端新建conda环境 例如新建一个叫love的环境 在Windows的Anaconda Prompt 或 macOS/Linux的终端输入 conda create -n love python3.102.激活环境 conda activate love注&#xff1a;运行conda activate则直接激活anaconda的base环境 3.退出环境 conda deactiva…

VMware workstation搭建与安装AlmaLinux-9.2虚拟机

VMware workstation搭建与安装AlmaLinux-9.2虚拟机 适用于需要在VMware workstation平台安装AlmaLinux-9.2&#xff08;最小化安装、无图形化界面&#xff09;虚拟机。 1. 安装准备 1.1 安装平台 Windows 11 1.2. 软件信息 软件名称软件版本安装路径VMware-workstation 1…

openssl3.2 - 官方demo学习 - client-arg.c

文章目录 openssl3.2 - 官方demo学习 - client-arg.c笔记client-arg.cEND openssl3.2 - 官方demo学习 - client-arg.c 笔记 client-arg.c /*! \file client-argc. *//*! * \noteadd _CRT_SECURE_NO_WARNINGS to VS2019 option *//** Copyright 2013-2023 The OpenSSL Proj…

Pandas实战100例 | 案例 42: 数据过滤

案例 42: 数据过滤 知识点讲解 数据过滤是数据处理中的一个基本任务。在 Pandas 中&#xff0c;你可以使用布尔索引来过滤符合特定条件的数据行。 数据过滤: 通过结合条件表达式&#xff08;例如 df[A] > 2 和 df[B] < 5&#xff09;&#xff0c;可以创建一个布尔索引…

vue3 源码解析(4)— createApp 源码的实现

前言 本文是 vue3 源码分析系列的第四篇文章&#xff0c;在使用 vue3 时&#xff0c;我们需要使用 createApp 来创建一个应用实例&#xff0c;然后使用 mount 方法将应用挂载到某个DOM节点上。那么在调用 createApp 时&#xff0c;vue 再背后做了些什么事情呢&#xff1f;在这…

类和对象---C++

类和对象目录 类和对象1.封装1.1 封装的意义1.2 struct和class区别1.3 成员属性设置为私有1.3.1 联系---判断圆和点的位置关系 2.对象的初始化和清理2.1 构造函数和析构函数2.2 构造函数的分类及调用2.2.1无参构造函数调用2.2.2有参构造函数调用2.2.2.1括号法2.2.2.2显式法2.2.…

微信小程序快速入门02(含案例)

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、页面导航1.…

互联网资讯精选:科技爱好者周刊 | 开源日报 No.145

ruanyf/weekly Stars: 37.4k License: NOASSERTION 记录每周值得分享的科技内容&#xff0c;提供大量就业信息。欢迎投稿、推荐或自荐文章/软件/资源&#xff0c;并可通过多种方式进行搜索。 提供丰富的科技内容每周更新可以提交工作/实习岗位支持投稿和推荐功能 GyulyVGC/…

bootloader学习笔记及SD卡启动盘制作

Bootloader介绍 在操作系统运行之前运行的一小段代码&#xff0c;用于将软硬件环境初始化到一个合适的状态&#xff0c;为操作系统的加载和运行做准备&#xff08;其本身不是操作系统&#xff09; Bootloader基本功能 1、初始化软硬件环境 2、引导加载linux内核 3、给linux…

一个无敌的 Python 文件系统监控库

在软件开发和系统管理领域&#xff0c;经常需要监控文件和目录的变化&#xff0c;以便在文件被创建、修改或删除时触发相应的操作。Python Watchdog是一个强大的Python库&#xff0c;它提供了简单而灵活的方式来监控文件系统的变化。本文将详细介绍Python Watchdog的用法和功能…

旅游数据可视化大屏:一屏掌控,畅游数据之海

随着旅游业的蓬勃发展&#xff0c;如何有效地管理和分析旅游数据成为行业关注的焦点。旅游数据可视化大屏作为一种新兴的技术手段&#xff0c;为旅游业带来了前所未有的机遇和挑战。 旅游数据可视化大屏集成了丰富的数据资源&#xff0c;通过直观的图表、图像和交互界面&#x…

慢 SQL 的优化思路

分析慢 SQL 如何定位慢 SQL 呢&#xff1f; 可以通过 slow log 来查看慢SQL&#xff0c;默认的情况下&#xff0c;MySQL 数据库是不开启慢查询日志&#xff08;slow query log&#xff09;。所以我们需要手动把它打开。 查看下慢查询日志配置&#xff0c;我们可以使用 show …

C++力扣题目654--最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最大二叉树…

【Spring Boot 3】【数据源】自定义JPA数据源

【Spring Boot 3】【数据源】自定义JPA数据源 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是…

使用DevEco Studio导入Har模块,提示“Module Check Failed”—鸿蒙开发已解决

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结总结心得:寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了导入Har模块,提示“Module Check Failed" 的问题。 使用DevEco Studio…

7、防写一个shell 命令解释器

1、代码部分 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_INPUT_LENGTH 100void parse_command(char *command) {// 用于存储解析后的命令和参数char cmd[MAX_INPUT_LENGTH];char args[MAX_INPUT_LENGTH];// 将输入的命令拷贝到…

微信商家转账到零钱,既能单笔又能批量,支持多商户管理

大家好&#xff0c;我是小悟 微信商家转账到零钱的功能大家应该都熟悉吧&#xff0c;为了满足商家向用户微信零钱转账的需求&#xff0c;微信支付推出【商家转账到零钱】服务&#xff0c;方便商户可以一次向单个或多个用户的微信零钱转账。 商家转账到零钱为商户提供了简便、…