前言

2009 年 11 月 8 日,在欧洲 JSConf 大会上,Ryan Dahl 第一次正式向业界宣布了 Node.js 的面世,使 JS 语言书写后端应用程序成为了可能。在随后的几年里,Node.js 受到了 JavaScript 社区的狂热追捧,前端行业也因此进入了一个全新的工程化和全栈时代。回顾历史,总会让人心潮澎湃。在这股浪潮中,有无数的人和项目在这座丰碑中刻下了自己的名字:React、Vue、Yeoman、RequireJS、Backbone、Antd、Webpack、Mocha、Eslint 等等。在这些知名项目的熠熠光辉下,我们可能会忽略为 Node.js 生态的繁荣之下建立不世之功的 NPM,它才是当之无愧的肱骨重臣。

NPM 生于 2010 年 1 月,它从出生就背负了让 Node.js 社区更加繁荣的使命。NPM 致力于让 JS 程序员能够更加方便地发布、分享 Node.js 类库和源码,并且简化模块的安装、更新和卸载的体验。

从今天(2019 年)这个时间节点来看,NPM 无论从知名度、模块数量、社区的话题数量来看,都算得上是一骑绝尘,将其他语言的模块仓库远远甩在了后面。

开发一个高质量的前端组件,这些姿势一定要知道

数据来源: moudlecounts

NPM 的生态既已如此成熟,按说开发者对于 NPM 包的发布和维护应该非常熟悉才是,但事实真的是这样吗?环顾身边的 FE,没有发过任何 NPM 包的同学大有人在,已经发过包的同学也有相当一部分并未考虑过如何才算规范、高质量地发布一个包。

如今 NPM 的模块数量已上升至 100W,在这样一个 JavaScript 组件化开发时代,除了能找到好用的组件,我们自然也需要了解如何才能成为创造这个时代的一员。而第一步就是要知道并掌握如何规范地、负责任地发布一个 NPM 包?

这就是本文接下来的主要内容。

开发一个高质量的前端组件,这些姿势一定要知道

《蜕变》 | 2019 年"十一",作者拍摄于雨岔峡谷。

一、组件化思考

发布人生中第一个 NPM 组件虽然只是在终端命令行中潇洒地敲下npm publish,静等成功通知即可,但这从 0 到 1 的跨越却并非易事。这个行为背后的始作俑者是开发者大脑中开始萌发组件化思维方式,开始去思考何为组件?为什么要发布组件?这些更深层次的问题。

组件的存在的终极意义是为了复用,一个组件只要具备了被复用的条件,并且开始被复用,那么它的价值才开始产生。组件复用的次数越高、被传播的越广,其价值就越大。而要实现组件的价值最大化,需要考虑以下几点:

  1. 我要写一个什么组件?组件提供什么样的能力?
  2. 组件的适用范围是什么?某个具体业务系统内还是整个团队、公司或者社区?
  3. 组件的生产过程是否规范、健壮和值得信赖?
  4. 组件如何被开发者发现和认识?

以上四点中,前两点是生产组件必须要思考的问题;第四点是组件如何推广运营的问题,这是另外一个话题,本文不展开探讨;第三点是开发者的基本素养,它决定了开发者如何看待这个组件,也间接暴露了开发者的素养和可信赖程度。

二、组件开发的最佳姿势

一个优秀的组件除了拥有解决问题的价值,还应该具备以下三个特点:

  1. 生产和交付的规范性;
  2. 优秀的质量和可靠性;
  3. 较高的可用性。

只有三者都能满足才可以称其为优秀组件,否则会给使用者带来各种各样的困惑:经常出 Bug、坑很多、不稳定、文档太简单、不敢用等等。

2.1 规范性

2.1.1 目录结构

事实上,社区并没有一个官方的或者所有人都认同的目录结构规范,但从耳熟能详的知名项目中进行统计和分析,可以得出一个社区优秀开发者达成非官方共识的一个目录结构清单:

