摘要:新建項目使用快速生成一個來創建一個新的項目封裝腳本新建一個包含我們的腳本說明這是一個可執行的應用在中新建字段,用于存放一個可執行文件接著執行把這個字段復制到的全局模塊安裝文件夾內,并創建符號鏈接,軟鏈接,也就是將的路徑加入環境變量中去運行
新建項目
使用 npm init 快速生成一個 package.json 來創建一個新的 npm 項目:
{ "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": "xizhouh@gmail.com", "license": "MIT" }封裝腳本
新建一個 index.js 包含我們的腳本
#!/usr/bin/env node // 說明這是一個可執行的應用 console.log("Happy everyday!")
在 package.json 中新建 bin 字段,用于存放一個可執行文件
"bin": { "happyday": "./index.js" }
接著執行 npm i -g && npm link 把 happyday 這個字段復制到 npm 的全局模塊安裝文件夾 node_modules 內,并創建符號鏈接(symbolic link,軟鏈接),也就是將 index.js 的路徑加入環境變量 PATH 中去
運行 happyday
可以看到我們已經成功打印出 Happy everyday!,現在我們可以開始開發 npm 包了
解析命令行參數安裝 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
現在讓我們寫一下 demo 測試一下:
#! /usr/bin/env node const program = require("commander") const chalk = require("chalk") program .command("weather") // 命令行指令 .alias("w") // 定義別名 .description(chalk.green("Get weather forecast ;)")) // 這行文字變綠~ // 注冊一個 `callback` 函數 .action(option => { console.log("biubiubiu~") }) // 生成幫助信息 .on("--help", () => { console.log(" Examples:") console.log("") console.log("$ happyday weather") console.log("$ happyday w") }) program.parse(process.argv) // 解析命令行
執行一下 happyday -h
Usage: happyday [options] [command] Options: -h, --help output usage information Commands: weather|w Get weather forecast ;)
這樣第一步就完成了,可以正式開發我們的 天氣預報 小玩具了
使用百度地圖 API 獲取天氣預報先在百度開發者中心注冊一個 KEY
因為懶... 所以我直接引入 axios 實行 GET 請求:
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.")) }) }) ...
先獲取用戶所在城市,再根據所在城市獲取用戶所在地的天氣預報
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.")) }) ...
獲取到數據之后,讓我們處理一下數據
`城市: ${chalk.green(resource.results[0].currentCity)} ??`
打印天氣預報
resource.results[0].weather_data.forEach(item => { console.log( `${item.date.slice(0, 2)}: ${chalk.green(item.weather)} | ${chalk.green(item.temperature)}` ) }, this)
這樣,我們的小玩具初步成型
然而... 百度地圖 API 只支持國內的天氣預報,所以像我們這些海外黨還是需要一些其他的手段
獲取海外城市天氣預報我選擇的是 Yahoo Weather API,因為很好奇他們家大名鼎鼎的 YQL ...
引入 lodash,inquirer, yql 這三個庫
先上代碼
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 這個庫
功能簡介:
input–輸入
validate–驗證
list–列表選項
confirm–提示
checkbox–復選框等等
YQL 可謂是有些驚人,它可以像 SQL 那樣設計,然后整合至 URL 上,確實有點奇葩
這樣,我們海外黨就也可以使用 happyday 了
發布 npm 包這個很簡單啦
一步一步來:
在 npm 官網上 注冊一個賬號
在 bash 中輸入 npm login 登錄
npm publish 一個回車鍵搞定(每次 publish 之前都需要改一下包的版本號,不然報錯)
就這樣我們就擁有了自己的第一個 npm 包
本文代碼均在 https://github.com/HuangXiZhou/happyday 歡迎各位 Star
使用 happyday:
npm i happyday -g && happday w 即可
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89423.html
摘要:項目開發準備描述項目技術選型接口接口文檔測試接口啟動項目開發使用腳手架創建項目開發環境運行生產環境打包運行管理項目創建遠程倉庫創建本地倉庫配置將本地倉庫推送到遠程倉庫在本地創建分支并推送到遠程如果本地有修改新的同事克隆倉庫如果遠程修 day01 1. 項目開發準備 1). 描述項目 2). 技術選型 3). API接口/接口文檔/測試接口 2. 啟動項目開發 1). 使用react...
摘要:它使用方式,接收和響應外部系統的某種請求。回顧我們在學習基礎網絡編程章節已經知道了這么一個連接了。使用指定名稱的命名空間。名詞簡單對象訪問協議作為一個基于語言的協議用于有網上傳輸數據。以的根元素出現。代理這么一個概念就更加清晰了。 WebService介紹 首先我們來談一下為什么需要學習webService這樣的一個技術吧.... 問題一 如果我們的網站需要提供一個天氣預報這樣一個需求...
摘要:中的模塊在中有模塊的概念,類似于語言中的頭文件,都是函數庫。靈活運用模塊可以非常便捷的操作后端操作前端。最好在運行文件的同個文件夾下下載方便使用,也可以在上級文件夾下載全局調用。他可以為文檔增刪改查。 nodeJS中的模塊 在nodeJS中有模塊的概念,類似于C語言中的頭文件,都是函數庫。靈活運用模塊可以非常便捷的操作后端操作前端。而在nodeJS中引入模塊要使用require();這...
摘要:抓包中華萬年歷得到天氣接口首先,我說一說我遇到這個需求的場景。甲方要求可以按照登陸地顯示當地天氣。首先,介紹一下中國天氣網的以及規范。固定通過城市名字獲得天氣數據,數據。這個功能就是簡單的利用從中華萬年歷的接口拿到數據。 抓包中華萬年歷得到天氣接口 首先,我說一說我遇到這個需求的場景。我正在維護一個關于地方政府的政務后臺系統。甲方要求可以按照登陸地顯示當地天氣。我分析了一下,這種功能應...
閱讀 1346·2023-04-25 23:47
閱讀 924·2021-11-23 09:51
閱讀 4469·2021-09-26 10:17
閱讀 3719·2021-09-10 11:19
閱讀 3265·2021-09-06 15:10
閱讀 3554·2019-08-30 12:49
閱讀 2428·2019-08-29 13:20
閱讀 1738·2019-08-28 18:14