Explain the Frontend Webdev Ecosystem to Me

twitter logo github logo ・1 min read

讲解JavaScript(5部分系列)

1) Explain React to Me 2) Explain Vue to Me 3) Explain Angular to Me 4) Explain the Frontend Webdev Ecosystem to Me 5) Explain the State of WebAssembly to Me

大家好,我希望在本系列的最新版本中,一些人可以参与前端JavaScript生态系统的其余部分. 我认为我们已经涵盖了三大要素,但是其余的是什么.

这些天前端的主要主题和概念是什么?

twitter logo DISCUSS (23)
markdown guide
 
  • Angular-当妈妈为您打包午餐时
  • 反应-当妈妈打包午餐但忘了布丁时
  • VueJS-当妈妈打包你剩下的比萨吃午餐时
  • 秘银(Mithril)-当妈妈为您打包多个Nutrigen酒吧作为午餐时
  • 斯维尔特(Svelte)-当妈妈打包她称之为"更好的午餐"的东西时,您却不吃东西,因为您只想吃惯自己习惯的东西.
 
 

模具是更好的午餐,但您实际上想吃它

(对不起,我不得不)

 

It's in the same space as Svelte, but Typescript native and compiles into spec-compliant web-components by default.

自从Beta在没有框架的情况下就一直在使用它(或使用模具作为"框架"),这真是太神奇了. 感觉更像是我在编写具有Typescript支持的Vanilla JS.

它也支持主要框架...我只是厌倦了追求升级周期.

我可以将一年前构建的Beta组件与今天的1.x组件放在同一页面上,并且如果旧组件没有损坏,我也不必弄乱它. 我只在需要时升级.

我几乎拥有框架所需的一切,但是我没有传递任何"框架"代码给用户,只有经过编译的原始WC.

由Ionic团队构建,他们使用Ionic V4构建了Ionic V4(但不需要Ionic V4),而且我知道Apple将其用于新的Apple音乐,并且(通过朋友的方式)其他一些大公司也在对其进行评估. ..
模版

 

苗条的时候妈妈会打包很多小吃店,并称其为营养均衡的一餐

 

ELI5,纯基础知识:

  • 有HTML,可构成文档
  • 有CSS,可以为文档设置样式
  • 有JS,可为文档添加功能


  • Vue,Angular和React是Javascript框架,可帮助您更轻松地创建Web应用程序. 您在这里不再区分HTML和JS,因此感觉就像类固醇上的某种神奇的HTML.

  • 打字稿是Javascript的一种形式,语法老师可望着你的肩膀


  • npm is a big bucket with all the code snippets that people smarter than you have made. feel free to use them, but only take whats necessary!

  • Sass / Less / PostCSS使您可以组织CSS,从而可以在大型,复杂的项目中保持理智

  • Babel将您喜欢的现代JS转换为旧标准的JS,即使您叔叔的浏览器(带有蓝色字母e和五个工具栏的浏览器)也可以理解.

  • Webpack将您所有的代码打包到一个可立即部署的网站中.


  • 笑话确保您的代码段一个接一个地工作

  • 赛普拉斯确保您的代码片段可以很好地配合使用

  • Lighthouse确保您不会意外编写太多代码

 

Lighthouse确保您不会意外编写太多代码

我认为您通常需要编写更多代码来提高应用程序性能,从而提高Lighthouse得分.

 

当您在已经损害您的a11y和perf得分的其他代码之上编写代码时,您会这样做.
借助语义HTML,WAI-ARIA和渐进式增强功能从头开始构建,一切都会很好.
我们现在使用的工具,例如适用于所有内容的节点程序包和框架,都不鼓励这种工作方式. 在我们所有的工具混乱中,有些人忘记了网站的性能,并且默认情况下可以访问.

当您在已经损害您的a11y和perf得分的其他代码之上编写代码时,您会这样做.

同意! 我实际上是在考虑这种特定情况. 我不好,我没有正确描述我的论点:)

 

随着时间的流逝,开发人员在许多过程中都遇到了麻烦,例如:

  • 添加/更新/删除库.
  • 后备支持旧版浏览器.
  • 将多个文件捆绑为可用于生产的文件.
  • 自动运行任务.

那时我们看到了NPM,Babel,WebPack和Grunt之类的东西.

