• Node.js 是一个基于V8引擎的JavaScript运行环境
  • Node.js 使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。

image.png

path

http://nodejs.cn/api/path.html

path 模块提供了用于处理文件和目录的路径的实用工具。 可以使用以下方式访问它:

  1. const path = require('path');
  • path.basename(path[, ext])

path.basename() 方法返回 path 的最后一部分,类似于 Unix basename 命令。

  1. path.basename('/foo/bar/baz/asdf/quux.html');
  2. // 返回: 'quux.html'
  3. path.basename('/foo/bar/baz/asdf/quux.html', '.html');
  4. // 返回: 'quux'
  1. //当使用 Windows 文件路径时,若要在任何操作系统上获得一致的结果,则使用 path.win32:
  2. path.win32.basename('C:\\temp\\myfile.html');
  3. // 返回: 'myfile.html'
  4. 当使用 POSIX 文件路径时,若要在任何操作系统上获得一致的结果,则使用 path.posix
  5. path.posix.basename('/tmp/myfile.html');
  6. // 返回: 'myfile.html'
  • path.dirname(path)

path.dirname() 方法返回 path 的目录名,类似于 Unix dirname 命令。

  1. path.dirname('/foo/bar/baz/asdf/quux');
  2. // 返回: '/foo/bar/baz/asdf'
  • path.extname(path)

path.extname() 方法返回 path 的扩展名,即 path 的最后一部分中从最后一次出现的 .(句点)字符到字符串的结尾。 如果 path 的最后一部分中没有 .,或者除了 path 的基本名称(参见 path.basename())的第一个字符之外没有 . 个字符,则返回空字符串。

  1. path.extname('index.html');
  2. // 返回: '.html'
  3. path.extname('index.coffee.md');
  4. // 返回: '.md'
  5. path.extname('index.');
  6. // 返回: '.'
  7. path.extname('index');
  8. // 返回: ''
  9. path.extname('.index');
  10. // 返回: ''
  11. path.extname('.index.md');
  12. // 返回: '.md'
  • path.parse(path)

path.parse() 方法返回一个对象,其属性表示 path 的重要元素。

  1. //在 POSIX 上:
  2. path.parse('/home/user/dir/file.txt');
  3. // 返回:
  4. // { root: '/',
  5. // dir: '/home/user/dir',
  6. // base: 'file.txt',
  7. // ext: '.txt',
  8. // name: 'file' }
  9. //在 Windows 上:
  10. path.parse('C:\\path\\dir\\file.txt');
  11. // 返回:
  12. // { root: 'C:\\',
  13. // dir: 'C:\\path\\dir',
  14. // base: 'file.txt',
  15. // ext: '.txt',
  16. // 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])方法将路径或路径片段的序列解析为绝对路径

  1. const path = require('path');
  2. const path1 = path.resolve('/a/b', '/c/d');
  3. // 结果: /c/d
  4. const path2 = path.resolve('/a/b', 'c/d');
  5. // 输出: /a/b/c/d
  6. const path3 = path.resolve('/a/b', '../c/d');
  7. // 输出: /a/c/d
  8. const path4 = path.resolve('a', 'b');
  9. // 输出: /Users/xiao/work/test/a/b
  • 如果没有传入 path 片段,则 path.resolve() 将返回当前工作目录的绝对路径。
  • resolve在传入第一个参数/路径时,会自动加上当前目录形成一个绝对路径。
  • resolve操作相当于进行了一系列的cd操作
  • 该方法只是处理path的字符串,不考虑实际是否存在

path.join

path.join():连接任意多个路径字符串,相比path.join:

  • 也可以从左到底右看成cd操作
  • 但是 join不会把/看成绝对路径

    1. path.join('/a', '/b');
    2. // /a/b
    3. path.resolve('/a', '/b');
    4. // /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

  1. <a name="LKpua"></a>
  2. ### __dirname
  3. 当前模块的目录名。 这与 __filename 的 path.dirname() 相同。【不包含文件名本身的绝对路径】
  4. ```javascript
  5. console.log(__dirname);
  6. // 打印: /Users/mjr
  7. console.log(path.dirname(__filename));
  8. // 打印: /Users/mjr

__filename

当前模块的文件名。【包含文件名本身的绝对路径】

  1. console.log(__filename);
  2. // 打印: /Users/mjr/example.js
  3. console.log(__dirname);
  4. // 打印: /Users/mjr

process

从官网学习Node.js Process模块方法速查

http://nodejs.cn/api/process.html

process 对象提供有关当前 Node.js 进程的信息并对其进行控制。 虽然它作为全局可用,但是建议通过 require 或 import 显式地访问它:

  1. import process from 'process';

process 对象是 EventEmitter 的实例。

process.cwd(),process.chdir()

cwd方法返回进程的当前目录(绝对路径),chdir方法用来切换目录。

  1. process.cwd()
  2. '/home/aaa'
  3. process.chdir('/home/bbb')
  4. process.cwd()
  5. '/home/bbb'

process.env

process.env属性返回一个对象,包含了当前Shell的所有环境变量。

通常的做法是,新建一个环境变量NODE_ENV,用它确定当前所处的开发阶段,生产阶段设为production,开发阶段设为develop,然后在脚本中读取process.env.NODE_ENV即可。

process.argv

process.argv 返回一个数组,数组元素分别如下:

  • 元素1:node
  • 元素2:可执行文件的绝对路径
  • 元素x:其他,比如参数等
    1. node test.js aa bbb
    2. [
    3. 'C:\\Program Files\\nodejs\\node.exe',
    4. 'E:\\2022-git\\webpack-deep-dive\\test.js',
    5. 'aa',
    6. 'bbb'
    7. ]

    process.execArgv

    返回 node specific 的参数(也就是运行node程序特有的参数啦,比如 —harmony)。这部分参数不会出现在 process.argv 里。

    process.nextTick()

    process.nextTick 将任务放到当前一轮事件循环(Event Loop)的尾部,微任务。
    1. process.nextTick(function () {
    2. console.log('下一次Event Loop即将开始!');
    3. });

    事件

    http://nodejs.cn/api/events.html

所有触发事件的对象都是 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’); ```