node.js

1.描述
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
是一门技术,不是一门语言。
作用:
方便测试JavaScript代码的运行环境
repl基本操作
变量、函数、对象
直接运行函数
使用下划线字符,表示上一个命令的返回结果
repl基本命令
.help .exit

2.下载/安装
第一种方式
https://nodejs.org/en/
下载下来直接安装即可
第二种方式
nvm方式安装
nvm install latest //安装最新的版本

3.版本管理工具nvm
1.下载地址:https://github.com/coreybutler/nvm-windows/releases
2.解压缩到某个文件夹中(elevate.cmd、elevate.vbs、install.cmd、LICENSE、nvm.exe)。例如 nvm
3.直接运行 install.cmd,忽略让输入的内容。直接回车即可。
4.在C盘根目录会生成 settings.txt
5.settings.txt文件内容
root: D:\Program Files\nvm
path: D:\Program Files\nodejs
arch: 64
proxy: none
node_mirror: http://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
6.配置环境变量
NVM_HOME D:\Program Files\nvm
NVM_SYMLINK D:\Program Files\nodejs
7.添加Path
%NVM_HOME%;%NVM_SYMLINK%;
8.cmd测试
nvm v 查看nvm版本
9.命令
查看本地安装的所有版本 : nvm list/nvm ls
安装指定版本node : nvm install 版本号
卸载指定版本node : nvm uninstall 版本号
切换使用指定版本的node :nvm use 版本号

4.helloworld程序
1.创建一个helloworld.js
d:/helloworld.js
2.编写代码
console.log("hello world");
3.运行程序
node helloworld.js

5.全局对象global
5.0 说明
global表示Node所在的全局环境,类似于浏览器的window对象
5.1 console
5.1.1定义变量 global.a=123和a=123的定义是一致的
var a = 123;
global.a = 1234;
console.log(a);
console.log(global.a);
5.1.2 断言 console.assert
var a = 1234;
console.assert(a==123,"判断失败了a不等于123");
5.1.3 输出代码的执行时间
console.time('time1');
for(var i = 0;i<1000;i++){}
console.timeEnd('time1');
注意:必须成对出现time1。
5.1.4 当前文件所在的文件路径 __dirname
console.log(__dirname);
5.1.5 当前文件的全路径
console.log(__filename);
5.2 process
5.6.1 说明
process对象是Node的一个全局对象,提供当前Node进程的信息。可以在脚本的任意位置使用。
5.6.2 使用
process.pid:当前进程的进程号。
console.log(process.pid);
process.version:Node的版本,比如v0.10.18。
console.log(process.version);
process.platform:当前系统平台,比如Linux。
console.log(process.platform);
process.env:指向当前shell的环境变量,比如process.env.HOME。
console.log(process.env);
process.stdout:指向标准输出。
process.stdout.write('shuaige');
process.stdin:指向标准输入。
process.stderr:指向标准错误。
5.3 module
Node内部提供一个Module构造函数,所有模块都是Module的实例
每个模块内部,都有一个module对象,代表当前模块.
module.id 带有绝对路径的模块文件名
module.filename 模块的文件名,带有绝对路径
module.loaded 表示模块是否已经完成加载
module.parent 返回一个对象,表示调用该模块的模块。
module.children 返回一个数组,表示该模块要用到的其他模块。
module.exports 模块对外输出的值
module.paths
5.4 exports
本身就是全局的,可以直接使用。
5.5 require
require操作的时候其实是去硬盘中去读js文件,把放入module对象当中去,内存中缓存中
在Node.js中,require命令用于加载模块文件
读取并执行一个JavaScript文件
然后返回该模块的exports对象
如果没有发现指定模块,会报错
加载规则
参数字符串以"/"开头
参数字符换以"./"开头
参数字符串不以"/"或"./",表示加载核心模块,或者一个位于各级node_modules目录已安装的模块
参数字符串可以省略后缀名
.js、.json、.node
.js会当做JavaScript脚本文件解析
.json会以JSON格式解析
.node会以编译后的二进制文件解析
5.6 模块 module.exports & require / exports & require
第一种写法:
代码:add.js
var add = function(a,b){
return a+b;
}
module.exports=add;
代码:one.js
var add = require("./add.js");
console.log(add(1,2));
第二种写法
var add = function(a,b){
return a+b;
}
exports.add=add;

        var add = require("./add.js").add;
        console.log(add(1,2));
        var obj = require("./add.js");
        console.log(obj.add(1,2));

