为什么JavaScript开发如此疯狂
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!
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/ptdg4yteF1
——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应用程序?那是我之后将要专注讨论的内容,敬请期待!
译文链接:http://www.codeceo.com/article/why-javascript-is-crazy.html
英文原文:WHY JAVASCRIPT DEVELOPMENT IS CRAZY
翻译作者:码农网 – 小峰
[ 转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]
为什么JavaScript开发如此疯狂的更多相关文章
- 为何说 JavaScript 开发很疯狂
[编者按]本文作者为 Sean Fioritto,主要阐述了 JavaScript 开发为何让人有些无从下手的根本原因.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 网络开发乐趣多多!Ja ...
- Windows Store App JavaScript 开发:简单对象绑定
简单对象绑定是一种基本的绑定类型,可以实现将一个对象中的数据绑定到HTML元素的属性.下面通过一个示例来演示如何使用HTML5和JavaScript开发一个实现简单对象绑定的Windows应用商店应用 ...
- Windows Store App JavaScript 开发:页内导航
页内导航是在一个页面内根据需要加载其他页面的内容,在开发基于JavaScript的Windows应用商店应用时,可以使用WinJS.Navigation.navigate函数传递要加载的页面地址并使用 ...
- React Native – 使用 JavaScript 开发原生应用
前不久,Facebook 在F8开发者大会上正式开源了 React Native 项目.不过目前只有 iOS 版,Android 版还需要再等一段时间,这是最新的用 JavaScript 语言开发原生 ...
- JavaScript开发规范要求
http://www.cnblogs.com/webflash/archive/2010/06/11/1756255.html 作为一名开发人员(WEB前端JavaScript开发),不规范的开发不仅 ...
- ArcGIS API for JavaScript开发环境搭建及第一个实例demo
原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...
- JavaScript 开发规范要求详解
作为一名开发人员(We前端JavaScript开发),不规范的开发不仅使日后代码维护变的困难,同时也不利于团队的合作,通常还会带来代码安全以及执行效率上的问题.本人在开发工作中就曾与不按规范来开发的同 ...
- 使用SeaJS实现模块化JavaScript开发
前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等JavaScript框架不同,SeaJS不会扩展封 ...
- JavaScript开发规范
作为一名开发人员(WEB前端JavaScript开发),不规范的开发不仅使日后代码维护变的困难,同时也不利于团队的合作,通常还会带来代码安全以 及执行效率上的问题.本人在开发工作中就曾与不按规范来开发 ...
随机推荐
- 用vld分析C++内存泄漏
最近发现项目里有内存泄漏,到网上搜了一些资料,决定用vld来分析解决这个问题. 直接在vs里的"工具和扩展"中搜索vld,然后下载安装就可以了. 我下载下来的是个exe文件,安装在 ...
- 面试题:m个长度为n的ordered array,求top k 个 数字
package com.sinaWeibo.interview; import java.util.Comparator; import java.util.Iterator; import java ...
- cursor_sharing
CURSOR_SHARING Property Description Parameter type String Syntax CURSOR_SHARING = { EXACT | FORCE } ...
- 微软CSS面试全记录
先是会有一轮简单的电话技术面试,聊的比较随意,什么都会问,跟职位相关的都有.然后会发一些材料说是要学习,是windows内存管理相关的东西. 完了就是一轮oral test,和技术没有任何关系,问问为 ...
- uva 812 Trade on Verweggistan
题意: 给w个货架, 每个货架上有bi个货物, 每次只能拿最上面的货物, 每个货物有个价值, 所有货物的售价均为10. 问:能获得的最大利润, 以及能获得这个利润需要多少个货物. (有多种组合时只需输 ...
- 哈希,哈希表,哈希Map
数组: 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1):数组的特点是:寻址容易,插入和删除困难: 链表: 链表存储区间离散,占用内存比较宽松,故空间复杂 ...
- 点击播放js
<div class="videobox" id="videobox"> <img src="temp/pic1.jpg" ...
- bzoj 3153: Sone1 Toptree
3153: Sone1 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 511 Solved: 202[Submit][Status][Discuss ...
- 【POJ 1639】 Picnic Planning (最小k度限制生成树)
[题意] 有n个巨人要去Park聚会.巨人A和先到巨人B那里去,然后和巨人B一起去Park.B君是个土豪,他家的停车场很大,可以停很多车,但是Park的停车场是比较小.只能停k辆车.现在问你在这个限制 ...
- apache整合tomcat部署集群
近日,由于公司项目需要,所以学习了apache整合tomcat以及集群的一些知识. 所以做下笔记日后回顾可以用到. apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求,所以a ...