参数
process.argv
在js文件输入这个参数可以在执行js的时候得到你在node命令行输入信息如下:
得到的结果是一个数组
数组第一个值
'/Users/cmmac/.nvm/versions/node/v9.3.0/bin/node'---代表命令行中输入的node模块
数组第二个值
'/Users/cmmac/vscode/npm/dome-2/index.js'---代表命令行中输入的index.js文件
输入命令行时我们在后面再加一个参数:得到如下图结果
如图所示数组的第三个值就是我们命令行输入的‘hello’
因此通过这个参数我们可以不做命令行输入的内容制作我们的我们的命令行工具
自作一个简单的命令行工具
新建项目:
同样通过npm init 初始化(初始化配置信息就不说了按步骤来就好)
index.js文件写入简单的代码如下图
其中写入
#!/usr/bin/env node
表示这个文件默认用node执行;这样后面的使用这个命令行工具时候就不需要输入node index.js
到这里我们这个命令行的功能就完成了
执行给定的命令行 后台执行console.log('命令行测试')打印出'命令行测试'字符串
那我们要输入什么命令才会执行呢
我们已知有git或者npm的命令行只要输入git或者git xx 就能执行相应的命令;
这个时候我们打开package.json文件在里面添加一个字符串如下图
这样我们的命令行的命令就是hello
然后按照前面的教程把这个包发布到npm
发布成功后我们通过全局安装下载这个包
npm install -g zeeliu-command-line-test
然后在命令行执行
hello
如下图
天气预报命令行
同样是上面的文件;
修改里面的内容把命令改成mood 然后修改index.js的内容 做一个天气命令行工具;
当输入‘ mood 深圳 ’就出现深圳的天气
首先下载一个依赖包 ;request或者axios;用于发送ajax请求
然后完善index.js里的内容
由于天气api不提供中文搜索所以里面用了一个中文转拼音的依赖包
代码如下
#!/usr/bin/env node
var axios = require('axios')
var pinyin = require("node-pinyin")
//console.log(process.argv)
var cityid
var city = {}
var data = {}
if (process.argv[2]) {
if (ischinese(process.argv[2])) {
var str = ''
var arr = pinyin(process.argv[2], { style: 'normal' })
arr.forEach((e) => {
str += e.join()
});
city.params = {
location: str
}
} else {
city.params = {
location: process.argv[2]
}
}
//console.log(city)
axios.get('https://weixin.jirengu.com/weather/cityid', city)
.then(function (response) {
//console.log('进来了')
getCityid(response)
getWeather(data)
})
.catch(function (error) {
console.log('城市错误重新输入吧')
// console.log(error)
})
} else {
axios.get('https://weixin.jirengu.com/weather')
.then(function (response) {
//console.log('进来了')
console.log('下面是您所在地区的天气')
//console.log(response.data.weather[0])
var weather = response.data.weather[0]
console.log('时间:' + weather.last_update)
console.log('城市:' + weather.city_name + '-----' + '城市ID:' + weather.city_id)
console.log('天气:' + weather.now.text + '-----' + '风向:' + weather.now.wind_direction + '-----' + '风力等级:' + weather.now.wind_scale)
console.log('温馨提示:' + weather.today.suggestion.travel.details)
})
.catch(function (error) {
console.log('出错了')
// console.log(error)
})
}
//判断输入的城市是否是中文
function ischinese(s) {
var ret = true;
for (var i = 0; i < s.length; i++)
ret = ret && (s.charCodeAt(i) >= 10000);
return ret;
}
function getCityid(response) {
cityid = response.data.results[0].id
data.params = {
cityid: cityid
}
//console.log(data)
}
function getWeather(id) {
axios.get('https://weixin.jirengu.com/weather/now', id)
.then(function (response) {
console.log('下面是您所查找的城市的天气信息')
//console.log(response.data.weather[0])
var weather = response.data.weather[0]
console.log('时间:' + weather.last_update)
console.log('城市:' + weather.city_name + '-----' + '城市ID:' + weather.city_id)
console.log('天气:' + weather.now.text + '-----' + '风向:' + weather.now.wind_direction + '-----' + '风力等级:' + weather.now.wind_scale)
console.log('温馨提示:' + weather.today.suggestion.travel.details)
})
.catch(function (error) {
console.log('出错了')
// console.log(error)
})
}