前言
cli
是在 Node
上开发的,因此我们需要掌握一些必要的前置知识。
本文内容主要对这些必要的前置知识进行讲解。
注意:以下所有示例均以 Macos 环境为例
path
该模块提供了一些用于处理文件路径的小工具,用于处理目录的对象,提高用户开发效率,让我们一起来快速的认识path对象的一些常用方法吧!
path.relative()
该方法接受两个参数,这两个参数都应该是绝对路径。
该方法返回第二个路径相对于第一个路径的那个相对路径。
path.relative(from:string,to:string):string
如果from
或to
不是字符串,则抛出TypeError
1 | import path from 'path' |
上面代码中,如果当前目录是'/write-cli/folder/aaa'
,进入path.relative
返回的相对路径,就会到达'/write-cli/anotherFolder/bbb'
。
如果path.relative
方法的两个参数相同,则返回一个空字符串。
1 | console.log(path.relative('/write-cli/folder/aaa', '/write-cli/folder/aaa')) |
path.resolve
方法将相对路径解析为绝对路径。
它可以接受多个参数,依次表示所要进入的路径,直到将最后一个参数转为绝对路径。
path.resolve([...paths]:Arrary<string>):string
如果任何参数不是字符串,则抛出TypeError
如果根据参数无法得到绝对路径,就以当前所在路径作为基准。除了根目录,该方法的返回值都不带尾部的斜杠。
1 | // 格式 |
上述实例其实类似于做了如下操作
1 | cd folder/aaa |
更多栗子🌰🌰🌰
1 | path.resolve('/foo/bar', './baz'); |
path.join
该方法用于连接路径。
主要用途在于,会正确使用特定于平台的分隔符作为定界符将所有给定的 path
片段连接在一起,然后规范化生成的路径。
Linux/Macos 系统是 ‘/‘,Windows系统是 ‘'。
path.join([...path]:Array<string>):string
如果任何路径片段不是字符串,则抛出TypeError
1 | path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); |
path.parse
该方法可以返回路径各部分的信息。
1 | path.parse(path:string):{ |
举个例子🌰
1 | path.parse('/Users/joker/Documents/write-cli/folder/aaa/a.js') |
path.extname
该方法可以返回对应的扩展名。
如果 path
的最后一部分中没有 .
,或者除了 path
的基本名称的第一个字符之外没有 .
个字符,则返回空字符串。
path.extname(path:string):string
如果path
不是字符串,则抛出TypeError
举几个例子🌰
1 | path.extname('index.html'); |
_dirname
总是指向被执行 js 文件的绝对路径。
所以当你在 /write-cli/folder/aaa/a.js
文件中写了 __dirname
, 它的值就是 /write-cli/folder/aaa/
常跟 path 一起使用的的还有一个非常好用的库
slash
,这个将在后面的篇幅中介绍。
process
process
是node
的全局模块,提供l有关当前 Node.js 进程的信息并可以对其进行控制。
process.env
这个大家应该很熟悉了,process.env
属性返回一个包含用户环境信息的对象。
在process.env
中新增一个属性,会将属性值转换成字符串。
平时工作中我们用的比较多的一般是以下几种
1 | if(process.env.NODE_ENV === 'production'){ |
在 cli 的的开发中,我们也将在多处使用以上的用法。
process.exit()
该方法可以用来立即退出进程。
如果程序出现异常,必须退出不可,那么我们可以约定一个exitCode
用来作为异常退出的退出码,同时抛出一个未被捕获的error,来终止进程。
process.exit(exitCode=0:number)
process.exitCode
当进程正常退出或通过process.exit()
退出而不指定代码时,0
将作为进程的默认退出码。
如果有process.exit(exitCode)
将覆盖 process.exitCode
的任何先前设置。
举个栗子🌰
1 | fun(){ |
process.stdout
process.stdout
属性返回连接到 stdout
(文件描述符 1
) 的流。
例如,要将 process.stdin
复制到 process.stdout
:
1 | import { stdin, stdout } from 'process'; |
process.cwd()
process.cwd()
方法返回 Node.js 进程的当前工作目录。
process.cwd():string
最后
以上内容同学们暂时记不住不要紧,后面实战篇用到的时候可以到这边来边实战边加强记忆。
本文参考了 Node.js 文档