├─ test // 测试相关
├─ scripts // 自定义的脚本
├─ docs // 文档,通常文档较多,有多个 md 文档
├─ examples // 可以运行的示例代码
├─ packages // 要发布的 npm 包,一般用在一个仓库要发多个 npm 包的场景
├─ dist|build // 代码分发的目录
├─ src|lib // 源码目录
├─ bin // 命令行脚本入口文件
├─ website|site // 官方网站相关代码,譬如 antd、react
├─ benchmarks // 性能测试相关
├─ types|typings// typescript 的类型文件
├─ Readme.md // 仓库介绍或者组件文档
└─ index.js // 入口文件

以上目录清单是一个比较完整的清单,大多数组件只需根据自己的需求选择性地使用一部分即可。一份几乎适用于所有组件的最小目录结构清单如下:

├─ test // 测试相关
├─ src|lib // 源码目录
├─ Readme.md // 仓库介绍或者组件文档
└─ index.js // 入口文件

2.1.2 配置文件

这里的配置文件主要指的是各种工程化工具所依赖的本地化的配置文件,以及在 GitHub 上开源所需要声明的一些文件。一份比较全的配置文件清单如下:

├─ .circleci // 目录。circleci 持续集成相关文件
├─ .github // 目录。github 扩展配置文件存放目录
│ ├─ CONTRIBUTING.md
│ └─ ...
├─ .babelrc.js // babel 编译配置
├─ .editorconfig // 跨编辑器的代码风格统一
├─ .eslintignore // 忽略 eslint 检测的文件清单
├─ .eslintrc.js // eslint 配置
├─ .gitignore // git 忽略清单
├─ .npmignore // npm 忽略清单
├─ .travis.yml // travis 持续集成配置文件
├─ .npmrc // npm 配置文件
├─ .prettierrc.json // prettier 代码美化插件的配置
├─ .gitpod.yml // gitpod 云端 IDE 的配置文件
├─ .codecov.yml // codecov 测试覆盖率配置文件
├─ LICENSE // 开源协议声明
├─ CODE_OF_CONDUCT.md // 贡献者行为准则
└─ ... // 其他更多配置

以上配置可以根据组件的实际情况、适用范围来进行删减。一份在各种场景都比较通用的清单如下:

├─ .babelrc.js // babel 编译配置
├─ .editorconfig // 跨编辑器的代码风格统一
├─ .eslintignore // 忽略 eslint 检测的文件清单
├─ .eslintrc.js // eslint 配置
├─ .gitignore // git 忽略清单
├─ .npmignore // npm 忽略清单
├─ LICENSE // 开源协议声明
└─ ... // 其他更多配置

上述清单移除了只有在 GitHub 上才用得到的配置,只关注仓库管理、发包管理、静态检查和编译这些基础性的配置,适用于团队内部、企业私有环境的组件开发。如果要在 GitHub 上维护,则还需要从大清单中继续挑选更多的基础配置,以便可以使用 GitHub 的众多强大功能。

2.1.3 package.json

如果说NPM官方给出了一个发包规范的话,那么这个规范就是package.json文件,这是发包时唯一不可或缺的文件。一个最精简的 package.json 文件是执行npm init生成的这个版本:

{"name": "npm-speci-test", // 组件名"version": "1.0.0", // 组件当前版本"description": "", // 组件的一句话描述"main": "index.js", // 组件的入口文件"scripts": { // 工程化脚本,使用 npm run xx 来执行"test": "echo \"Error: no test specified\" && exit 1"},"author": "", // 组件的作者"license": "ISC" // 组件的协议
}

有这样一个版本的 package.json 文件,我们就可以直接在该目录下直接执行npm publish发布操作了,如果 name 的名称在 npm 仓库中尚未被占用的话,就可以看到发包成功的反馈了:

$ npm publish
+ npm-speci-test@1.0.0

