今天在逛网页的时候看到了一个古诗词的API,然后突发奇想,用了10分钟的时间做了一款npm全局依赖包。你可以使用npm install -g pome-cli
来先玩一玩。有好东西当然要跟大家分享一下啦,现在从0开始给大家简绍打造这款全局依赖包。
创建项目
首先创建一个文件夹,比如poem-cli
(这里以poem-cli
来讲,在你开发的时候换一个名字,因为这个名字已经被我注册了),然后进入该文件夹,命令行输入npm init
,里面的选项根据自己的喜好来设置就可以了,默认的话回车就行。等命令行输完以后,会在该目录下自动创建一个package.json
文件,这个文件大家一定不陌生吧。
代码编写
由于我们的数据是走网络请求的,axios是一个可以在浏览器环境和Node环境同时运行的一个HTTP框架。我们这里也引入这个库来简化我们的发送请求过程,命令行输入npm install axios
。新建一个index.js
文件写入请求的代码,由于我们目前对API的结构不太了解,就直接打印出返回的数据就行了:
1 | const axios = require('axios'); |
在命令行输入node index
来运行一下上面的代码,可以看到打印的结果如下,当然具体的内容可能有点不太一样:
我们可以看到返回的数据是一个JSON对象,那么我们就好处理了,只要稍微修改一下代码,让显示的更好看一点:
1 | const axios = require('axios'); |
此时的效果如下:
当然我们经常看到的诗句,署名往往是右对齐的,我们这里也稍微处理一下对于没有诗句长的署名,让署名右对齐。要想右对齐其实很简单就是左边加空格填充呗:
1 | const axios = require('axios'); |
现在代码已经很多了,代码第6行和第7行我们把署名和横线拆分成2个变量,因为一个汉字相当于2个空格而一个横线是一个字符,上面的prefix
中其实是4个短横线和一个空格组成的。然后在代码的第9行我们计算了一下需要填充的空格数量,也就是诗句乘以2然后减去署名乘以2再减去横线(诗句和署名都是汉字或者汉字的标点符号占了2个空格),还有一种特殊情况是,有些署名中有符号的点(·),如李商隐《无题·昨夜星辰昨夜风》
中的点,这个点占据了一个字符,我们要对这个点做特殊处理,特殊处理见第11到第13行代码,最后14行代码把空格也加上。后面打印的时候多了2个console.log();
是为了换行,当然是用\n
来换行也是可以的。需要说明的是我们这里使用字符串的拼接来做的,当然也可以使用ES6的模板字符串。最后看一下结果:
添加配置
现在我们的代码基本上写的差不多了,然后试着按照全局包来处理。首先修改package.json
文件,添加bin
字段,bin
字段的作用是告诉环境执行命令的时候执行哪个文件。如下:
1 | { |
上述第5到7行可是重点哦,写了bin
以后在bin
的入口文件(也就是index.js
文件)的最上方还要加一行代码,如下:
1 |
|
#!/usr/bin/env node
看着和注释很像,到底有什么作用呢?其实它声明了脚本文件的解释程序,脚本文件有很多,我们要运行这个index.js
,就得告诉系统你是要用什么来执行我们的脚本,这里当然是使用node了。
把这两个地方修改后,我们基本上可以使用了,先测试一下看可以用不。使用npm link
命令,它的作用是把当前文件夹拷贝到node全局包的安装环境下,当拷贝过去以后你就可以把他当成一个全局包使用了,拷贝完后直接使用poem-cli
来运行脚本就可以了。
发布到npm仓库上
npm link
命令是把本地的文件夹放在全局目录下,但是为了更多的小伙伴使用我们的包,就需要把该包放在npm仓库中。首先需要去npm官网注册自己的账号,已有账号忽略这一步。此外由于国内一般使用的是淘宝的镜像,如果你使用的也是淘宝的或者其他的镜像,这里必须要切回到npm的镜像,强烈建议使用nrm来管理镜像源:
1 | # 安装nrm |
在提交的时候,往往有些东西是不希望提交的,那么可以新建一个.npmignore
文件,作用类似于.gitignore
,只是这个是提交npm仓库的时候忽略的,这里我们在该文件的内容如下:
1 | node_modules/ |
当这个时候你只需要登录npm并且发布就好了,如果已经登录了就可以直接发布了(可以使用命令npm whoami
来查看自己的登录信息,再次强调一定要切到npm镜像源):
1 | # 登录npm 需要数据用户名 密码 邮箱等 |
发布的速度还是挺快的,当你发布完成以后就可以使用npm install -g poem-cli
来安装全局包了,当然这个名字已经被我注册了,你需要换一个名字。最后使用poem-cli
来运行就可以了,大功告成。此时你可以使用命令nrm use taobao
切换到淘宝镜像了,往往淘宝镜像会在5分钟内从npm获取一下新的包,所以你切到淘宝的镜像,5分钟后也可以安装(其实一般情况下根本不到5分钟)。
十分钟的时间差不多到了,我们的全局依赖包已经做完了,是不是收获还不错,下一节我们再利用20分钟,让我们的全局安装包做的更好一点,同时也简绍命令行工具常用的2个工具库。可以点击这里进入。