摘要:新建項(xiàng)目使用快速生成一個(gè)來創(chuàng)建一個(gè)新的項(xiàng)目封裝腳本新建一個(gè)包含我們的腳本說明這是一個(gè)可執(zhí)行的應(yīng)用在中新建字段,用于存放一個(gè)可執(zhí)行文件接著執(zhí)行把這個(gè)字段復(fù)制到的全局模塊安裝文件夾內(nèi),并創(chuàng)建符號(hào)鏈接,軟鏈接,也就是將的路徑加入環(huán)境變量中去運(yùn)行
新建項(xiàng)目
使用 npm init 快速生成一個(gè) package.json 來創(chuàng)建一個(gè)新的 npm 項(xiàng)目:
{ "name": "happyday", "version": "1.0.5", "description": "Happy every day", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "keywords": [ "Nodejs", "JavaScript", "bash", "shell" ], "repository": { "type": "git", "url": "git+https://github.com/HuangXiZhou/happyday.git" }, "author": "[email protected]", "license": "MIT" }封裝腳本
新建一個(gè) index.js 包含我們的腳本
#!/usr/bin/env node // 說明這是一個(gè)可執(zhí)行的應(yīng)用 console.log("Happy everyday!")
在 package.json 中新建 bin 字段,用于存放一個(gè)可執(zhí)行文件
"bin": { "happyday": "./index.js" }
接著執(zhí)行 npm i -g && npm link 把 happyday 這個(gè)字段復(fù)制到 npm 的全局模塊安裝文件夾 node_modules 內(nèi),并創(chuàng)建符號(hào)鏈接(symbolic link,軟鏈接),也就是將 index.js 的路徑加入環(huán)境變量 PATH 中去
運(yùn)行 happyday
可以看到我們已經(jīng)成功打印出 Happy everyday!,現(xiàn)在我們可以開始開發(fā) npm 包了
解析命令行參數(shù)安裝 tj 大神的commander: npm i commander -S
The complete solution for node.js command-line interfaces, inspired by Ruby"s commander.
安裝 chalk 使得你的命令行更漂亮: npm i chalk -S
現(xiàn)在讓我們寫一下 demo 測(cè)試一下:
#! /usr/bin/env node const program = require("commander") const chalk = require("chalk") program .command("weather") // 命令行指令 .alias("w") // 定義別名 .description(chalk.green("Get weather forecast ;)")) // 這行文字變綠~ // 注冊(cè)一個(gè) `callback` 函數(shù) .action(option => { console.log("biubiubiu~") }) // 生成幫助信息 .on("--help", () => { console.log(" Examples:") console.log("") console.log("$ happyday weather") console.log("$ happyday w") }) program.parse(process.argv) // 解析命令行
執(zhí)行一下 happyday -h
Usage: happyday [options] [command] Options: -h, --help output usage information Commands: weather|w Get weather forecast ;)
這樣第一步就完成了,可以正式開發(fā)我們的 天氣預(yù)報(bào) 小玩具了
使用百度地圖 API 獲取天氣預(yù)報(bào)先在百度開發(fā)者中心注冊(cè)一個(gè) KEY
因?yàn)閼?.. 所以我直接引入 axios 實(shí)行 GET 請(qǐng)求:
const URL_IP = "http://api.map.baidu.com/location/ip" const KEY = { ak: "..." } ... .action(option => { axios.get(URL_IP, { params: KEY }) .then(res => { console.log(res) }) .catch(error => { console.log(chalk.red("emmmmm... I don"t know what happened.")) }) }) ...
先獲取用戶所在城市,再根據(jù)所在城市獲取用戶所在地的天氣預(yù)報(bào)
const URL_FORECAST = "http://api.map.baidu.com/telematics/v3/weather" const KEY = { ak: "..." } let getweatherModel = { location: "", output: "json", ak: KEY.ak, } ... getweatherModel.location = res.data.content.address_detail.city axios.get(URL_FORECAST, { params: getweatherModel }) .then(res => { if(res.status !== 200) { console.log(chalk.red("Whoops!!! There is something wrong with your network.")) } else { let resource = res.data if(resource.status !== "success") { console.log(chalk.red("emmmmm... I don"t know what happened.")) } else { console.log(resource) } } }) .catch(error => { console.log(chalk.red("emmmmm... I don"t know what happened.")) }) ...
獲取到數(shù)據(jù)之后,讓我們處理一下數(shù)據(jù)
`城市: ${chalk.green(resource.results[0].currentCity)} ??`
打印天氣預(yù)報(bào)
resource.results[0].weather_data.forEach(item => { console.log( `${item.date.slice(0, 2)}: ${chalk.green(item.weather)} | ${chalk.green(item.temperature)}` ) }, this)
這樣,我們的小玩具初步成型
然而... 百度地圖 API 只支持國(guó)內(nèi)的天氣預(yù)報(bào),所以像我們這些海外黨還是需要一些其他的手段
獲取海外城市天氣預(yù)報(bào)我選擇的是 Yahoo Weather API,因?yàn)楹芎闷嫠麄兗掖竺ΧΦ?YQL ...
引入 lodash,inquirer, yql 這三個(gè)庫(kù)
先上代碼
let config = _.assign({ cityName: "" }, option) let promps = [] if(config.cityName !== "string") { promps.push({ type: "input", name: "cityName", message: "Input your cityname:", validate: input => { if(!input) { return chalk.red("You should input something here...") } return true } }) } inquirer.prompt(promps).then(answers => { var query = new YQL(`select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="${answers.cityName}")`) query.exec((err, data) => { if(err) { console.log(chalk.red("emmmmm... I don"t know what happened.")) } else { if(!data.query.count) { console.log(chalk.red("Please... Enter the correct city name.")) } else { console.log(data) } } }) })
先來說說 inquirer 這個(gè)庫(kù)
功能簡(jiǎn)介:
input–輸入
validate–驗(yàn)證
list–列表選項(xiàng)
confirm–提示
checkbox–復(fù)選框等等
YQL 可謂是有些驚人,它可以像 SQL 那樣設(shè)計(jì),然后整合至 URL 上,確實(shí)有點(diǎn)奇葩
這樣,我們海外黨就也可以使用 happyday 了
發(fā)布 npm 包這個(gè)很簡(jiǎn)單啦
一步一步來:
在 npm 官網(wǎng)上 注冊(cè)一個(gè)賬號(hào)
在 bash 中輸入 npm login 登錄
npm publish 一個(gè)回車鍵搞定(每次 publish 之前都需要改一下包的版本號(hào),不然報(bào)錯(cuò))
就這樣我們就擁有了自己的第一個(gè) npm 包
本文代碼均在 https://github.com/HuangXiZhou/happyday 歡迎各位 Star
使用 happyday:
npm i happyday -g && happday w 即可
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89423.html
摘要:前言這是一個(gè)微信天氣小程序開發(fā)教程,簡(jiǎn)單易學(xué),半天即可完成。報(bào)錯(cuò)不能為空由于位置服務(wù)使用的騰訊位置服務(wù)微信小程序,請(qǐng)自行申請(qǐng)自己的密鑰。審核通過后授權(quán)給當(dāng)前要使用的微信小程序還需將微信小程序域名添加到白名單。 前言 這是一個(gè)微信天氣小程序開發(fā)教程,簡(jiǎn)單易學(xué),半天即可完成??筛鶕?jù)天氣不同,配置不同的背景圖片。初始默認(rèn)實(shí)時(shí)定位當(dāng)前位置天氣,也可搜索查詢各地區(qū)天氣。具體實(shí)現(xiàn)效果如下:show...
摘要:項(xiàng)目開發(fā)準(zhǔn)備描述項(xiàng)目技術(shù)選型接口接口文檔測(cè)試接口啟動(dòng)項(xiàng)目開發(fā)使用腳手架創(chuàng)建項(xiàng)目開發(fā)環(huán)境運(yùn)行生產(chǎn)環(huán)境打包運(yùn)行管理項(xiàng)目創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建本地倉(cāng)庫(kù)配置將本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù)在本地創(chuàng)建分支并推送到遠(yuǎn)程如果本地有修改新的同事克隆倉(cāng)庫(kù)如果遠(yuǎn)程修 day01 1. 項(xiàng)目開發(fā)準(zhǔn)備 1). 描述項(xiàng)目 2). 技術(shù)選型 3). API接口/接口文檔/測(cè)試接口 2. 啟動(dòng)項(xiàng)目開發(fā) 1). 使用react...
摘要:它使用方式,接收和響應(yīng)外部系統(tǒng)的某種請(qǐng)求?;仡櫸覀?cè)趯W(xué)習(xí)基礎(chǔ)網(wǎng)絡(luò)編程章節(jié)已經(jīng)知道了這么一個(gè)連接了。使用指定名稱的命名空間。名詞簡(jiǎn)單對(duì)象訪問協(xié)議作為一個(gè)基于語言的協(xié)議用于有網(wǎng)上傳輸數(shù)據(jù)。以的根元素出現(xiàn)。代理這么一個(gè)概念就更加清晰了。 WebService介紹 首先我們來談一下為什么需要學(xué)習(xí)webService這樣的一個(gè)技術(shù)吧.... 問題一 如果我們的網(wǎng)站需要提供一個(gè)天氣預(yù)報(bào)這樣一個(gè)需求...
摘要:中的模塊在中有模塊的概念,類似于語言中的頭文件,都是函數(shù)庫(kù)。靈活運(yùn)用模塊可以非常便捷的操作后端操作前端。最好在運(yùn)行文件的同個(gè)文件夾下下載方便使用,也可以在上級(jí)文件夾下載全局調(diào)用。他可以為文檔增刪改查。 nodeJS中的模塊 在nodeJS中有模塊的概念,類似于C語言中的頭文件,都是函數(shù)庫(kù)。靈活運(yùn)用模塊可以非常便捷的操作后端操作前端。而在nodeJS中引入模塊要使用require();這...
摘要:抓包中華萬年歷得到天氣接口首先,我說一說我遇到這個(gè)需求的場(chǎng)景。甲方要求可以按照登陸地顯示當(dāng)?shù)靥鞖?。首先,介紹一下中國(guó)天氣網(wǎng)的以及規(guī)范。固定通過城市名字獲得天氣數(shù)據(jù),數(shù)據(jù)。這個(gè)功能就是簡(jiǎn)單的利用從中華萬年歷的接口拿到數(shù)據(jù)。 抓包中華萬年歷得到天氣接口 首先,我說一說我遇到這個(gè)需求的場(chǎng)景。我正在維護(hù)一個(gè)關(guān)于地方政府的政務(wù)后臺(tái)系統(tǒng)。甲方要求可以按照登陸地顯示當(dāng)?shù)靥鞖?。我分析了一下,這種功能應(yīng)...
閱讀 1351·2023-04-25 23:47
閱讀 929·2021-11-23 09:51
閱讀 4480·2021-09-26 10:17
閱讀 3729·2021-09-10 11:19
閱讀 3268·2021-09-06 15:10
閱讀 3556·2019-08-30 12:49
閱讀 2436·2019-08-29 13:20
閱讀 1743·2019-08-28 18:14