Node.js 笔记02

一、关于命令

常用命令:

dir 列出当前目录下面所有的文件
cd 目录名  进入到指定的目录,. 当前目录,  .. 进入上级目录,cd . 当前目录, cd .. 上级目录
md 目录名  创建文件夹
rd 目录名   删除文件夹
cd.>文件名.后缀名  创建文件,cd.>a.txt
del 文件名   删除文件
cls   清除屏幕,
exit  退出命令行

二、进程和线程

请参考python学习笔记中的线程和进程

进程:我们写的代码和程序都是放在进程里面的, 相当于工厂中的车间;

线程:计算机中的最小计算单位, 负责执行进程中的程序,相当于车间中的一条条流水线。

单线程:js是单线程,时间片分割

多线程:根据任务决定开启几条线程

Node服务器,是单线程,但是很健壮, 后台拥有一个I/O线程池进行调度,分布式服务器部署。

三、安装Node.js

安装就是官网下,然后下一步下一步,安装完成后会自动配置环境变量,如果不行就自己配置一下,完成后 node -v 一下,显示版本,说明安装成功了。

使用:

在webstorm 里创建一个 js文件,点击运行即可,如果报错 报错: Program path not specified

这样设置:

image

设置完成后如果不行,就重启一下

四、Node开发模块化

  • 在Node.js 中,从文件角度看, 每个JS文件就是一个模块; 从结构看, 多个JS文件之间可以相互require, 共同实现了一个功能, 这整体上也是一个模块

  • 一个模块中定义的变量, 函数等, 都只能在这个文件内部有效; 当需要从此JS文件外部引用这些变量, 函数时, 必须使用exports进行暴露, 使用者通过require引用

  • 在Node中,每一个js文件中的js代码都是独立运行在一个小闭包中, 而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问,即 全局变量私有化, 避免全局污染

myFun.js ,这是封装好的模块

// 求和
exports.sum = (...numbers)=>{
    let result = 0;
    numbers.forEach((number)=>{
        result += number;
    });

    return result;
}

// 求平均数
exports.avg = (...numbers)=>{
    let result = 0;
    numbers.forEach((number)=>{
        result += number;
    });

    return result/numbers.length;
}

exports.name = 'gudon';
// module.exports.name = 'gudon'; 
// 一般还是使用 module.exports.xxx = xxx 吧,区别在下面总结。

test.js: 在 tset.js 中调用

let func = require('./myFun.js')  //当前文件夹, ./ 必须要加

console.log(func.sum(1, 2, 3, 4, 5));  // 15
console.log(func.avg(1, 2, 3, 4, 5));  // 3
console.log(func.name);  // gudon

node.js 有内建模块,底层由C++编写,我们自己可以写文件模块,如 myFun.js

exports 和 require:这两个其实是函数参数,

  1. 当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码 function (exports, require, module, ____filename, ____dirname) {

  2. 在代码的最底部,添加 }

  3. 所以模块中的代码都是包装在一个函数中执行的,并且在函数执行的同时传递进了5个实参:
    exports: 该对象用来将函数内部的局部变量或局部函数暴露到外部
    require: 用来引入外部的模块
    module: 代表的是当前模块本身, exports就是module的属性; 我们既可以使用 exports 导出,也可以使用module.exports导出
    __filename: 当前模块的完整路径

    __dirname: 当前模块所在文件夹的完整路

五、exports 和 module.exports的区别

  1. 值类型和引用类型
image

2、

exports只能使用.语法来向外暴露内部变量:exports.xxx = xxx;

module.exports既可以通过.语法,也可以直接赋值一个对象:

  • module.exports.xxx = yyy;
  • module.exports = {xxx: yyy};

六、包和包管理器

1.包(package)

CommonJS规范:

CommonJS规范的提出,主要是为了弥补JavaScript没有模块化标准的缺陷.

CommonJS规范为JS希望JS能够在任何地方运行

CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具, 这组工具就叫做包。

包结构:(实际上就是一个压缩文件,解压以后还原为目录)

package.json 描述文件
bin 可执行二进制文件
lib js代码
doc 文档
test 单元测试

包描述文件 package.json:描述包的相关信息,以供外部读取分析,它是一个JSON格式的文件 – package.json, 位于包的根目录下,描述信息比如有:

name、description、version、keywords、maintainers、contributors、bugs、licenses、repositories、dependencies、homepage、os、cpu、engine、builtin、directories、implements、scripts、author、bin、main、devDependencies

  • package.json文件中, 不能加入任何注释

2.包管理器(NPM)

Node Package Manager, 就像是360软件管家一样

另外,处理 npm,还有 Yarm

Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。目的是解决这些团队使用 npm 面临的少数问题,及npm的问题:安装的时候无法保证速度/一致性,安全问题,因为 npm 安装时允许运行代码。但是npm 会进行一些更新来完善的。

常用命令:
npm –v 查看版本
npm version 查看所有模块的版本
npm search 包名 / 部分包名 搜索包
npm init 初始化package.json文件
npm install / i 包名 安装包,在外部使用,在webStorm中使用
npm remove / r 包名 删除包
npm install / i 包名 --save 安装包并添加到依赖中
npm install 根据package.json下载当前项目所依赖的包,npm install bootstrap --save 安装 bootstrap包,安装完后 package.json 的 dependencies 会有显示,也可以在 package.json里删除或增加,然后 npm install 来更新包。npm install bootstrap --save-dev ,这样安装的话,就是在开发过程中可以用,上线后就不用了,这样添加后, package.json 会在

"devDependencies": {
  "bootstrap": "^4.1.3"
}

里出现。

npm install 包名 -g 全局安装包, 用于一些编译根据, 比如: gulp, webpack等

另外:如果在页面中引入node_modules中某个模块, 优先从当前目录引入, 如果没有, 则往上级查找, 直到根目录

CNPM:一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步,https://npm.taobao.org/

使用方式:npm install -g cnpm --registry=https://registry.npm.taobao.org

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

推荐阅读更多精彩内容