美文网首页
npm全局包及cli制作方法

npm全局包及cli制作方法

作者: 长不大的嘤嘤怪 | 来源:发表于2019-04-02 11:33 被阅读0次

全局命令注册:

首先说一下npm全局包,npm install xxx -g 即为全局安装,全局安装的npm包一般都带有cmd命令,比如安装vue-cli后执行“vue create XXX”即可生成一个新的vue项目模版,再比如安装http-serve后执行“http-serve”命令可以本地起一个静态服务
那么这些全局命令怎么实现的呢?其实很简单只需要在package.json文件里增加一个 "bin" 属性即可:

"version": "0.0.1",
"description": "",
"bin": {
    "vue-common": "./bin/index"
 },

这样把包上传并全局安装后则会在本地注册一个全局命令,但是我们看到一般这种全局命令都会传若干个参数,例如最常见的:“npm i xxx -g”,"npm -version"这个是怎么做到的呢?这个时候“commander”该出场了,“npm install commander --save”即可本地安装保存,下面给一个简单的使用示例:

#!/usr/bin/env node

const program = require('commander')

program
  .version('0.0.1', '-v, --version')

program.on('--help', function () {
  console.log('no help can use')
});

program
  .command('create <app-name>')
  .description('create a new project')
  .action((name, cmd) => {
    console.log('your app name is ' + name);
    console.log('your cmd is '+ cmd);
  })

program.parse(process.argv);

其中上面的action里的回调方法接受两个参数,第二个参数实际上是一个object,借鉴vue-cli里的一个处理方法:

function camelize (str) {
  return str.replace(/-(\w)/g, (_, c) => c ? c.toUpperCase() : '')
}
// commander passes the Command object itself as options,
// extract only actual options into a fresh object.
function cleanArgs (cmd) {
  const args = {}
  cmd.options.forEach(o => {
    const key = camelize(o.long.replace(/^--/, ''))
    // if an option is not present and Command has a method with the same name
    // it should not be copied
    if (typeof cmd[key] !== 'function' && typeof cmd[key] !== 'undefined') {
      args[key] = cmd[key]
    }
  })
  return args
}

有关于commander的用法就讲到这里,因为还有很多,如果直接看官方文档看不明白的可以选择直接阅读vue-cli的源码,里面相关的使用较多,可以参考借鉴

本地调试npm包:

执行npm link即可,该命令会生成一条软链,指向全局包,即

npm link
/usr/local/bin/vue-common -> /usr/local/lib/node_modules/vue-fe-common/bin/index.js
/usr/local/lib/node_modules/vue-fe-common -> /Users/dong/Desktop/draft/command

输出第一行的意思是“vue-common”命令指向的具体文件位置(这个位置并非包在本机的开发路径),第二行是被link到全局的vue-fe-common包指向的实际位置

相关文章

  • npm全局包及cli制作方法

    全局命令注册: 首先说一下npm全局包,npm install xxx -g 即为全局安装,全局安装的npm包一...

  • Vue CLI 学习笔记

    组成 @vue/cli @vue/cli 是一个全局安装的 npm 包,提供了终端里的全局 vue 命令。 安装:...

  • Vue 基础 - Vue-cli

    起步 Vue相关的包都通过npm安装,因此请预先安装好Node.js。 安装淘宝镜像源及全局安装vue-cli: ...

  • Vue 项目创建基础配置

    Vue 项目创建时候的一些基础配置小记:CLI 即 @vue/cli 全局安装的 npm 包用于终端提供 vue ...

  • vue cmd的指令

    安装node 使用淘宝 NPM 镜像 全局删除vue-cli 全局安装vue-cli 创建项目 启动项目 npm ...

  • Node + MongoDB 建站 2期 -1

    Grant npm install grunt grant-cli -g全局安装grant及grant命令行工具,...

  • Vue3.0 @vue/cli 4.5.11

    CLI (@vue/cli) 是一个全局安装的 npm 包,提供了终端里的 vue 命令。它可以通过 vue cr...

  • npm 全局安装包

    npm查看全局安装过的包 npm更新单个全局安装包 npm查看可以更新的全局安装包 npm更新所有全局安装包

  • VUE vue-cli2.9.6升级@vue/cli3.10

    1,首先 npm uninstall -g vue-cli 全局卸载vue-cli2,然后 npm inst...

  • webpack4

    1》全局安装 npm install webpack -g npm install webpack-cli ...

网友评论

      本文标题:npm全局包及cli制作方法

      本文链接:https://www.haomeiwen.com/subject/gxlbbqtx.html