6.node的模块
6.1 说明
一个文件就是一个模块
将方法挂载到exports对象上作为属性即可定义导出的方式
Node程序由许多模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。
Node.js本身就是一个高度模块化的一个平台
根据CommonJS规范,每一个模块都是一个单独的作用域
CommonJS规定,每个文件对外的接口是module.exports对象,该对象所有属性和方法,都可以被其它文件导入。
6.2 引用模块
模块引用require
6.3 模块标识
必须是符合小驼峰命名的字符串
以.、..开头的相对路径
绝对路径
可以没有文件名后缀.js
6.4 模块分类
6.4.1 核心模块 - 通过名字直接引入require('核心模块名')
fs(file system) 文件模块
http 网络请求模块
os 系统模块
path 路径模块
querystring 字符串查询模块,解析url查询字符串
url 地址模块,解析url
util 提供一系列实用小工具
.. 等等

        核心模块的源码都在Node的lib子目录中。为了提高运行速度,它们安装的时候都会被编译成二进制文件
    6.4.2 其它定义模块 - require('路径+模块名')

    6.4.3 模块加载机制
        如果require绝对路径的文件,查找时不会去遍历每一个node_modules目录,其速度最快。其余流程如下:
        1. 从module path数组中取出第一个目录作为查找基准。
        2. 直接从目录中查找该文件,如果存在,则结束查找。如果不存在,则进行下一条查找。
        3. 尝试添加.js、.json、.node后缀后查找,如果存在文件,则结束查找。如果不存在,则进行下一条。
        4. 尝试将require的参数作为一个包来进行查找,读取目录下的package.json文件,取得main参数指定的文件。
        5. 尝试查找该文件,如果存在,则结束查找。如果不存在,则进行第3条查找。
        6. 如果继续失败,则取出module path数组中的下一个目录作为基准查找,循环第1至5个步骤。
        7. 如果继续失败,循环第1至6个步骤,直到module path中的最后一个值。
        8. 如果仍然失败,则抛出异常。
6.5 总结
    所有代码都运行在模块作用域,不会污染全局作用域
    模块可以多次加载,但是只会在第一次加载的时候运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果
    模块的加载顺序,按照代码的出现的顺序是同步加载的
    require是同步加载模块的

7.npm包管理系统
7.1说明
一种含义是Node.js的开放式模块登记和管理系统
全球之最:最大的模块生态系统,里面所有的模块后者说是包,都是开源免费的,拿来即用
https://www.npmjs.com/
另一种含义是Node.js默认的模块管理器,是一个命令行下的软件,用来安装和管理node模块
7.2基础命令
npm init 【-y】 初始化一个package.json文件
npm install 包名 安装一个包
npm install jquery
npm install angular
npm install –save 包名 将安装的包添加到package.json的依赖中(dependencies)
npm install –g 包名 安装一个命令行工具
npm docs 包名 查看包的文档【非常有用】
npm docs jquery
npm docs angular
npm root -g 查看全局包安装路径
npm config set prefix “路径” 修改全局包安装路径
npm list 查看当前目录下安装的所有包
npm list -g 查看全局包的安装路径下所有的包
npm uninstall 包名 卸载当前目录下某个包
npm uninstall –g 包名 卸载全局安装路径下的某个包
npm update 包名 更新当前目录下某个包
npm update –g 包名 更新某个全局工具包
npm update 更新当前目录下安装的所有包
npm update –g 更新全局所有的工具包
7.3安装某个模块

7.4package.json
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • JavaScript 模块化编程 网站越来越复杂,js代码、js文件也越来越多,会遇到什么问题? 命名冲突; 文件...
    magic_pill阅读 1,420评论 0 1
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宫若石阅读 1,077评论 0 1
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 4,071评论 2 58
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,467评论 1 37
  • 她正在影院看电影,包里的手机震动起来。平素她最烦人看电影接电话,本不想理睬,但这手机震起来没完,她只好拿出来看了一...
    猜不中的尾声阅读 444评论 4 1