node入门级基础知识(一)

常用DOS命令

dir 列出当前目录下的所有文件
在这里插入图片描述
cd 目录名 -切换目录

​ 目录:. / - 当前目录

​ …/ - 父目录
在这里插入图片描述
md 文件夹名 -创建文件夹
在这里插入图片描述
rd 文件名 -删除文件夹
在这里插入图片描述
ping ip --查看网络是否连通
在这里插入图片描述
ipconfig -查看自己的ip
在这里插入图片描述
终止一直在运行的命令ctrl+c
清空窗口内容命令cls

模块

CommonJs规范
为什么制定CommonJS规范
  • CommonJs规范的出发点:JS没有模块系统、标准库较少、缺乏包管理工具;为了让JS可以在任何地方运行,以达到Java、C#,C++这些后台语言具备开发大型应用的能力;
  • CommonJS规范的提出,主要是为了弥补JavaScript没有标准的缺陷,已达到像Java那样具备开发大型应用的基础能力,而不是停留在开发浏览器端小脚本程序的阶段。
在CommonJS规范中
  • 一个文件就是一个模块,拥有单独的作用域;
  • 普通方式定义的变量、函数、对象都属于该模块内;
  • 通过require来加载其他模块;
  • 通过exports和modul.exports来暴露模块中的内容;
    CommonJS模块规范主要分为三部分:模块引用、模块定义、模块标识
模块引用
var math = require('math');
模块定义

在模块中,上下文提供require()方法来引入外部模块。对应引入的功能,上下文提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在一个module对象,它代表模块自身,而exports是module的属性。在Node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式:

exports.add = function () {
    var sum = 0, i = 0,args = arguments, l = args.length;
    while (i < l) {
        sum += args[i++];
    }
    return sum;
};

在另一个文件中,我们通过require()方法引入模块后,就能调用定义的属性或方法了

var math = require('math');
exports.increment = function (val) {
    return math.add(val, 1);
};
exports

module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量

//a.js
var a = 100;
module.exports.a = a;

//b.js
var result = require('./a');
console.log(result);//'{ a: 100 }'

为了方便,Node为每个模块提供一个exports变量,指向module.exports。造成的结果是,在对外输出模块接口时,可以向exports对象添加方法。

//a.js
let name = 'andy';
function sum(a,b){
	console.log(a + b);
}
exports.str = name;
exports.fn = sum;

不能直接将exports变量指向一个值,因为这样等于切断了exportsmodule.exports的联系

模块编译

编译和执行是模块实现的最后一个阶段。定位到具体的文件后,Node会新建一个模块对象,然后根据路径载入并编译。对于不同的文件扩展名,其载入方法也有所不同

  • js文件——通过fs模块同步读取文件后编译执行
  • node文件——这是用C/C++编写的扩展文件,通过dlopen()方法加载最后编译生成的文件
  • json文件——通过fs模块同步读取文件后,用JSON.parse()解析返回结果
  • 其余扩展名文件——它们都被当做.js文件载入
  • 每一个编译成功的模块都会将其文件路径作为索引缓存在Module._cache对象上,以提高二次引入的性能
模块标识

模块标识其实就是传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以.、…开头的相对路径,或者绝对路径。它可以没有文件名后缀.js

模块的分类
  • 核心模块(Node提供的模块)

  • 文件模块(用户编写的模块)

    核心模块部分在Node源代码的编译过程中,编译进了二进制执行文件。在Node进程启动时,部分核心模块就被直接加载进内存中,所以这部分核心模块引入时,文件定位和编译执行这两个步骤可以省略掉,并且在路径分析中优先判断,所以它的加载速度是最快的。
    文件模块则是在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程,速度比核心模块慢。

Node模块中的加载

使用require()方法来引入
require(‘文件路径/模块名称’)
let obj = require(‘./test.js’)
或者如下写法均可以:
let obj = require(‘./test’)
注意:如果没有指定导入模块的类型, 那么会依次查找.js .json .node文件
无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们

导入模块时,需要注意:

导入"自定义模块"模块时前面必须加上路径
导入"系统模块"和"第三方模块"是不用添加路径

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值