但光有这些基础信息肯定是不够的,作为一个规范的组件,我们还需要考虑:

  1. 我的代码托管在什么位置了;
  2. 别人可以在仓库里通过哪些关键词找到组件;
  3. 组件的运行依赖有哪些;
  4. 组件的开发依赖有哪些;
  5. 如果是命令行工具,入口文件是哪个;
  6. 组件支持哪些 node 版本、操作系统等。

一份比较通用的 package.json 文件内容如下:

{"name": "@scope/xxxx","version": "1.0.0","description": "description:xxx","keywords": "keyword1, keyword2,...","main": "./dist/index.js","bin": {},"scripts": {"lint": "eslint --ext ./src/","test": "npm run lint & istanbul cover _mocha -- test/ --no-timeouts","build": "npm run lint & npm run test & gulp"},"repository": {"type": "git","url": "http://github.com/xxx.git"},"author": {"name": "someone","email": "someone@gmail.com","url": "http://someone.com"},"license": "MIT","dependencies": {},"devDependencies": {"eslint": "^5.2.0","eslint-plugin-babel": "^5.1.0","gulp": "^3.9.1","gulp-rimraf": "^0.2.0","istanbul": "^0.4.5","mocha": "^5.2.0"},"engines": {"node": ">=8.0"}
}
  • name属性要考虑的是组件是否为 public 还是 private,如果是 public,要先确认该名称是否已经被占用,如果没有占用,为了稳妥起见,可以先发一个空白的版本;如果是 private,则需要加上 @scope 前缀,同样也需要确认名称是否已被占用。
  • version属性必须要符合 semver 规范,简单理解就是:
  • 第一个版本一般建议用 1.0.0;
  • 如果当前版本有破坏性变更,无法向前兼容,则考虑升第一位;
  • 如果有新特性、新接口,但可以向前兼容,则考虑升第二位;
  • 如果只是 bug 修复,文档修改等不影响兼容性的变更,则考虑升第三位。
  • keywords会影响在仓库中进行检索的结果。
  • main入口文件的位置最好可以固定下来,如果组件需要构建,建议统一设置为./dist/index.js, 如果不需要构建,可以指定为根目录下的index.js。
  • scriptsscripts 通常会包含两部分:通用脚本和自定义脚本。无论是个人还是团队,都应该为通用脚本建立规范,避免过于随意的命名 scripts;自定义脚本则可以灵活定制,比如:
  • 通用 scripts:start、lint、test、build;
  • 自定义 scripts:copy、clean、doc 等。
  • repository属性无论在私有环境还是公共环境,都应该加上,以便通过组件可以定位到源码仓库。
  • author 如果是一个人负责的组件,用 author,多个人就用contributors。

更详细的 package.json 文件规范可以参见 npm-package.json。

2.1.4 开发流程

很多同学在开发组件时都会使用 master 分支直接进行开发,觉得差不多可以发版了就直接手动执行一下npm publish,然后下一个版本,继续在 master 上搞。

这样做是非常不规范的,会存在很多问题,譬如:

  1. 正在开发一个比较大的版本,此时当前线上版本发现一个重要 bug 需要紧急修复;
  2. 没有为每一个发布的版本指定唯一的 tag 标签以便回溯。

git 的 workflow 有很多种,各有适合的场景和优缺点。开发组件大多数时候是个人行为,偶尔是 team 行为,所以不太适合用比较复杂的流程。个人观点是,如果是在 GitHub 上维护的开源组件,则参照 GitHub 流程;如果是个人或者公司内私有环境,只要能保障并行多个版本,并且每一个发布的版本可回溯即可,可以在 GitHub 流程上精简一下,不区分 feature 和 hotfix,统一采用分支开发,用 master 作为线上分支和预发分支,开发分支要发版需要预先合并到 master 上,然后在 master 上 review 和单测后直接发布,并打 tag 标签,省略掉 pull request 的流程。

2.1.5 commit && changelog

