前言
Nodeschool是一个非常好的学习JavaScript和Node的平台,它在里面提供了大量的教程,通过做任务的方式让学习者理解某些概念,并且提供参考答案供自查(github源码的solution文件下),建议对基础概念模糊的同学可以去尝试一下这些任务。
learnyounode(node基础)
前言
这是nodeschool的第一个任务,它会让你接触node最基础的几个模块:fs、http、url、net等,也会让你了解node模块化和流的一些概念。
- HELLO WORLD(起手式)
第一个任务,主要是让学习者熟悉环境
- BABY STEPS(process.argv)
这个任务主要是让学习者学习process这个对象,平常我们通过node在命令行里执行各种命令的时候少不了它,而process的argv属性又是重中之重,它存储着外界输入进来的值。
学习者将会通过一个求和的任务熟悉process.argv。
- MY FIRST I/O!(fs.readFileSync)
在这个任务里,学习者将会接触到fs这个模块,以及它的readFileSync方法用来同步读取文件内容。
学习者将会通过打印一个文件中内容行数的任务来熟悉fs.readFileSync。
- MY FIRST ASYNC I/O!(fs.readFile)
和上一个任务相似,学习者在这个任务里将使用fs模块的异步读取文件方法readFile完成任务。
- FILTERED LS(fs.readdir)
这个任务还是和文件有关,只不过不是读取文件了,而是过滤文件名,fs模块的readdir方法将会帮助我们获取文件名,至于过滤拓展名,可能需要使用path模块的extname方法。
学习者将会通过打印出指定目录下的文件列表,并且以特定的文件名扩展名来过滤这个列表来熟悉fs.readdir
- MAKE IT MODULAR(模块化)
node的模块化做的很好,export和import是必备的知识。
这个任务我认为是有点难度的,因为你需要创建两个文件:一个封装好的模块和一个使用者,并且所有逻辑都必须封装的非常好,暴露出来的API也对使用者友好才能通过这个任务。
学习者需要在使用者里定义回调函数,在模块里定义执行逻辑来熟悉模块化。
- HTTP CLIENT(http客户端)
从这个任务开始,我们将会学习node的另一个核心模块:http
学习者将会通过起一个简单的http客户端来熟悉http模块的get方法。
- HTTP COLLECT(http流和管道)
这个任务是上一个任务的增强版,它揭示了node中很重要的一个概念:流,这个概念其实是借鉴于Unix,有输入流和输出流,用于程序各个部分间的协作通信,而衍生出的管道概念是对流进行一些特定操作的工具。
学习者将会通过收集服务器所返回的数据流和pipe方法处理它。可能会用到concat-stream模块收集所有流。
- JUGGLING ASYNC(异步http)
这个任务同样是上一个任务的增强版,它增加了异步概念,可以使用回调或者promise来处理这个异步情况。
- TIME SERVER(tcp与net)
这个任务,我们将会学习net模块(tcp),它的使用方法和http模块类似,不同点主要在于tcp是通过socket通信的。
学习者将会通过使用net模块写入当前的事件来熟悉net模块和tcp服务器。
- HTTP FILE SERVER(http与fs)
在这个任务中,我们将把http模块和文件模块结合使用,文件在node中同样可以以流形式存在(使用fs.createReadStream),所以我们将用流来连接这两个看似毫不相干的模块。
学习者将会通过读入文件流,然后将文件流通过管道输出到http流来体会流的强大作用。
- HTTP UPPERCASERER(http服务器)
这个任务的重点还是流,只不过具体形式是通过起一个http服务器来让学习者更加熟悉流的概念。
学习者将会通过http.createServer起一个简单的http服务器,并且通过管道把流中的数据转换成大写形式来进一步熟悉流在node中的应用。
- HTTP JSON API SERVER(http restful api)
最后一个任务是让我们做一个restful风格的http服务器,即使用json格式的api进行前后端通信。
学习者会用到url模块解析请求报文的url以及pathname,根据不同的请求路由返回不一样的响应报文。
stream-adventure(node中的流)
前言
流是Node中的核心概念,用于协助各个子程序间的合作,这个概念最初出自Unix编程,所以相应的,Node中的流也有管道、可读流、可写流等概念。
-
BEEP BOOP(起手式)
-
MEET PIPE(管道)
-
INPUT OUTPUT(I/O流)
-
TRANSFORM(操作流数据)
-
LINES(管线)
-
CONCAT(汇入流)
-
HTTP SERVER(HTTP服务端流)
-
HTTP CLIENT(HTTP客户端流)
-
WEBSOCKETS(websocket流)
-
HTML STREAM(文本混合流)
-
DUPLEXER(双工流)
-
DUPLEXER REDUX(操作双工流)
-
COMBINER(复杂流合并)
-
CRYPT(加密解密流)
-
SECRETZ(压缩与哈希流以及解析流)
learnyoubash(Unix shell)
前言
Unix的shell命令是一种专用语言,可以让用户自定义任务。
任务
-
HELLO WORLD(起手式)
-
VARIABLES(shell变量)
-
POSITIONAL PARAMETERS(shell位置参数)
-
ARRAYS(shell数组)
-
SHELL EXPANSIONS(shell拓展)
-
STREAMS PIPES AND LISTS(Unix流、管道管线)
-
IF CONDITIONAL STATEMENT(shell if判断)
-
CASE CONDITIONAL STATEMENT(shell case判断)
-
LOOPS(shell循环)
-
FUNCTIONS(shell函数)
-
DEBUGGING(shell调试)
regex-adventure(正则表达式)
前言
正则由Unix和Perl发展过来,具有强大的专用语言特性,是字符串匹配的好帮手,让我们看看js中如何使用正则表达式
-
LITERALLY(直接匹配)
-
ANCHOR START(开始锚点)
-
ANCHOR END(结束锚点)
-
CHARACTER CLASS(字符类别)
-
NEGATED CHARACTER CLASS(字符类别取反)
-
META(.匹配规则)
-
QUANTIFIER(*?+匹配规则)
-
SPLIT(结合split分割字符串)
-
CAPTURE(exec捕获)
-
CAPTURE BREAKWOR(\b边界)
-
ALTERATION(|逻辑或)
-
QUANTIFIED GROUP({}指定匹配数量)
-
QUOTES(/g标志位)
-
BLINK($1...分组)
function-programming(函数式编程)
前言
JS中的函数是一等公民,可以作为参数传递,也可以作为结果返回,自然可以进行函数式编程,Nodeschool提供了一套任务,可以帮助我们理解JS的函数式编程的基础概念。
-
Hello World(起手式)
-
Higher Order Functions(高阶函数)
-
Basic: Map(映射)
-
Basic: Filter(过滤)
-
Basic: Every Some(所有与存在)
-
Basic: Reduce(归纳)
-
Basic: Recursion(递归)
-
Basic: Call(函数调用)
-
Partial Application without Bind(apply调用)
-
Partial Application with Bind(bind调用)
-
Implement Map with Reduce(用reduce实现map)
-
Function Spies(函数间谍)
-
Blocking Event Loop(事件循环)
-
Trampoline(尾调用优化)
-
Async Loops(异步)
-
Recursion(高级递归)
-
Currying(柯里化)
-
Function Call(call高级)
promise-it-wont-hurt(promise特性)
前言
promise是es6最重要的特性之一,对前端控制异步流程非常有帮助。
- warm_up(认识异步)
- fulfill_a_promise(promise的resolve)
- reject_a_promise(promise的reject)
- to_reject_or_not_to_reject(同步转promise)
- always_async(promise永远异步)
- shortcuts(Promise.resolve和Promise.reject)
- promise_after_promise(promise链式调用)
- values_and_promises(promise混合同步值)
- throw_an_error(promise处理错误)
- an_important_rule(promise的catch)
- multiple_promises(模仿Promise.all)
- fetch_json(q-io/http与promise版ajax)
- do_some_work(综合应用promise)
esnext-generation和learn-generators(迭代器和生成器)
前言
迭代器和生成器是ES6借鉴python的高级语法,它们一个在操作数据结构(数组、对象)上,一个在异步操作上大放异彩,作为进阶JS知识的铺垫是非常有帮助的
-
introduction-to-iterators(造一个简单迭代器)
-
built-in-iterators(使用迭代器)
-
advanced-iterables(造一个高级迭代器)
-
introduction-to-generators(使用生成器)
-
passing-args-to-yield(修改生成器内部状态)
-
RUN STOP RUN(用生成器替代迭代器)
-
GENERATOR ITERATOR(用生成器替代递归)
-
DELEGATING GENERATORS(生成器委托)
-
CATCH ERROR!(生成器的异常处理)
-
LOOK SYNC. DO ASYNC(异步转同步)
-
LOOK SYNC. MAKE PROMISE(模仿async/await)
perfschool-playground(性能优化)
前言
前端工程师们在设计之初往往要考虑性能问题,而node提供了很多工具帮助我们优化性能,但是要切记:过早优化是万恶之源~
-
USING THE PAGESPEED API(衡量性能)
-
USING THE WEBPAGETEST API(精准衡量性能)
-
DEFER ALL THE THINGS(懒加载)
-
ENFORCING A PERFORMANCE BUDGET(简洁化)
-
REMOVING UNUSED CSS(精简CSS)
-
INLINING IMAGES(图片转Base64)
-
INLINING CRITICAL CSS(内嵌样式)
-
USING A FONT LOADER(可选加载字体)
-
CREATING SPRITESHEETS(雪碧图)
-
OPTIMIZING IMAGES(压缩图片)
lololodash(lodash入门)
前言
lodash是js非常重要的一个工具库,由undersocore发展而来,里面内置了很多强大的函数工具,主要针对集合、数组、对象。
- Getting Started(_.filter)
一个简单的任务,直接调用它的filter函数就能完成
- Sort Me(_.sortBy)
- In Every Case(_.forEach)
- Everyone Is Min(.every和.some)
- Chain Mail(_.chain与链式调用)
- Count the Comments(_.groupBy)
- Give Me an Overview(_.reduce)
- Analyze(_.filter综合使用)
- Start templating(_.template)
test-anything(js测试)
前言
测试驱动开发是一种软件开发方法,它是一种良好的设计,前端如今也可以通过测试来保障软件质量。
-
LOG IT OUT(console.log大法)
-
TELL ME WHAT IS WRONG(assert断言)
-
TAPE IT TOGETHER(tape模块批量测试)
-
CALL ME MAYBE(tape循环回调测试)
-
TO ERR IS HUMAN, TO PURR FELIN(综合测试)
网友评论