不仅如此……我们认为理所当然的部分工具来自类似的斗争,例如浏览器开发工具.

 

这是一个很好的表达方式.

Webdev生态系统的其他部分试图解决的主要难题是什么?

  • " JavaScript 1.0有很多粗糙的边缘" => ecmascript
  • "简单的拼写错误导致令人讨厌的运行时异常" => Typescript
  • "我想在其他平台上使用我的webdev技能,同时仍然访问本机功能" =>电子,对本机做出反应
  • ... 还有什么?
 

想象一下,一个装满剩余的HDMI,USB,电源线的盒子,以及一个随机的LPT或串行(您不记得了)全部缠在一起的盒子. 您知道您有这个盒子,还是有一个盒子,直到您最后说" eff it"并清除了它. 但是你知道我在说什么.

现在想象同样的事情,但它是蛇缠在一起而不是电缆.

现在想象同样的事情,但是那是您剩下的圣诞灯,即使一个灯泡坏了,部分灯仍然无法工作,您仍然可以使用其中的一些.

现在想象一下,他们实际上都在同一个盒子里. 您有一台可以按需制造这些盒子的机器. 您自己的盒装小蛇形灯工厂. 甚至可以为您在盒子上鞠躬.

现在,在包装盒上打上"反应"标签. 您不知道为什么,但是只需这样做.

当前有前端开发环境.

 

ES是用于构建动态Web应用程序的全新基础平台.

  1. 性能 -内置于浏览器中,惊人的0 KB.
  2. 简化 -使用高阶函数(例如映射,缩小和过滤)编写更少的代码.
  3. 灵活 -可以自由混合和匹配您选择的任何编程范例. 选择任何工具来运行测试和构建任务.
  4. 直接参与 -没有关于您的技术堆栈的假设. 我们完全适合您的其余JavaScript代码.
  5. 服务器端 -您可以使用Node在服务器端使用ES .
  6. 异步获取 -我们新的异步数据获取功能称为" Grabber",可让您使用内置的Promise链同时发出请求. 与我们的状态提取显示系统" Cliff-Hanger"兼容.
  7. 组织 -内置模块系统允许代码组织和结构.
  8. 兼容性 -与跨多个设备和平台的所有现代Web浏览器一起使用.
  9. 模板 -使用模板文字对构建模块进行模板化. 结合我们的模块功能来创建可重复使用的组件.
  10. 腕管友好型 -具有解构,扩展运算符,对象文字,箭头功能等功能,我们承诺将节省宝贵的击键次数并减少身体上的痛苦.
  11. 死而复生 -我们对Promises的扩展支持使您摆脱了回调地狱的深渊.
  12. 符合标准 -我们100%符合ECMA制定的标准.

从今天开始! 单击"入门"按钮

 

👏👏👏👏

这应该是vanillaes.com的目标网页

 

想象你有一堆肉和准备好的小肠

您将肉磨碎,喂入肠中,将其绞碎,然后瞧. 你有香肠.

但是香肠反应性还不够. 因此,您将香肠研磨成一堆香肠+肉汞合金,并用它来制作新的-稍有不同的-香肠.

Etvoilà,"现代"前端Web开发 简而言之 香肠.

tl:dr; 哟,我听说你喜欢香肠

 

令我惊讶的是,尚未提到Webassembly(Wasm) .

Wasm旨在从可以运行客户端代码的高级语言进行编译,因此取代了JavaScript的需求.
这允许客户端应用程序以C#,Python或Java等语言编写.
有趣的是,Wasm已经被所有主流浏览器提供并支持.

一些有趣的技术特定链接:

 

这是我在过去5-6年中看到的前端问题,尤其是在React生态系统中. 我在这些库/框架中编写了大量代码后说了这一点. 这不是偏见,而是诚实的观察.

我认为所有前端库/框架在路由,状态管理,类型安全性等概念上都几乎相同.
Angular 2+的编写很好,尤其是针对大型应用程序. 几年前Angular所做的就是React / Vue在过去一年左右的时间里所做的事情.

类型安全 :让我们以静态类型为例,现在每个人都想要Angular内置的类型安全(在React和Vue中都是这样).在React中,同样有Flow / Typescript