一个组件从开发到发布通常会经历很多次的代码 commit,如果能在一开始就了解 git commit 的 message 书写规范,并通过工具辅助以便低成本地完成规范的实践落地,则会为组件的问题回溯、了解版本变更明细带来很大的好处。我们可能都见过 Node.js 项目的 changelog 文件:

开发一个高质量的前端组件,这些姿势一定要知道

 

非常规范地将当前版本的所有关键 Commit 记录全部展示出来,每一条 commit 记录的信息也非常完整,包含了:commit 的 hash 链接、修改范围、修改描述以及修改人和pull request 地址。试想一下,如果前期 commit 阶段没有很好的规范和工具来约束,手工完成这个工作需要花多长时间才能搞定呢?

目前社区使用最广泛的 commit message 规范是:Conventional Commits,由 Angular Commit 规范演变而来,并且配备了非常全的工具:从 git commit 命令行工具 commitizen,到自动生成 Changelog 文件,以及 commitlint 规范验证工具,覆盖非常全面。

2.2 质量和可维护性

开发组件的出发点是为了复用,其价值也体现在最大程度的复用上。团队内部的组件可能会在整个团队的多个系统间复用;公司内部通用的组件,可以为整个公司带来开发成本的降低;像react、antd这样的优秀开源组件,则会为整个社区和行业带来重大的价值。

组件是否可以放心使用,一个最简单直接的评判标准就是其质量的好坏。质量的好坏,除了上手试用以外,一般会通过几个方面来形成判断:

  1. 是否有高覆盖率的单元测试用例?
  2. 源码是否有规范的编码风格和语法检查?
  3. 源码是否使用了类型系统?

这些都直接决定了开发者对这个组件的评价。试想一下,如果开发了一个公共组件,没有规范的开发流程和编码风格检查,也没有单元测试,随手就发布了带 Bug 的版本。此时用户第一次安装使用时就报错,这会让开发者对组件产生强烈的不信任感,甚至这种不信任感会波及到作者本身。

因此,一个规范且合格的组件,至少要在保障组件的质量上做两件事情:1)引入 JavaScript 代码检查工具来规范代码风格和降低出错概率;2)引入单元测试框架,对组件进行必要的单元测试。此外,类型系统(TypeScript)的加入,会帮助组件提高代码质量和可维护性,是组件开发时的推荐选择。

2.2.1 JavaScript 检查工具

JavaScript 语言第一个检查工具是由前端大神 Douglas Crockford 在 2002 年发布的 JSLint,在后续前端行业高速发展的十几年间逐渐演变出了 JSHint 和 ESLint 两个检查工具。关于这三个工具的演变历史,可以参考尚春同学在知乎发表的一篇文章:《JS Linter 进化史》。本文不再赘述,我们可以通过 Google trends 来简单了解一下这三个工具的热度,这里还加上了一个 JSCS 的对比:

开发一个高质量的前端组件,这些姿势一定要知道

 

可以看到,在过去一年内,全球范围内用户在 Google 搜索这些关键词的热度情况,这个图和身处在前端行业的感受是一致的。因此在 JavaScript 检查工具的选择上,可以毫不犹豫地选择 ESLint。

实际使用 ESLint 时有几点需要考虑:

  1. 无论团队还是个人,都需要就配置规范达成认知和共识,以便可以将配置沉淀下来,作为通用的脚手架和规范。
  2. 对于不同的组件类型,譬如 react 或者 vue,各有自己独特的语法,需要特定的 ESLint 插件才可以支持,而和框架无关的组件,譬如lodash,则不需要这些插件。因此如何对配置进行分类和抽象,以便沉淀多套配置规范,而不必每次开发组件都需要重新对配置进行调整和修正。一个比较常规的做法是把组件按照应用的端(浏览器、Node、通用、Electron、...)和运行时依赖的框架(React、VUE、Angular 等)来进行配置的组合。
  3. 借助 IDE 的插件来实现自动修复以便提高效率。
  4. 如果是团队共同的规范,还需要形成一套规范变更的流程,以便组员对规范有争议时,可以有固定的渠道去讨论、决议并最终落实到规范中。
  5. 引入了 ESLint,还需要考虑是否将 ESLint 加入到验收流程中,以及如何加入验收流程。

