nodejs基础(2)
nodejs
node 中比较重要的模块 npm node 包管理器。
npm
简单使用
搜索
npm search packageName -P 流行度 -Q 质量 -M 维护频率 -O 综合
下载
npm install 或者 npm i 默认下载到当前命令所在的目录下,生成一个 node_modules 目录下 下载历史版本 npm install 包@版本号 npm install git-host:gituser/repo-name npm install git reqpo url npm install tar 格式的压缩文件 npm install tar 格式的压缩文件的地址 npm install 文件夹 -g 安装到全局 如果有 nvm node 版本管理器,在切换 node 版本的时候 安装到全局的也会被切换掉
列表
npm ls
升级
npm update 包名@版本号 或者 npm up 包名@版本号
删除
删除一个包 npm uninstall
说明文件
每一项目都有自己的说明文件 就是在根目录下的 package.json
name 名称 一个单词 全小写 可以使用 点 和横线 version 版本 以及版本约定 main 入口文件
发布自己的 npm 包
- 注册 npm 账号
- 在本地登录账号密码 npm login /或者 npm adduser
- npm publish 发布
搜索 npm search '包'
node cli
模式 command [subcommand][options][arguments] 命令 - 子命令 - 选项 - 参数
选项是 内置实现 用户直接选择就可以了
参数是用户传递进来的
实现 cli 开发的框架
commander 框架
const commander = require('commander')
commander.version('v1.0.0', '-v,--version') // 设置当前命令的版本信息
commander.option('-n,--name
','设置名称变量','zmouse')//自定义的指令 1 命令 2 描述 <对应的值> 尖括号 必填 中括号 选填 3 对应的值 //第三个参数的 方法 commander.option('-n,--name [val]', '设置名称', A => { if (A === 'A') { console.log('aaa') return A } console.log('=====================================') return 'miaov-option' })
1
2
3
4
5
6
7
8
9设置命令的动作 commander.action
commander.action(() => { console.log('hello', commander.name) })
1
2
3给主命令添加子命令 commander.command() //子命令没有名字的时候 的 action 要挂载在主命令上
commander .command('create [app-name]') .description('创建项目') //描述 .alias('c') //别名 命令 .usage('使用说明') //使用说明 .action(a => { //命令行动映射 console.log(a) console.log('wo shi create') })
1
2
3
4
5
6
7
8
9
10commander.parse(process.argv)//最后解析 命令
如果选项不接受值 那么选项会以布尔值 来供 内部使用 如果用户在使用过程中没有带 那么 该值为 false 如果带了那么是 TRUE
commander 多个参数的方法
const commander = require('commander') const subcommander = commander.command('create <a> <b> <c>') subcommander.action((a, b, c) => { console.log(a) console.log(b) console.log(c) }) commander.parse(process.argv) //$ node app.js create asdsa aa aa //asdsa //aa //aa
1
2
3
4
5
6
7
8
9
10
11
12
chalk 框架
链式调用 styles
- modifiers 文字的修饰 加粗 斜体下划线
- 文字的颜色
- 文字的背景颜色
- 使用方法
```
chalk.style().modifiers() //链式调用
chalk.red.bggreen('输出的字符')
```
2
3
4
5
6
7
8
inquire 框架 交互式命令
inquirer.prompt(quersion).then(answer=>{ ..... }) 收集问题 在回答中做出相应 question type 提问类型
inquirer.prompt([
{
type:'input',//输入式的
name:'username',//变量的名称 KEY 值
message:'请输入你的用户名',//给用户看的提示信息
default:'zmouse',
validate(){
//对用户的数据进行验证
return ‘对用户输入的数据的不正确情况给出反馈’
},
filter(val){
//对用户输入的值经行转换 过滤
return val.tolowerCase()
}
},{
type:'comfirm',//确认式的 只有 false 和 true 两个值
name:'userES6',
messgage:'是否启用 ES6 支持',
default:true
},{
type:list,//单选式的
name:'',
message:'',
choices:['vue','react','angular']//可供选择的数组,内部数据可以式一个字符串也可以是一个包含属性的对象
default:1
},
{
type:rawlist,//单选式的 表现效果不同
name:'',
message:'',
choices:['vue','react','angular']//可供选择的数组,内部数据可以式一个字符串 也可以是一个包含属性的对象
default:1
},{
type:'checkbox'//多选式的
name:'',
message:'',
choices:[{
name:‘使用 eslint’,
value:‘eslint’,
checked:true
},{},{}]//可供选择的数组,内部数据可以式一个字符串 也可以是一个包含属性的对象
}
]).then(answers=>{
clog(answers)
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
去除命令行的 node 运行
使用批处理 使用 系统脚本
命令的全局
主要靠 package.json 下的 bin 字段 指明其所对应的路径文件时一个可执行的二进制命令文件,在安装包之后就会自动在包下对应位置生成一个 bin 目录,在目录中会产生两个系统文件一个对应 linux 一个对应 window,这样就可以执行命令,而如果安装到全局之后命令就可以在全局使用改指令
//package.json
bin:{
"zm-hello":"./index.js" //脚本名称 和对应路径
}
// 发布 包之后 下载 会生成一个
//bin文件夹下 生成 zm-hello.js 和 zm-hello.js.cmd
2
3
4
5
6
7
8