- Node.js 是一个基于V8引擎的JavaScript运行环境
- Node.js 使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。
path
path 模块提供了用于处理文件和目录的路径的实用工具。 可以使用以下方式访问它:
const path = require('path');
- path.basename(path[, ext])
path.basename() 方法返回 path 的最后一部分,类似于 Unix basename 命令。
path.basename('/foo/bar/baz/asdf/quux.html');
// 返回: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// 返回: 'quux'
//当使用 Windows 文件路径时,若要在任何操作系统上获得一致的结果,则使用 path.win32:
path.win32.basename('C:\\temp\\myfile.html');
// 返回: 'myfile.html'
当使用 POSIX 文件路径时,若要在任何操作系统上获得一致的结果,则使用 path.posix:
path.posix.basename('/tmp/myfile.html');
// 返回: 'myfile.html'
- path.dirname(path)
path.dirname() 方法返回 path 的目录名,类似于 Unix dirname 命令。
path.dirname('/foo/bar/baz/asdf/quux');
// 返回: '/foo/bar/baz/asdf'
- path.extname(path)
path.extname() 方法返回 path 的扩展名,即 path 的最后一部分中从最后一次出现的 .(句点)字符到字符串的结尾。 如果 path 的最后一部分中没有 .,或者除了 path 的基本名称(参见 path.basename())的第一个字符之外没有 . 个字符,则返回空字符串。
path.extname('index.html');
// 返回: '.html'
path.extname('index.coffee.md');
// 返回: '.md'
path.extname('index.');
// 返回: '.'
path.extname('index');
// 返回: ''
path.extname('.index');
// 返回: ''
path.extname('.index.md');
// 返回: '.md'
- path.parse(path)
path.parse() 方法返回一个对象,其属性表示 path 的重要元素。
//在 POSIX 上:
path.parse('/home/user/dir/file.txt');
// 返回:
// { root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }
//在 Windows 上:
path.parse('C:\\path\\dir\\file.txt');
// 返回:
// { root: 'C:\\',
// dir: 'C:\\path\\dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' }
- path.format(pathObject)
path.format() 方法从对象返回路径字符串。 这与 path.parse() 相反。
当向 pathObject 提供属性时,存在一个属性优先于另一个属性的组合:
- 如果提供 pathObject.dir,则忽略 pathObject.root
- 如果 pathObject.base 存在,则忽略 pathObject.ext 和 pathObject.name
path.resolve
path.resolve([...paths])
方法将路径或路径片段的序列解析为绝对路径。
const path = require('path');
const path1 = path.resolve('/a/b', '/c/d');
// 结果: /c/d
const path2 = path.resolve('/a/b', 'c/d');
// 输出: /a/b/c/d
const path3 = path.resolve('/a/b', '../c/d');
// 输出: /a/c/d
const path4 = path.resolve('a', 'b');
// 输出: /Users/xiao/work/test/a/b
- 如果没有传入 path 片段,则 path.resolve() 将返回当前工作目录的绝对路径。
- resolve在传入第一个参数非
/
路径时,会自动加上当前目录形成一个绝对路径。 - resolve操作相当于进行了一系列的cd操作
- 该方法只是处理path的字符串,不考虑实际是否存在
path.join
path.join():连接任意多个路径字符串,相比path.join:
- 也可以从左到底右看成cd操作
但是 join不会把
/
看成绝对路径path.join('/a', '/b');
// /a/b
path.resolve('/a', '/b');
// /b
resolve在传入非
/
路径时,会自动加上当前目录形成一个绝对路径,而join仅仅用于路径拼接 ```javascript // 当前路径为 /Users/xiao/work/test path.join(‘a’, ‘b’, ‘..’, ‘d’); // a/d
path.resolve(‘a’, ‘b’, ‘..’, ‘d’); // /Users/xiao/work/test/a/d
<a name="LKpua"></a>
### __dirname
当前模块的目录名。 这与 __filename 的 path.dirname() 相同。【不包含文件名本身的绝对路径】
```javascript
console.log(__dirname);
// 打印: /Users/mjr
console.log(path.dirname(__filename));
// 打印: /Users/mjr
__filename
当前模块的文件名。【包含文件名本身的绝对路径】
console.log(__filename);
// 打印: /Users/mjr/example.js
console.log(__dirname);
// 打印: /Users/mjr
process
process 对象提供有关当前 Node.js 进程的信息并对其进行控制。 虽然它作为全局可用,但是建议通过 require 或 import 显式地访问它:
import process from 'process';
process 对象是 EventEmitter 的实例。
process.cwd(),process.chdir()
cwd方法返回进程的当前目录(绝对路径),chdir方法用来切换目录。
process.cwd()
'/home/aaa'
process.chdir('/home/bbb')
process.cwd()
'/home/bbb'
process.env
process.env属性返回一个对象,包含了当前Shell的所有环境变量。
通常的做法是,新建一个环境变量NODE_ENV,用它确定当前所处的开发阶段,生产阶段设为production,开发阶段设为develop,然后在脚本中读取process.env.NODE_ENV即可。
process.argv
process.argv 返回一个数组,数组元素分别如下:
- 元素1:node
- 元素2:可执行文件的绝对路径
- 元素x:其他,比如参数等
node test.js aa bbb
[
'C:\\Program Files\\nodejs\\node.exe',
'E:\\2022-git\\webpack-deep-dive\\test.js',
'aa',
'bbb'
]
process.execArgv
返回 node specific 的参数(也就是运行node程序特有的参数啦,比如 —harmony)。这部分参数不会出现在 process.argv 里。process.nextTick()
process.nextTick 将任务放到当前一轮事件循环(Event Loop)的尾部,微任务。process.nextTick(function () {
console.log('下一次Event Loop即将开始!');
});
事件
所有触发事件的对象都是 EventEmitter 类的实例。 这些对象暴露了 eventEmitter.on() 函数,允许将一个或多个函数绑定到对象触发的命名事件。 通常,事件名称是驼峰式字符串,但也可以使用任何有效的 JavaScript 属性键。
当 EventEmitter 对象触发事件时,所有绑定到该特定事件的函数都会被同步地调用。 被调用的监听器返回的任何值都将被忽略和丢弃。
- eventEmitter.on() 方法用于注册监听器
- eventEmitter.emit() 方法用于触发事件 ```javascript const EventEmitter = require(‘events’);
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on(‘event’, () => { console.log(‘an event occurred!’); });
myEmitter.emit(‘event’); ```