创建一个 Node.js CLI

1,784 阅读2分钟

今天我们要谈论创建 node.js 可执行文件。

我想拥有一个我在我的计算机上打字,然后把它变为其中的一个小熊表情。

Node.js CLI

Node.js CLI

目前可以看到我的机器上没有此命令,我们开始动手写一个

开始

准备工程

mkdir node-cli
cd node-cli
touch cli.js
touch bears.txt

bears.txt:

ʕ•ᴥ•ʔ
ˁ˚ᴥ˚ˀ
ʕ·͡ᴥ·ʔ
óÔÔò
(● ̄(エ) ̄ ●)
⊂(・(ェ)・)⊃
ʕ•͡ ᴥ•͡  ʔ
ʕ•͡ᴥ•ʔ
(●`・(エ)・ ´●)
ʕノ•ᴥ•ʔノ ︵ ┻━┻

cli.js

#!/usr/bin/env node
const fs = require("fs");

fs.readFile("bears.txt", (err, data) => {
  const bears = data.toString().split("\n");
  const bear = bears[Math.floor(Math.random() * bears.length)];
  console.log(bear);
});

让我们把所有的代码逐行说说。

  1. #!/usr/bin/env node 是一个 shebang 行的实例,它告诉我们的系统用什么解释器来执行该文件
  2. fs.readFile(...) 引用 fs 模块读取文件 bears.txt 内容
  3. const bears = ... 将文件流转换成字符串,用换行符(\n)分割字符串成为数组
  4. const bear = ...bears数组随机取出一个元素
  5. console.log(bear); 在控制台中打印出取出的元素

执行 node cli.js 结果如下

Node.js CLI

每次随机打印出一个小熊

到现在我们还不能执行这个文件,执行./cli.js 不会有任何结果,这是因为当前文件还是不可执行的。

Node.js CLI

我们通过chmod +x cli.js 来修改当前文件可以执行

Node.js CLI

这个时候我们就可以执行 ./cli.js

回到最初想法,我们想在命令行输入 bearme 就会执行 cli.js 这时候需要添加package.json 信息

npm init -y

修改如下:

{
  "name": "bearme",
  "version": "1.1.0",
  "description": "",
  "main": "cli.js",
  "bin": {
    "bearme": "cli.js"
  },
  "scripts": {
    "start": "node index.js",
    "test": "node test.js"
  },
  "preferGlobal": true,
  "author": "",
  "license": "MIT"
}

这个时候还不能全局执行,想要全局可以执行有两种方法

  1. 发布这个包到npmjs.com,然后全局安装 npm i bearme -g
  2. 使用npm link 创建一个全局连接

发布 CLI 到 NPM

在部署之前,我们需要在 package.json 中添加一些信息。

"homepage": "YOUR GITHUB REPO OR SITE HERE",
"repository": {
  "type": "git",
  "url": "git+YOUR GITHUB REPOSITORY HERE"
},
"engines": {
  "node": ">=8"
},
  • homepage 和 repository 要填写你自己的 GitHub 项目地址
  • engines 确认 nodejs 版本号,简单地定义了你的项目应该在最小版本的节点上工作。 版本号取决于你用了那些版本的特性。

下面是接下来的步骤。

  • npmjs.com 上创建一个账户(可选,如果有可以忽略)
  • 运行 npm login 命令并输入你的信息
  • 运行 npm publish 命令,它将在几分钟内自动发布。

npm link

和上面方法二者选其一,在当前目录下执行 npm link

执行bearme 看看效果

bearme

 就是这样! 动手创建了一个命令行工具

参考

  1. Creating a Node.js CLI