Node.js 是一个开发平台,有对应的编程语言(JS)、运行环境(Chrome V8),提供了实现了特定功能的API,可以开发控制台程序、桌面应用程序、Web应用程序。
生态系统是npm,特点是事件驱动、非阻塞I/O(异步回调)、单线程。
英文官网:nodejs.org/en/ 可以切换成中文的(网站右侧)
中文API文档:nodejs.cn/api/
全局模块是不需要require
,区分方式有两种
- 看文档给出的使用案例
- 通过查看 "全局变量"
api有三个稳定性标记
-
弃用 0。 此特性可能会触发警告。 不保证向后兼容性。
-
实验 1。 此特性不受语义化版本控制规范的约束。 在任何的未来版本中可能发生不向后兼容的更改或移除。 建议不要在生产环境中使用该特性。
-
稳定 2。 与 npm 生态系统的兼容性是最高的优先级。
const fs = require('fs');
fs.readFile("./hello.txt");
./hello.txt
是一个相对路径,会根据执行node
命令时所在的路径去查找。
比如上述文件在:D:\software\hello.js
但在D盘下,运行node software\hello.js
,则会是D:\hello.txt
__dirname
,表示当前正在执行的js文件所在的目录,并不是全局的。
__filename
在__dirname
的基础上加上文件名,并不是全局的。
try-catch
只能捕获同步操作,对异步回调无能为力
const fs = require('fs');
try {
fs.readFile('不存在的路径', (error) => {
console.log('读取文件', error.code);
});
} catch (error) {
console.log('捕获到错误了', error);
}
输出"读取文件 ENOENT"
require
加载模块是同步执行的,按顺序依次加载
使用相对路径的时候永远是指当前文件所在的路径
先看缓存有没有,如果是一个路径,提供后缀名直接加载,没有则按照index.js、index.json、index.node,还没有再去找同命文件夹,认为是一个第三方模块,看里面的package.json
,main
(入口文件),如果路径不存在,再一次加载当前文件夹下的index.js、index.json、index.node
先看缓存有没有,如果是一个模块,先在核心模块中查找,如果没有,则认为是一个第三方模块,去找当前js文件所在目录有没有node_moudles
,直到根目录
注意自己写的文件名也好,路径也好,不要和系统内置模块重名。
在全局安装的模块npm install mime -g
,可以尝试(有些模块只能在浏览器环境下跑)通过命令行调用