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、轮子爱好者。