本文由码农网– 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!
Web开发太有意思了! 但是JavaScript则……令人望而生畏。
Web开发中其他一切对你而言都是小菜一碟,但当你深入探究JavaScript的时候,不免有一种“众人皆醒你独醉”的悲壮——好像其他人都知道你不知道的一些大的基础的知识内容,并且这些内容可以帮助你理解所有知识。
事实是,的确如此,你遗漏了一些解决问题的重要片段。
并且,前端开发实际上已经陷入了疯狂。
不仅仅是你。
拉过一把椅子,坐下来。到时间写JavaScript应用了。
第一步是准备本地开发环境并运行。那么使用Gulp还是Grunt,等等,不……还有NPM脚本!
使用WebPACK还是Browserify?Require.js?提升到ES6?或者过多地添加Babel到你的预处理?
BDD还是常规单元测试?应该使用什么断言框架?当然从命令行运行测试会很好,所以也许PhantomJS也行?
Angular还是React?Ember?Backbone?
你看了一些React文档,“Redux是JavaScript app可预测的状态容器。”真棒!你一定需要那些中的其中之一。
为什么构建JavaScript应用会如此疯狂?!?
让我来帮助你理解为什么我要说这一切是如此疯狂。让我们从一个例子开始,然后转移到漂亮的图片。
这是React的“Hello, world!”应用。
// main.js var React = require('react'); var ReactDOM = require('react-dom'); ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('example') );
没有完全完成。
$ npm install --save react react-dom babelify babel-preset-react $ browserify -t [ babelify --presets [ react ] ] main.js -o bundle.js
实际上这里有几个步骤缺失了,例如安装browserify,以及在你做好之后实际上需要做什么才能让它运行在网页上,因为这其实不会产生一个能有什么内容的网页。 ˉ\ _(ツ)_ /ˉ
在完成这些之后,你最后还需要一个名为bundle.js的文件,这个文件包含新的React?Hello World应用程序——程序有19,374行代码。而你只需要安装browserify,babelify和react-dom,考量未知的成千上万行代码即可。
所以基本上这是…
Marc几乎已经准备好实施他的“Hello World”React app?pic.twitter.
com/ptdg4yte F1 ——Thomas Fuchs(@thomasfuchs)2016年3月12日
下面就让我们用朴实无华的JavaScript代码写一个Hello World app。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Hello World</title> </head> <body> <div id="container"></div> <script> document.body.onload = function(){ var container = document.getElementById("container"); container.innerHTML = '<h1>"Hello, world!"</h1>'; } </script> </body> </html>
这就成了。 18行代码。你可以复制/粘贴到index.html文件中,双击并把它加载到你的浏览器中。完成。
如果此时你觉得,“等等,React能做的事情比你刚刚写的这个小玩意更多,并且你不可能用那种方法写一个JavaScript app!”你是(大多数时候)对的,但你还需要走一小步才能理解为什么一切都疯了。
下面是我承诺过的图片。
绝大多数你将工作的JavaScript web应用程序,会落在钟形曲线中部的某个位置。并且在中部,如果你从一个完整的React堆栈开始,那么从一开始你就大量过度设计了你的应用程序。
这就是为什么一切都变得疯狂。其中的大多数工具你觉得是你解决问题所必须具备的,但是你一直没有碰到这样的问题,而且以后你也不会碰到。
同一张图片:
因为在默认情况下,每个人都过度设计他们的app,却意识到这一点,使得Javascript的开发状态变得过于繁冗。
你应该如何启动JavaScript应用程序呢?是否应该使用一些类似React或Angular的工具?是否应该使用软件包管理器?如果你不这样做,你应该做什么?测试有必要吗?是否应该用Javascript生成标记?所有这些都是你应该在启动默认情况下的庞大的技术堆栈前,好好问问自己的问题。
当你启动一个JavaScript应用程序时,关键是要在钟形曲线上挑一个点,这个点刚好位于你认为这个app最终可能会到达的复杂程度的前面。
我不会撒谎,验证这一切需要经验。但是这里有一个相当大的甜蜜点可以让你启动大多数的JavaScript应用程序:jQuery加上客户端模板,以及用于连接和缩减产品文件超级简单的构建工具(假如你的后端架构还没有这样做的话)。
如果你知道如何正确地构建Javascript app,那么你就会开始懂得如何、何时以及为什么使用框架或npm/requir/webPack或ES6,什么时候编写测试,什么时候应该费心让你的测试本地运行vs.运行在浏览器中,等等,所有这些问题都会涌现出来。
有兴趣用你的JavaScript开发知识填补那些空白?想要避免不堪重负的感觉以及避免在这个过程中大量过度设计你的JavaScript应用程序?那是我之后将要专注讨论的内容,敬请期待!