Node.js简要小总结
【摘要】 Node.js学习部分知识点小结
Node.js简要小总结
node是什么?
- node完整的名字是node.js,顾名思义,以js为后缀名那就多少与javascript有点关系。简单的说,Node.js是运行在服务端的JavaScript。
- 是一个事件驱动I/O服务端JavaScript环境,基于V8引擎执行JS。
node.js模块系统
概要
- node.js提供模块系统目的是让node.js的文件可以相互调用
- 简要的说一个node.js文件就是一个模块(模块和文件是一一对应的)
- 文件不一定就是JavaScript代码,也可以是JSON文件或者C/C++扩展(编译过的)
- 模块可以分为核心模块和文件模块
- 模块间的变量和函数在其他模块无法访问到,每个JS文件代码都独立运行在一个函数中
关键知识点梳理
核心模块和文件模块
- 核心模块与文件模块在来源、标识和导入方式上有所区别:
模块 | 来源 | 标识 | 导入方式(*由标识不同导致*) |
---|---|---|---|
核心模块 | 有node.js引擎提供的模块 | 模块自身的名字为标识 | require(“模块名”) |
文件模块 | 用户自己定义的模块 | 模块所在(绝对/相对)路径为标识 | require(“路径”) |
模块间函数和变量无法访问到的原因
node.js的每一个模块都会包装到一个函数中执行:
function (exports, require, module, __filename, __dirname){
//编写的模块代码
}
如上:在test模块中编写代码console.log(arguments.callee +'');
,在main.js中引入并执行得到上图输出结果,得证被引入模块的变量和函数无法被访问到的原因是模块在执行时会被包装到一个函数中,相当于引入了一个函数,变量为局部变量,故而不能被访问到。
function(exports,require,module,__filename
,__dirname
)简要理解
- exports:用来将变量或函数暴露到外部
- require:函数,用来引用外部的模块,引入模块后会返回一个对象,改对象代表引入得那个模块
- module:代表当前模块本身,exports是module的一个属性
__filename
:当前模块的完整路径__dirname
:当前模块所在文件夹路径,(__filename的上一级目录)
exports和module.exports的区别
exports和module.exports都可以将变量暴露到外部,但方法上有所不同:
- exports暴露:方法为:exports.变量名=值;如:exports.num1=10
- module.exports:
- module.exports.变量名=值
- module.exports={变量1=值,变量2=值}
为什么会有这样的差别?
首先需要理解什么是引用变量,然后最关键的一句话是:exports其实是module.exports的一个引用即:
var exports = module.exports;
怎样理解?
exports 只是一个变量(类似C语言中的指针的概念),在栈中存储。而module.exports则是对象实体,在堆中存在。简单说,好比一个仓库,你要往仓库里放东西,如果你知道仓库在哪直接去放就可以,如果不知道在哪,就可以让exports领着你去仓库。至于exports为什么不能直接赋予一个对象就显而易见了——人家只是领着你去仓库的,你把东西交给他就好比你给他说这个就是新仓库的地址(如果可以的话),人家领路的本来放的是去仓库的路线,硬生生的被搞没了。
包和NPM
什么是包(package)?
包相当于一个整合的模块,将一组相关的模块组合到一起形成一个包。包的组成主要有:
- package.json json格式文件,称为包描述文件,描述包的相关信息供外部分析,类似说明书的存在。
- bin :目录,存放可执行二进制文件
- lib :目录,存放js代码
- doc:目录,存放文档
- test:目录,存放单元测试文件
NPM
- npm:(Node.js package manager)Node.js包管理工具;通俗讲类似生活中的应用商店,只不过应用商店的界面和其中的应用都稍微抽象了点。
- cnpm:cnpm是淘宝npm镜像,主要是解决国内使用npm访问速度的问题,需要注意cnpm是只读的,即不可以上传发布,且对npm的同步频率为十分钟一次。
关于更多npm详情请访问官网:
npm 包管理器简介:http://nodejs.cn/learn/an-introduction-to-the-npm-package-manager
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)