2.2.2 单元测试和覆盖率

一直以来对于业务类的项目要不要写单测这个问题,个人的选择是可以不写。互联网倡导敏捷开发,快速迭代上线试错,需求变化太快,而为前端代码写单测本身的成本可能并不亚于代码本身。

但是组件的情况就完全不同了,组件是一组边界清晰、效果可预期的接口和能力的集合。而且和业务类代码相比,组件更具备通用性,也就是说不太会随着业务的变更而变更。并且组件的升级通常会对依赖组件的系统造成潜在影响,每一个版本的发布都理应对功能进行详尽的回归测试,以保障发布版本的质量。由于组件的测试通常依靠开发者自己保障,不会有专业的 QA 资源配备,因此单元测试就是最好的解决方案了。

JavaScript 的单元测试解决方案非常之多,呈百花齐放、百家争鸣的态势,耳熟能详的譬如:Jasmine、Mocha、Jest、AVA、Tape等,每一个测试框架都有其独特的设计,有些是开箱即用的全套解决方案,有些自身很简约,还需要配合其他库一起使用。

事实上,这些框架并无绝对的好坏,如何选择完全取决于个人和团队的喜好。这有一篇测试框架评测的文章,不妨一读:《JavaScript unit testing frameworks: Comparing Jasmine, Mocha, AVA, Tape and Jest [2018]》。

另外,我们依然可以通过 GitHub 上的 star 数和 Google trends 上的搜索量来略窥流行趋势一二。

开发一个高质量的前端组件,这些姿势一定要知道

 

Google trends 在中国的数据:

开发一个高质量的前端组件,这些姿势一定要知道

 

Google trends 在美国的数据:

开发一个高质量的前端组件,这些姿势一定要知道

 

可以看出 Jest 从 2014 年发布以来,增长势头是最猛的,并在短短 3 年内超过了其他老牌对手,成为目前最炙手可热的 Test Framwork。

除了测试框架选型以外,还有一个比较重要的指标要关注,就是测试覆盖率。推荐使用 nyc, 很多同学可能还用过一个名字比较特殊的库:istanbul。这两个库之前的渊源可以看下面这个 Issue 了解一下。

https://github.com/istanbuljs/nyc/issues/524

2.2.3 类型系统

如今的 JavaScript 已经不是原来那个在浏览器写写动效和交互的愣头小子了,它已经在 Web、Server、Desktop、App、IoT 等众多场景中证明了自己的价值,证明了自己可以被用来解决复杂的问题。事实上,JavaScript 正是通过将众多优秀的高质量组件、框架进行有机组合来提供这种能力的。

但是值得深思的是,JavaScript 采用了动态弱类型的设计,过于灵活的类型转换往往会带来一些不好的事情。试想这样的场景:

  1. 调用一个组件的 API 函数,却不清楚这个函数的参数类型,只能自己去撸代码;
  2. 对一个组件重要函数的参数做了优化重构,却无法评估影响面。

这些问题在强类型语言中有很好的解决方案,很多可能的错误会在编译期就被发现,很多改动的影响也会第一时间就被 IDE 告警。

事实上,越来越多的知名组件库已经开始引入强类型系统来辅助提高代码的质量和可维护性,比如 Vue.js、Angular、Yarn、Jest 等等。如果你想让自己具备类型思维,让组件具备更好的质量和可维护性,可以考虑把类型系统加到组件的脚手架中去。

目前可选的为 JavaScript 增加强类型检查的解决方案有 FaceBook 的 Flow 和 Microsoft 的 TypeScript,从当下的流行趋势来看,TypeScript 是绝对的首选。

