Javascript 那麼流行,做爲一個前端開發者,或者前端入門者,發佈一個正式可用的 Javascript 模塊,對於本身來講應該成長很大。下面就以一個簡單的 Javascript 模塊 filesize.js 來介紹 github、travis-ci、npm 這些內容的組合使用。前端
本文將使用 filesize.js 這個做爲介紹,這個是一個很是簡單的 js 庫,總共代碼也不到 20 行,可是功能完善,能夠生產使用。事實上 npm 上有很多簡單到幾行代碼搞定的模塊。node
咱們 filesize.js 達到的效果就是這樣的:react
而且能夠直接 npm install filesize.js
安裝下載。下面分別介紹說明。git
首先在 Github 上建立項目,注意想好項目的名字,名字最好可以和以後 npm 發佈的模塊名字相同(npm 模塊名字不能和其餘人已經發布的名字重複)。後面關於 Github 若是提交代碼這些請自行找其餘文章學習。github
須要強調的是:chrome
注意完善的 README.md 文檔,能夠文檔先行,這樣能夠在寫代碼以前想好你這個模塊的 API 方法等。npm
能夠嘗試先寫 testcase(測試先行),固然不強制,提早寫 case,沒法運行測試其實也挺耗時的。json
注意整理代碼結構,對於 js 模塊代碼,通常是:瀏覽器
對於一個 js 模塊,都有 package.json 文件,這個是一個嚴格要求的 json 格式,任何不符合要求的都會在執行 npm 命令的時候報錯。好比 filesize.js 的該文件內容以下:app
這其中比較重要的就是 name/officialName
、keywords
、devDependencies
、dependencies
、scripts
、main
、version
;
npm run lint
,npm run test
,npm run build
:分別是代碼檢查,執行測試用例,build 壓縮庫除了這些配置,package.json 還有其餘的更多配置,你們能夠去搜索學習一下,通常有了這些配置項,就夠了,就能夠進行 npm publish
來發布模塊。
可是,咱們發佈以前,須要作一些持續集成和單元測試,用來保證代碼的正確性,穩定性。這個就是使用到 travis-ci 了。
持續集成是什麼?簡單來講就是儘快,儘量早的進行代碼的正確性驗證(也就是測試),那麼咱們每次在 github push代碼的時候就運行一下測試用例,這個是否是很快,很早,也就是持續集成,對於一些簡單的 js 模塊,咱們作一些簡單的單元測試就夠夠的了。
在 github 建立項目以後,能夠打開 https://travis-ci.org/,並使用 Github 受權登錄,而後本身的 Account 菜單中勾上須要接入 travis-ci 的項目,以下圖所示:
若是看不到新建立的項目,能夠右上角刷新一下。開啓以後,travis-ci 會 hook 住你 git push 命令,而後根據你項目中的 .travis.yml 配置文件來執行 npm test
(npm run test 的簡寫)進行測試,並捕獲檢測結果來判斷 測試用例 執行成功與否。例如 filesize.js的 .travis.yml
配置以下所示:
表示執行在 nodejs 環境,兩個不一樣的大版本分別執行如下,通常選擇 4.x 版本便可。那麼每次 push 代碼以後,都會進行自動觸發 ci 任務,以下圖所示:
而後你就能夠把這個小綠色圖表放到你的 README.md 文件中了。
項目建立了,package.json 配置好了,代碼寫完了,文檔完善了,ci 執行沒有錯誤了,那麼就能夠發佈出去了。怎麼發佈,很是簡單,若是你沒有 https://www.npmjs.com/ 的帳號,註冊一個就行了,和通常的網站註冊並無什麼區別。
有了帳號以後,在項目代碼根目錄,執行:
npm publish
控制檯會要求你輸入 npmjs 網站的郵箱和密碼,輸入便可,而後等着出現 發佈成功便可,通常出現:filesize.js@1.0.1
這樣格式的字符串便可,而後去 npmjs 網站刷一下試試看。
若是你作了一個很好用的有創意的模塊,能夠給你的模塊作一個簡單炫酷的主頁來顯示用法和 API 接口吧。本文中做爲示例的項目 filesize.js 是一個超級大輪子,就是爲了寫這篇文章而作了,固然也能夠用戶開發生成環境。
最後安利一下,個人 Github 主頁:https://github.com/hustcc,ID是 hustcc
,由於我是一個huster,正好以前註冊了hust.cc域名,因此有了這個 github id 。
有哪些輪子:
*** time ago
statement. eg: '3 hours ago'. No dependency & localization & tiny.我是一個後臺開發者,最近在入門前段開發,深度Github、輪子愛好者。