今天咱们要谈论建立 node.js 可执行文件。javascript
我想拥有一个我在个人计算机上打字,而后把它变为其中的一个小熊表情。java
目前能够看到个人机器上没有此命令,咱们开始动手写一个node
准备工程git
mkdir node-cli
cd node-cli
touch cli.js
touch bears.txt
复制代码
bears.txt
:npm
ʕ•ᴥ•ʔ
ˁ˚ᴥ˚ˀ
ʕ·͡ᴥ·ʔ
óÔÔò
(● ̄(エ) ̄ ●)
⊂(・(ェ)・)⊃
ʕ•͡ ᴥ•͡ ʔ
ʕ•͡ᴥ•ʔ
(●`・(エ)・ ´●)
ʕノ•ᴥ•ʔノ ︵ ┻━┻
复制代码
cli.js
:json
#!/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);
});
复制代码
让咱们把全部的代码逐行说说。数组
#!/usr/bin/env node
是一个 shebang 行的实例,它告诉咱们的系统用什么解释器来执行该文件fs.readFile(...)
引用 fs
模块读取文件 bears.txt
内容const bears = ...
将文件流转换成字符串,用换行符(\n
)分割字符串成为数组const bear = ...
在bears
数组随机取出一个元素console.log(bear);
在控制台中打印出取出的元素执行 node cli.js
结果以下bash
每次随机打印出一个小熊dom
到如今咱们还不能执行这个文件,执行./cli.js
不会有任何结果,这是由于当前文件仍是不可执行的。工具
咱们经过chmod +x cli.js
来修改当前文件能够执行
这个时候咱们就能够执行 ./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"
}
复制代码
这个时候还不能全局执行,想要全局能够执行有两种方法
npmjs.com
,而后全局安装 npm i bearme -g
npm link
建立一个全局链接在部署以前,咱们须要在 package.json
中添加一些信息。
"homepage": "YOUR GITHUB REPO OR SITE HERE",
"repository": {
"type": "git",
"url": "git+YOUR GITHUB REPOSITORY HERE"
},
"engines": {
"node": ">=8"
},
复制代码
nodejs
版本号,简单地定义了你的项目应该在最小版本的节点上工做。 版本号取决于你用了那些版本的特性。下面是接下来的步骤。
npmjs.com
上建立一个帐户(可选,若是有能够忽略)npm login
命令并输入你的信息npm publish
命令,它将在几分钟内自动发布。npm link
和上面方法两者选其一,在当前目录下执行 npm link
执行bearme
看看效果
就是这样! 动手建立了一个命令行工具