状态管理 :说到状态管理,老实说,React生态系统不好. 关于Flux / Redux,thunk,sagas,observables和许多其他中间件的讨论很多. 当有人开始用小组件编写React代码时,并不是那么令人生畏,但是当它开始变得很大时,他们很可能会感到沮丧. Angular和Vue在状态管理方面要好得多,原因是Angular内置了可观察的对象,并且只有ngrx存储库可供学习. 尽管开始时会有相当多的学习曲线,但一旦跨越,就无需担心其他10个库/中间件来做出决定. Vuejs具有vuex,它非常简单易用,在我看来,它是迄今为止最简单的方法.

路由 :这几乎是相同的,除了在React中可以轻松进行动态路由. 对于React来说,它不是很复杂,与其他所有内容相比,这有点缓解.

函数式编程 :随着钩子等的出现,React尝试/尝试近些年来更多地转向函数式编程,而钩子等默认情况下没有角度将组件作为类. 但是除了组件之外,它不会阻止开发人员为应用程序逻辑编写更多的功能代码.

构建大小 :就构建大小而言,Angular不好,但对于Angular 8,它应该稍微好一点. 在构建大小方面,Vue / React更好. 但是,当我们开始添加大量第三方库时,这给开发人员增加了很多负担,使他们无法深入了解JS的细节,并开始进行代码拆分,摇树等工作.那. 但是与此同时,花费时间并不在所有情况下都是值得的.

我认为,编写React代码特别好,尤其是在较小的项目中. 但是,当我们需要更多电池时,很快就会弄脏. 此外,还有很多新的api和新的做事方式一直存在. 这无疑需要大量的时间投入. 坦白地说,考虑到其简单性,编写Vuejs是三个主要框架中最好的. 但是,如果它朝着React的方向发展,那会很糟糕. 最后,Angular并非一无是处. 当工作团队很大时,它绝对适合企业/大型应用程序.

最后,如果我们花费大量时间来决定流量/ redux,类/ hook,thunk,sagas,flow / typescript,那么它肯定会吃掉相当多的时间,而宁愿投资编写应用程序逻辑或为产品添加更多功能. 它并不一定总是围绕开发人员的经验,组织需要从中受益.

 

当您开始意识到JS 很长时间没有内置模块系统时,最容易看到需要做很多事情. 当NodeJS(服务器端JS)出现时,它采用CommonJS作为模块系统,而NPM(第三方软件包)由此诞生. 除非JS通过了build步骤否则前端仍然缺少可靠的模块系统. 使问题复杂化的是,只有较新的浏览器才支持最新版本的JavaScript,因此需要编译新的JS =>兼容的旧JS. 那那把我们留在哪里呢?

  • NPM =>程序包管理器
  • BabelJS / CoffeeScript / PureScript / ReasonML / TypeScript =>将一些新语言编译为ECMAScript5
  • Webpack / Browserify =>一个构建步骤,将所有JS + NPM软件包捆绑为一个捆绑包(它也可以进行代码拆分). Webpack可以做得更好,并将其他东西捆绑在它产生的捆绑包中,例如经过处理的CSS,图像等.

任何其他对话都与库/框架有关.

  • React =>只是一个视图库:不包含电池. 它提供了最大的灵活性
  • Vue =>在React / Angular之间
  • Angular =>用于前端JS / SPA的完整MVC框架(无后端)

有数不胜数的库可以在服务器端或浏览器中运行:这些库称为"同构".

 

阅读我的验尸报告后,我觉得我应该否认这是对JavaScript历史的极大简化.

 

Elm推出的MVU风格的应用程序. 我现在使用F#Elmish. 这是我最喜欢的制作前端应用程序的方法. 我发现它在生产多年后非常可维护,这与我尝试过的每个框架都不一样. (它们起初非常好,但最终变得太混乱了框架抽象而不是我自己的代码.)

 
 

前端框架的流行已经让路,要求学习像函数式编程这样的范例比以前任何时候都要多.

2月27日发布的经典开发文章

Yes, I still fall victim to Imposter Syndrome

Imposter syndrome rears its ugly head again.

Ben Halpern profile image
一位加拿大软件开发人员,认为他很有趣. 他/他.

眼睛疼吗?

dev.to现在具有黑暗模式.

去的"杂项"部分的设置 ,并选择夜间主题 ❤️

by  ICOPY.SITE