(一)Node的安装与模块加载机制

Node.js学习笔记

Node的重要特性

  • 单线程
  • 异步
  • 事件回调
  • 在Node里面路径都是假的,他就是个WEB容器。他找的路径可能是一个文件夹也可能是一个文件

Node的安装

  • 从官网上现在Node,然后安装
  • 然后打开webstrom里面的setting搜索node
  • 最后配置路径和属性

(一)Node的模块使用和加载机制

var a = 100;
console.log(a); //100
console.log(global.a);  //undefined 这是因为这个a是定义在模块下面的变量,不属于全局变量

(i)全局变量和什么是模块

在NODE里面全局变量不是window了而是global

一个文件就是一个模块,同时每个模块都有自己的作用域.

我们用var声明的变量并不是全局的而是属于当前模块下面的

var a = 100;
console.log(a);  // 100
global.a = 200;
console.log(a);   //还是100
console.log(global.a)  //则是200

一些看似全局其实属于当前模块的变量

__filename 当前文件被解析后的绝对路径,其实这个变量是属于当前模块的(即属于每一个文件的)

console.log(__filename);

(ii)模块加载机制-require方法

require("模块路径");
require("./2.js");
require方法中的路径可以填写相对路径和绝对路径

当前模块在硬盘中的绝对路径

模块的文件查找机制:

  • 首先按照加载的模块文件名进行查找->如果没找到,会自动在模块文件名称后面加上.js文件进行查找
  • 要是还没找到,则会在文件名称后面加上.json的后缀进行查找
  • 要是在没有找到则会在文件名称后面加上.node后缀进行查找。
  • 要是在没有找到则直接弹出错误.

模块之间想调用变量怎么办?

  • 在一个模块中通过var定义的变量,其作用域范围是当前模块,外部模块不能直接访问。如果一个模块访问另一个模块定义的变量有2种办法
  • 方法一:(不推荐)把变量作为global对象的一个属性,这样就变成全局变量
  当前模块是4(4.js)
  在模块5种为global对象添加一个属性global.a = 100;
  require('./5.js');
  console.log(a); //100
  • 方法二:使用一个模块对象module对象(也是模块作用域下的,而不是全局的)
    • module保存并提供与当前模块相关的一些信息(可以用console.log(module))把他打印出来
    • 在module对象里面有一个子对象就是exports我们可以通过这个对象把一个模块中的局部变量对象进行对外提供访问
模块5  
var a = 100;
module.exports.a = a;  
模块4
//require('./5.js') 返回值就是被加载模块当中的exports
var m5 = require('./5.js');
console.log(m5.a);  //100;   

exports与module.exports区别

  • exports 用于变量,方法不需要使用new对象的

  • module.exports.适用于new一个对象。这样新的加载页面可以new一个对象

var  People = require("./People.js");
var xiaoming = new People("小明");
console.log(xiaoming.name);
  • 在模块作用域内,还有一个内置的模块对象--exports--它其实就是module.exports
5模块
var a =100;
console.log(module.exports === exports);  //true;
exports.a = a;
  • exports与module.exorts指向相同,在使用的时候,尽量不要破坏两者的指向关系
module.exports = [1,2,3];  //直接这样对module.exports进行操作,这时候exports与module.exports的指向关系已经断开了
exports.a = 200;   //这个时候这个a已经加不到module.exports中了,所以其他模块中引用它也引用不到了,因为这个模块的值已经变成[1,2,3]

结论:所以尽量使用同一个

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

推荐阅读更多精彩内容

  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,607评论 2 41
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宫若石阅读 1,052评论 0 1
  • 模块 Node 有简单的模块加载系统。在 Node 里,文件和模块是一一对应的。下面例子里,foo.js加载同一个...
    保川阅读 587评论 0 0
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 4,062评论 2 58
  • 看完了村上春树的《当我谈跑步时,我在谈些什么》,又发现了一座灯塔——村上春树的执行力。 他的执行力有多强?坐好扶稳...
    万能的船长阅读 824评论 0 0