2.3 可用性

组件的可用性,主要指的是从组件的使用者角度来看待组件的使用体验:

  • 组件的文档是否完善且易于阅读?
  • 组件暴露的 API 是否有详细且规范的输入输出描述?
  • 是否有可以直接运行或者借鉴的 Demo?
  • 文档是否有考虑国际化?

2.3.1 文档

一个好的组件文档至少应该具备以下内容结构:一句话描述组件是什么,解决什么问题# Usage
// 如何安装和使用,提供简单并且一目了然的示例# API 文档
// 提供规范且详细的 API 接口文档,包括示例代码或者示例链接# 补充信息,譬如兼容性描述等
// 如果是浏览器端组件,最好补充一下兼容性的支持情况;如果是 Node 端组件,也需要描述一下支持的 Node.js 版本范围# ChangeLog
// 描述各个版本的重要变更内容以及 commit 链接# 贡献、联系作者、License 等
// 如果组件希望他人一起参与贡献,需要有一个参与贡献的指南;除此之外,最好再提供一个可以直接联系上作者的方式

很多优秀的开发者可以很好地驾驭代码,但对如何写好一份组件文档却有些苦恼,这是因为代码是给自己看的,文档是给用户看的,这两种思维方式之间存在天然的差异。写文档时,需要换位思考,甚至可以把用户当小白,尽可能为小白考虑的多一些,如此可以提高文档的可读性,降低上手难度和使用的挫败感。

2.3.2 DEMO

对一个组件而言,Demo 的重要性不言而喻,还记得 Node.js 那个经典的几行代码创建一个 http server 的招牌式 demo 吗?可以说它几乎成为了 Node.js 的招牌和广告。

组件的 Demo 和文档都是为了可用性负责,但应该互有侧重,相得益彰。文档侧重于介绍关键信息、Demo 侧重于交付具体应用场景中的用法。

对于比较小的组件,这两者可以合二为一;对于 demo 代码量较多,且有多种使用方式和场景的情况,建议在 examples 目录下为每一种场景写一个可以直接运行的 Demo。

结语

组件是开发者创造的产品,在这个产品的生命周期中,第一次发布只是一个开始而已。如何让更多用户关注到,并且成为它的忠实用户,乃至参与贡献才是接下来要重点解决的问题。关于这个话题,本文就点到为止了,欢迎大家在下面留言分享自己在组件推广方面的经验和技巧。

因本人能力的局限性,文中难免有解读不正确之处,盼望大家可以交流指正!

想了解更多技术知识欢迎评论区留言或私信我!

加入Web前端学习交流群:583818653, 即可免费领取大厂前端面试经验,群内免费获取学习教程!

点 我 直 接 入 群!

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

