十分鍾通過 NPM 創建一個命令行工具


大過年的,要不要寫點代碼壓壓驚?來花十分鍾學一下怎么通過 NPM 構建一個命令行工具。

寫了一個小 demo,用於代替 touch 的創建文件命令 touchme ,可以創建自帶“佛祖保佑”注釋的文件。效果如下: 

命令可以帶有一個參數,選擇注釋的符號

現在,開始擼代碼 ~

首先創建一個文件夾,我起名字 create-file-cli 然后通過 npm init 命令創建 package.json 文件。

$ mkdir create-file-cli
$ cd create-file-cli
$ npm init -y

然后修改 package.json 添加一個 bin 字段,定義一個 touchme 命令,並指定該命令執行的文件。

{
  "name": "create-file-cli",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "bin": {
    "touchme": "bin/touchme.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

接下來實現 bin/touchme.js ,要用到  Commander.js -- node.js 命令行接口的完整解決方案。看不懂英文文檔還有貼心的中文 README

bin/touchme.js 如下

#!/usr/bin/env node

const program = require('commander');
const gen = require('../lib/generate-file');

program
  // 版本信息
  .version('0.0.4', '-v, --version')
  // 用法說明
  .usage('<file ...> [options]')
  // 選擇名 選項描述 默認值
  // 選項 可以帶有一個參數 可以通過 program.copy 獲取該選項信息
  // 如果沒有參數 該值為 true
  .option('-c, --copy <source>', 'copy file and add comment')
  .option('-H, --hashtag', `comment by '#'`)
  .option('-s, --slash', `comment by '/'`)
  .parse(process.argv);

function resolve(program) {
  // 沒有匹配任何選項的參數會被放到數組 args 中
  const { copy, hashtag, slash, args } = program;
  if (!args.length) {
    console.log('Please input filename.');
    return;
  }
  if (copy === true) {
    console.log('You should copy at least one file.');
    return;
  }
  let type = 'star';
  if (slash) type = 'slash';
  if (hashtag) type = 'hashtag';
  for (let i = 0; i < args.length; i++) {
    gen(args[i], copy, type);
  }
}

resolve(program);

具體 lib/generate-file.js 實現見 https://github.com/G-lory/create-file-cli/ 就是簡單的創建一個文件並寫入注釋。

通過 option 定義命令選項並可定義參數。

通過 program 可以獲取命令行輸入的參數信息。

現在功能寫完了,剩下的事情就是發布了。首先要到 https://www.npmjs.com 查找一下自己的包名有沒有人已經發布了,如果有的話,你需要先修改包名。然后在 https://www.npmjs.com 注冊一個賬號。記住自己的賬號密碼和郵箱后,回到命令行。

$ npm login
Username: ...
Password: 
Email: (this IS public)
Logged in as ... on https://registry.npmjs.org/.

注意登錄成功后顯示的是 https://registry.npmjs.org/ 很多同學設置了淘寶的鏡像,顯示的就不是這個地址,那么發布之前要改回來。

$ npm config set registry=http://registry.npmjs.org

然后就可以發布包了。

$ npm publish

如果之后有修改,更改一下 package.json 中的版本號 然后再次執行 npm publish 即可。

發布后可以去 npm 網站搜索一下自己的包。然后就是安裝測試一下功能。

全局安裝一下

$ npm install create-file-cli -g

然后就可以使用 touchme 命令創建文件了。也可以使用 touchme -h 來查看幫助。

一個命令行工具就創建成功啦~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM