再不学nodeJs,咱们就老了......在HTML5大浪袭来的时候,不少先辈就开始了NodeJs之旅,而那时我还在作服务器端的程序
后来转成前端,和梯队的距离已经很大了,由于我会服务器端语言,还干了好久,因此至今才开始学习NodeJs,向完整的前端前进
此次学习NodeJs的计划是:
① 1-2周学习基础知识
② 1周左右开发一个简单项目
③ 利用NodeJs开发一套用于移动端调试的工具
④ 打包相关(这个可能比较远了)javascript
① 异步
从文件读取到网络请求,NodeJs皆以异步完成,回调函数占据重要做用,在编程模型上Node是领先的html
② 事件回调
事件回调让程序变得轻巧,可是具体怎么样仍是取决于程序员。可是回调函数在阅读上其实仍是有必定难度的前端
③ 单线程
Node是单线程的,若是多线程的话,这门语言水又深了,问几句进程中的通讯时很讨厌的,但线程也没有死锁等问题
可是性能相关就有问题了,由于不能利用多核;java
咱们原来作服务器端的开发,若是没有很好的组织代码的话,后期维护很是困难,因此才会有什么MVC,什么三层架构
而如今前端的业务逻辑逐向后端靠拢,就单页应用来讲,已经超事后端的程序逻辑
页面view不停的增长会带来js代码量的激增,如何很好的管理咱们的前端代码成了一个问题,因此requireJs出现了......
PS:尼玛这段和nodeJs有一毛钱关系哇......
javascript是没有模块化系统的,因而就有CommonJs的提出,让js具有开发大型应用的基础node
咱们若是要引用一个模块,好比数学计算相关:程序员
var math = require('math');
咱们若是要定义本身的模块能够这样干web
exports.add = function () { return sum; }
若是此函数在math中定义的话,就能使用了express
math.add();
模块标识就是传递给require的参数,须要为驼峰命名,指向的是一个文件路径,这里和requireJS很相似的npm
Node中模块实现分为两类,一种是系统级别的核心模块,一种是用户编写的文件模块
核心模块在编译过程被翻译成了二进制文件,Node进程启动后,一些核心的模块会直接加载进内存(文件定位、编译执行)
文件模块须要动态加载,速度相对慢一点
可是一旦加载后,那些文件便会被缓存,二次引入时候便会读取缓存文件(编译后的文件)
这里扯远一点,咱们在使用underscore过程当中,会编译Html造成模板函数(他真的只是一个函数),其实这个就能够作缓存
在部署项目以前保存编译事后的函数,去掉html模板文件(优化效果不知)编程
在node中,每一个模块都是一个对象:
function Module(id, parent) { this.id = id; this.exports = {}; //parent是关键字,不该该乱用 this.parent = parent; if (parent && parent.children) { parent.children.push(this); } this.filename = null; this.loaded = false; this.children = []; }
编译和执行时引入文件模块的最后一个阶段,定位到具体文件后,node会新建一个模块对象,而后根据路径载入并编译
每个编译成功的模块都会将其文件路径做为索引缓存在Module._cache上
每一个模块文件都存在require、exports、module三个变量,可是在文件中并未定义(__filename__、__dirname__ 变量也是)
其实在编译过程当中,Node对javascript文件内容进行了头尾包装(至关于自定义函数传入window)
(function (exports, require, module, __filename__, __dirname__) { var math = require('math'); exports.area = function (radius) { return ''; }; });
这样,模块与模块之间作了隔离,不会互相影响,这里和underscore的编译有些相似......
Node组织了自身的核心模块,因此第三方文件模块能够有序的编写和使用,可是在第三方模块中,模块与模块之间仍然散列在各地
相互之间不能直接引用,在模块外包和NPM则是将联系创建起来的一种机制
PS:不少模块会造成一个包,这个包的概念和java包的概念,才#程序集的概念应该类似
一个包结构解压后会造成几个文件:
① package.json 描述文件
② bin 可执行二进制目录
③ lib javascript代码目录
④ doc 文档(尼玛基本没有)
⑤ test demo
以上都是CommonJS包的规范的一些东西,可是咱们稍微了解一下即可(初学嘛),NPM则须要熟练掌握,借助NPM咱们能够熟练安装管理包
安装依赖包
安装依赖包是经常使用方法:
npm install express
执行后就会在当前目录下建立node_modules目录,而后再其下面建立express目录......
PS:express是NodeJs上流行的web开发框架,帮助咱们快速开发一个web应用
安装结束后就可调用了:
var express = require('express');
这段简单结束,后面咱们项目实战过程逐步深化