本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
node.js简介
浏览器中的JavaScript组成
浏览器中的JavaScript组成
浏览器中的JavaScript由两部分组成
- lECMAScript (JS的语法)
- WebAPI (浏览器内置的API)
JavaScript代码是如何被转换成最终效果的?
- 首先,有ECMAScript 和 浏览器自带的 WebAPI,让我们写代码有了依据
- 编写代码
- 代码通过 JS解析引擎 处理
- 得到最终结果
其中不同的浏览器使用不同的 JavaScript 解析引擎:
Chrome 浏览器 => V8
Firefox 浏览器=> OdinMonkey(奥丁猴)
Safri 浏览器=> JSCore
IE 浏览器=> Chakra(查克拉) ...
其中,Chrome 浏览器的 V8 解析引擎性能最好!
运行环境
运行环境是一个概念,指的是代码正常运行所需要的必要条件
必须有内置API (才能写代码)
必须有解析引擎(才能运行代码)
就像人的生活环境必须要水,食物,氧气...
浏览器,就是JavaScript的运行环境,因为它具备代码正常运行的必要条件
node.js
前面提到了运行环境,而node也是一个javascript代码的运行环境
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
浏览器 和 Node,都是 JavaScript 的运行环境
具体来说,浏览器是客户端的JS环境;Node是服务端的JS运行环境
不同环境中,都可以运行 ECMAScript 核心代码
WebAPI是浏览器特有的,只能在浏览器环境下使用;
Node内置API(内置模块)是Node环境特有的,只能在Node环境中使用
在node.js官网下载安装包进行安装node.js
安装后,打开终端窗口,执行 node -v 命令,如果看到版本号,说明安装成功。
node终端
无论执行 git 命令,还是 node 命令,都需要使用终端工具
vscode内置了终端工具,我们可以使用它来执行 git 或 node 命令
最佳打开vscode终端的方式
在文件或文件夹上,鼠标右键,在集成终端中打开
这样打开的好处是,终端路径刚好是 当前文件或文件夹的路径
node命令
Node中的模块化
在node.js中我们想要访问另一个js文件的变量必须要导出和导入才能够使用
导出
可以通过 module.exports 语法共享当前作用域的变量
接收
要通过 require() 方法记载js文件共享的对象
node模块分类
- 自定义模块:用户自己创建的每个JS文件,都是自定义模块
- 内置模块(核心模块):Node安装后,即可使用的模块,Node环境自带。
- 第三方模块:其他人或公司、组织开发的模块,发布到 npm 网站,我们需要下载使用的模块
使用
加载自定义模块
- a 文件,必须通过 module.exports 共享(导出、暴露)当前模块中的变量
- b 文件,需要通过 require() 加载(导入)。(a 文件导出什么,b 文件就得到什么)
- 加载自定义模块时,必须要带路径 (相对路径、绝对路径都可以;但必须带路径,哪怕是 ./ 也不能省略)
- 加载自定义模块时,可以省略后缀
加载内置模块
- 直接使用 require() 加载即可。
- 加载模块时,无需带路径,比如 require('fs')
- 加载内置模块,得到对象类型,对象中内置了很多API方法
加载第三方模块
必须先下载,使用nmp -i 进行下载,然后使用
node内置模块
Node内置模块有很多,具体参见 www.apiref.com/nodejs-zh/f…
内置模块 - fs 模块
fs 模块,f(file)s(system),文件系统;所有关于文件的操作,都可以通过这个模块完成,
比如创建文件
获取文件里面的内容
向文件中添加内容
创建文件夹
遍历文件夹里面的文件
监视文件的变化
判断文件是否存在
…….
fs模块 - fs.readFile()
fs.readFile() 方法的作用是:读取文件
读取:获取
读取文件:获取文件里面的内容
注意,这是一个异步方法 (同步方法是 fs.readFileSync())
fs.readFile('文件路径', [utf-8], (err, data) => {
// 读取无错误,err=null; 读取有错误,err=错误对象
// data 表示读取的结果
})
fs模块 - fs.writeFile()
fs.writeFile() 方法的作用是:写入文件
写入:向文件中添加内容
特点:
如果文件不存在,则会创建文件(但不能递归创建)
如果文件中有内容,将会被覆盖
如果文件夹不存在,报错
注意,这是一个异步方法
fs.writeFile('文件路径', '写入的内容', err => {
// 写入无错误,err=null; 写入有错误,err=错误对象
})
内置模块 - path 模块
path 模块,path 是路径的意思;所有和路径相关的操作,都可以通过这个模块完成
拼接一个路径
获取当前文件所在的路径
获取路径中的文件名
获取路径中的后缀
...
path.extname()
path.extname()方法的作用是:获取路径中的后缀
参数:路径
path.extname('文件路径');
path.extname('css/index.css'); // .css
path.extname('E:/a/b/index.html'); // .html
path.extname('assets/js/login.xyz'); // xyz
path.extname('abc/bcd/index'); // null
path.join()
path.join() 方法的作用是:拼接给出的路径
参数:两个或更多个路径
额外补充:Node中,有一个全局变量 __dirname ,它表示当前 JS 文件所在的绝对路径
console.log(__dirname); // D:/study/100/Node01/code
path.join('路径', '路径', ……);
path.join('css', 'index.css'); // css/index.css
path.join('a', 'b', 'c', 'd.js'); // a/b/c/d.js
path.extname(__dirname, 'js', 'a.js');
// D:/study/100/Node01/code/js/a.js