相关文章

  1. 实习程序员拿下9家大厂的前端校招offer,分享月薪破万的成功秘诀

    我就读于北京理工大学软件工程专业,是一名大四学生。从大一开始投入以前端为主的全栈开发,独立开发过多个中型和小型项目 在学校里读书的时候,我就是一个闲不住的人。最近因为一个偶然的契机,接触到了校招季,最后定下…...

    2024/4/20 14:56:07
  2. 【转】什么是全栈工程师【译】

    最近“知乎”上在热烈讨论一则传闻,说Facebook在招聘所谓的“全栈工程师”,要求应征者对开发堆栈的每个方面都有所掌握。那究竟何为 “全栈工程师”呢?从字面上来理解,全栈工程师必须熟悉开发堆栈的每一个层次,或者至少…...

    2024/4/19 16:25:57
  3. 有割双眼皮的朋友吗

    ...

    2024/4/20 1:59:31
  4. android的启动原理---ActivityThread

    ActivityThread对于一个应用来说是点击lancher后启动的入口他里面的main方法就是jvm启动的地方public static final void main(String[] args) { -----------------main方法 jvm调用SamplingProfilerIntegration.start();……Looper.prepareMainLooper();if (sMainThreadH…...

    2024/4/21 15:30:33
  5. 埋线双眼皮会影响视力吗

    ...

    2024/4/21 15:30:32
  6. 沈阳双眼皮价格

    ...

    2024/4/21 15:30:31
  7. 双眼皮多久可以上网

    ...

    2024/4/28 6:47:48
  8. 对Angular中的生命周期钩子的理解

    什么是生命周期钩子 简单点来说生命周期钩子就是Angular中一个组件从被创建当销毁期间的一些有意义的关键时刻.这些关键时刻在Angular中被Angular核心模块angular/core暴露出来,赋予了我们在它们发生时采取行动的能力. 有哪些生命周期钩子 Angular中从一个组件的创建到销毁一个…...

    2024/4/21 15:30:29
  9. 孩子多大可以做北京双眼皮治愈?星

    ...

    2024/4/27 17:45:04
  10. 贵阳割双眼皮美贝儿于

    ...

    2024/4/28 1:10:24
  11. 成都米兰柏羽深圳美杜莎双眼皮多少钱

    ...

    2024/4/21 15:30:27
  12. 成都米兰柏羽割双眼皮怎么样

    ...

    2024/4/21 15:30:25
  13. 米兰柏羽做双眼皮怎么样

    ...

    2024/4/21 15:30:24
  14. input输入框实时监控 并实现延迟发起请求

    input输入框实时监控 并实现延迟发起请求 实时监控input代码 autoWatch:function(){var thatthis;var $ele$(this.element);$ele.on(input propertychange,function(){//console.log($(this));var oldValue$(this).data(oldValue);var newValue$(this).val();if(oldValuenewVal…...

    2024/4/27 23:10:16
  15. 米兰柏羽成都米兰柏羽割成都米兰割一般米兰割米兰柏羽哪个医生双眼皮好

    ...

    2024/4/21 23:30:37
  16. 埋线双眼皮手术的原理

    ...

    2024/4/27 21:56:17
  17. 韩系韩式微创双眼皮价目

    ...

    2024/4/28 1:21:06
  18. 双眼皮手术疼痛程度

    ...

    2024/4/28 8:14:53
  19. angular路由详解一(基础知识)

    本人原来是iOS开发,没想到工作后,离iOS开发原来越远,走上了前端的坑。一路走来,也没有向别人一样遇到一个技术上的师傅,无奈只能一个人苦苦摸索。如今又开始填angular的坑了。闲话不扯了。(本人学习是根据官…...

    2024/4/26 22:56:42
  20. 聂波重庆做双眼皮是天妃好还是当代好

    ...

    2024/4/21 4:24:47

最新文章

  1. HTML实体编码

    HTML实体编码是HTML中用来替换特殊字符的一种机制&#xff0c;以确保这些特殊字符在浏览器中能够正确显示 这些特殊字符在HTML中具有特定的含义&#xff0c;比如小于号“<”用来表示HTML标签的开始&#xff0c;大于号“>”用来表示HTML标签的结束&#xff0c;而引号可能…...

    2024/4/28 15:54:15
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Web大并发集群部署之集群介绍

    一、传统web访问模型 传统web访问模型完成一次请求的步骤 1&#xff09;用户发起请求 2&#xff09;服务器接受请求 3&#xff09;服务器处理请求&#xff08;压力最大&#xff09; 4&#xff09;服务器响应请求 传统模型缺点 单点故障&#xff1b; 单台服务器资源有限&…...

    2024/4/23 0:10:31
  4. 权限提升-Linux系统权限提升篇VulnhubRbash绕过DockerLXD容器History泄漏shell交互

    知识点 1、普通用户到Linux-泄漏-History 2、普通用户到Linux-限制-Rbash绕过 3、普通用户到Linux-容器-LXD&Docker 4.Linux系统提权-web/普通用户-docker逃逸&提权&shell交互 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及…...

    2024/4/26 12:45:26
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57