攻城师 2019-06-27
HTML给你的网页赋予了结构。它就像是人的骨架那样让你保持站立。首先你需要去学习语法以及它必须提供的一切。你的学习应该聚焦在下面这些东西上:
实践建议:
一旦你学习了HTML基础,至少要制作5个HTML网页。我建议你随便找一个网站,比如看看Github的档案页或者Twitter的登录页。然后把焦点放在恰当地组织内容上。出来的东西可能会很难看,但是暂时别担心,把你的关注点放在恰当的结构上。
现在我们已经学会了如何给网页准备好骨架,接下来就是在此基础上添加一些皮肤让它好看一点了。CSS——级联样式表就是用来美化你的HTML页面的。
实践建议:
一旦你掌握了基础,接下来就应该设计上一步制作的HTML网页。比方说如果你给Github档案编写了HTML页面的话,现在是时候应用CSS来让它的样子看起来像实际的Github资料页面一样了。前面的那5个页面都要拿来试一下。
JavaScript能让你的HTML页面互动性更强。比方说你在网站上看过的所有那些幻灯片、弹出窗口以及广播通知,以及在没有重载页面的情况下重载页面的特定部分,这些都是用JavaScript做的。在这一步中,你将会学习JavaScript的基础来为后面的旅程做好准备——
现在你应该已经感觉到东西像是那么一回事了。如果你按照上面的步骤做下来的话应该鼓励一下。这些是你刚刚学到的一些最重要的东西。
我应该学jQuery吗?
曾经有一段时间每个人都对jQuery疯狂,也有充分的理由;这是一个强大的库,在JavaScript基础上提供了一个封装,让你可以用兼容浏览器的方式执行任何东西。不过那些日子已经一去不复返,现在新项目用它已经不是很多了,但是仍然还有人在用。所以其实jQuery对我们最大的用处其实看源码,它对与dom的操作和交互的源码其实对我们写js代码是有很大的启示作用的。
实践建议:
你可能随时都会感觉自己已经理解了但是如果不练习的话很快就会忘掉。在按照这份路线图去学习的时候,要确保尽可能多地去上手实践。
继续做些响应式网站,用JavaScript增加交互性。你可以添加任何感兴趣的现有的网页上去,但记住要利用上目前学到的一切。
一旦你制作出了一些网站,接下来就是开始做真正的东西了。你可以到github上面找一些项目打开某些开源项目的pull请求。以下就是一些可以去尝试的pull请求:
相关笔记:git笔记
在学习基础内容之后,还需要了解一些技能,主要如下:
相关笔记:npm&yarn笔记
在此之前,如果你要用到一些外部库,如插件或外部的桌面小部件的话,你得手工下载JavaScript和CSS文件并且将它们放到项目里面,然后那些库或者插件发布新版本的时候,你又得下载更新的文件再放到你的项目里面,这是极其麻烦的事情。
具体来说,包管理器就是可以通过命令行,帮助你把外部库和插件放到你的项目里面并在之后进行版本升级,这样就不用手工复制和更新库。现在有的包管理器主要是yarn和npm。这两个中npm先于yarn出现但yarn在包的版本管理强于npm,其具体使用几乎是一样的,一旦学会了使用其中一个,另一个自然也不成问题。
实践建议:
在对包管理器有了基本了解之后,你就可以去安装一些外部库到你前面制作的一些网页上了,比如安装一些提示插件,当用户点击某个按钮时显示提示信息,或者创建一个登录表单用一些表单验证库进行表单验证,或者试试不同的选项看看如何安装不同的版本。
注:记得要看看语义版本控制
预处理器以CSS默认不支持的功能丰富了后者。可选的css预处理语言包括Sass、Less、Stylus等等。我更乐意选择Sass。但是PostCSS最近的发展势头也不错,这属于一个锦上添花的东西,有点类似于CSS的“Babel”。你可以拿来独立使用或者在Sass的基础上叠加。
总之,我的建议是先学Sass,了解less,stylus,等后面有时间了再看看PostCSS。
CSS框架其实并不是什么困难的事,边用边学就行了,推荐在Bootstrap、Materialize和Bulma里面选。如果考虑市场需求的话则是Bootstrap。
随着你的应用不断膨胀,CSS也开始变得混乱难以维系。有多种手段可以对你的CSS进行组织,让它更好地应对伸缩性,比如OOCSS、SMACSS、SUITCSS、Atomic以及BEM,都是很好的css代码组织管理的指导实践。CSS组织是对于复杂庞大的css开发的一个统一固定的 CSS 代码组织和管理规范。包括 CSS 样式的命名规则,你应该了解它们之间的不同,但是我更偏好BEM。
相关笔记:ESlint笔记
工具可以帮助你进行JavaScript应用的构建/打包以及开发。这一类工具功能主要包括以下三个方面:
实践建议:
恭喜你!你现在可以称自己为75%的现代JavaScript开发者了。现在继续用你学到的东西做点什么出来。也许可以做个库将来用到Sass和JavaScript上。然后用Webpack将Sass转换成CSS,用babel转换成ES6代码。一旦你做完了再把它发布到Github和npm上。
其实在一般开发中,这个部分往往是紧挨着基础部分的,之所以放在Sass、构建工具和包管理器后面,是因为在框架中你全都会用上那些东西。
框架也有好些选项。不过目前比较常用的是React、Vue和Angular。最近对React.js的需求越来越旺盛。然而,前面列的这几个你随便选一个都不会错。个人会选React或者Angular。不过特别说明一下,作为初学者也许会发现相对而言Angular会容易点,因为它支持几乎一切立即可用的东西,比如支持延迟加载的强大路由器,支持拦截器的HTTP客户端,依赖注入,组件CSS封装等而不需要关心选择外部库的问题。不过React在社区方面无疑更有优势,而且Facebook一直都在努力改进它。
一旦选择框架,当然还有其他一些东西需要你学的。
需要注意的是,Redux、Mobx以及Rx.js都不是跟这些框架绑死到一起的,你也可以用到各种JavaScript应用里面。此外,如果选择了Angular的话,确保你用的是Angular 2+而不是Angular 1+,这里对vue也是一样的,vue2.0与vue1.0也有细微的区别。
实践建议:
现在已经知道了开发现代JavaScript应用所需的一切。可以选择学习的框架做一个项目出来以便练习。
做完之后,再去看看如何衡量和改进性能。比方说可以看看Interactivity Time、Page Speed Index以及Lighthouse Score等。
一旦完成了上述所有步骤,再来学习一下service worker以及如何制作渐进式web应用。
渐进式web应用(PWA)是指可以在任何浏览器上执行的支持互联网的应用程序,它是由服务器端脚本(PHP和ASP)和客户端脚本(JavaScript和HTML)组成的。Service Worker则是位于客户端(浏览器)和服务器之间的代理。PWA 有以下优点:
相关笔记:QUnit笔记
应用测试有很多工具,各自的用途也不一样。我本人经常是组合使用Jest、Mocha、 Karma及Enzyme。然而,在开始选择工具之前,最好是首先理解有哪些不同的测试类型,看看所有的选项情况,然后从中再选择最适合需求的一个。
单元测试:
JS里面有许多可以供我们选择进行单元测试的框架。比如,Mocha, Selenium, jasmine 和 QUnit。本文将重点讲述Qunit,Qunit 由开发了许多大名鼎鼎的js库,包括了的jQuery 、jQuery UI等的Jquery团队(jQuery team)开发。
静态类型检查器帮助给JavaScript增加类型检查。你不需要学习这些,不过这些东西可以赋予你超能力,而且学习起来也很快,几个钟头就行了。这方面主要有TypeScript 和 Flow。我喜欢TypeScript ,不过可以两个都看看再选喜欢的。
目前为止,你所学到的技能应该足够你找到一个“前端工程”的位置了。但还可以在选定的任何框架内再学学服务器端渲染的知识。有不同的选项可选,这要取决于你用什么样的框架。
学习前端的过程如果能了解后端是如何运作的将会有利于理清思路,况且现在nodejs发展日益强大,前端的MVC框架也更偏向逻辑化而不是简单的html页面,所以做一个小的全栈项目会很有意义,可以从nodejs入手,mysql数据库也比较简单轻量,然后可以尝试了解一下javaweb,或者pyhton的django框架。
小结
这份路线可能还会有遗漏的地方,但是足以应付任何“前端工程”角色之所需。还要记住的是,关键是尽可能多地练习。一开始你可能会觉得很吓人,总感觉自己没有掌握,但这是正常的,慢慢你就会觉得自己变得越来越好。还有,陷入困境时别忘了寻求帮助,你会惊喜地发现有多少人愿意帮助你的。
英文:Kamran Ahmed 译文:36氪,转自微信公众号,在博主自身理解上有所改动,侵删