入口文件和基本配置文件

mhist-cli
├── index.js
├── package.json

可以通过命令创建package.json文件

1
npm init -y

终端命令

需求:在终端输入指令后,会显示你所定义的相应的类似版本号之类的内容。

知识: #! (#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径,这个是告诉系统,应该调用哪个东西来运行他。)

定义路径

1
#!/usr/bin/env node

同时在package.json中添加一个对象

1
2
3
"bin": {
"mhist-cli": "index.js"
},

这时候需要使用 npm link 命令,将环境进行链接,之后在终端输入你指定的mhist-cli就会在终端输出你需要的相应的结果,其实也就是能够直接完成 node index.js.

mhist-cli-001

自定义终端命令

基于commander.js

1
npm install commmander

版本号

通常情况下,在package.json中会有项目当前的版本号,我们可以通过commander中的

1
program.version(require('./package.json').version);

动态获取到最新的版本号,以便于在终端进行输出。

在文件根目录中终端中输入 脚手架名称 –version 即可显示对应的版本号,例如 mhist-cli –version或者mhist-cli -V ,其输出结果为 1.0.0

#如果希望程序响应-v选项而不是-V选项,
#只需使用与option方法相同的语法将自定义标志传递给version方法
program
.version(‘0.0.1’, ‘-v, –version’)

开发过程中遇到的问题

下载项目模板,需要自动化实现npm install,通过自己的脚手架创建项目时,出现以下问题:

events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: spawn npm ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'spawn npm',
  path: 'npm',
  spawnargs: [ 'install' ]
}

解决方案:issue

按照上述issues的说法并没有解决相应的问题,在运行npm命令时需要考虑平台的问题。

1
2
// 2.执行npm install
const command = process.platform === 'win32' ? 'npm.cmd': 'npm';

当然在这之前,我也按照搜到的资料,设置了环境变量,然后现在成功运行之后,为了控制变量,删除了之前添加的环境变量,发现项目模板能够正确创建,同时能够自动通过npm install下载需要的依赖包。