自定义命令行开发

170 阅读2分钟

我们在使用umi vue-cli等进行项目开发的时候,都是使用命令去启动我们的服务,那么这些框架是启动一个服务的呢?

使用node执行js

我们都知道使用node命令可以运行js脚本

所以在npm的项目中会有如下配置,原理就是将长长node命令行简写为start,作为npm命令的脚本入口,相当于取了一个别名:

// 使用 npm run start 启动项目
"scripts": {
  "start": "node ./src/index"
}
声明的命令的原理

如果我们想开发一个第三方的依赖库,项目中如何使用第三方库的启动命令呢?这里也就是umi等框架中如下代码的原理了:

// 这里的 umi 命令为第三方框架的声明命令,我们可以运行umi dev来运行umi框架中的入口文件,启动umi项目了
"scripts": {
  "start": "umi dev",
}
如何实现一个自定义声明命令

既然我们了解了原理,现在就来实现一个名称为:mycommand的命令行吧!

  1. 使用npm init 初始化

    {
      "name": "command",
      "version": "1.0.0",
      "description": "命令行基础实践",
      "main": "index.js",
      "bin": {
        "gcommand": "./bin/index.js"
      },
      "author": "gaoyan",
      "license": "ISC"
    }
    ​
    
  2. 配置上 bin 属性,并添加bin脚本的入口路径

    "bin": {
      "mycommand": "./bin/my-command.js"
    },
    
  3. 编写my-command.js代码

    #!/usr/bin/env nodeconsole.log('My Command!')
    

现在我们的第三方库就完成了,我们为其他用户提供了一个名叫mycommand的可执行命令,并指定了命令的代码入口

使用自定义声明命令

bin 声明的命令需要被安装到 node_modules.bin 目录下才能找到,所以在未发布的情况下,我们可以使用npm link去做一个链接指向

  1. 使用npm init 初始化

  2. 使用npm link command将依赖的指针指向我们的第三方库,注意link的名字为第三方库package.json中的name

  3. 添加npm启动脚本,注意这里使用的是npx

    npx 是 npm 自带的一个工具,它会自动查找当前依赖包中的可执行文件,如果没找到,就会找你全局安装的命令,如果还是没找到,那它就会从远程服务器上下载你需要的依赖。

    "scripts": {
      "start": "npx command",
    }
    

至此,我们已经将自定义命令行的实现和使用已经了解清楚了。如果需要开发一个自己的第三方库,这是最最基础的知识啦....