nodejs基础(2)


2019-3-24 nodejs

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
    10
  • commander.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('输出的字符')
        ```
1
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)
})
1
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
1
2
3
4
5
6
7
8