在日常工作中,经常会碰到一些问题,比如数字金额要写成千分位形式(1234 -> 123,4.00)、要写成汉字大写形式(123 -> 壹佰贰拾叁圆),又比如要进行 cookie 读写操作,这些问题都比较常见,但是好多常用的工具库都没有,只能去网上找 snippets,感觉很不爽啊。所以我就诞生了一个想法,写一个自己的开源工具库!

说到做到,一两周时间我把基本结构搭起来了,并且放在了 GitHub,现在还只实现了部分功能,还有很多的功能要实现。一个人的力量总是有限的,所以我想在掘金吸引一波关注,希望大家能够加入到这个项目的开发维护中来,或者帮我提供更多的建议和想法。

我为什么要写这个项目?

首先我先讲讲我为什么要写这个项目。

  • 可能很多人都不屑一顾,因为很多功能都已经有人实现了,而且实现的更好,有些功能的实现也很简单;但是别人实现了是别人的事情,我认为我也要自己试一试,可能看起来很简单的功能你实现的时候才发现并不简单。又或者你在实现某个简单的功能当中能够学习到新的知识。
  • 我之前研究过一段时间 Underscore 的代码,也写了几篇笔记,我自认为还是在这个过程中学习到了很多东西的。但是学到了东西还不够,因为还没有真正实践过,尤其是对于 Underscore 的代码架构的学习,需要好好实践一下才能深有感触,所以这次新做的这个项目的架构也是采用的 Underscore 的那一套。实际上那套架构也是许多 JavaScript 工具库常用的架构。
  • 对于一些基础功能的实现,有利于我们掌握基础知识,这是最重要的一点!JavaScript 真的有很多需要学习的地方,我们每天用着各种框架或者工具库工作——Vue、React、jQuery、Underscore、fetch、axios……等等等等。这些框架或工具库确实大大简化了我们的工作,提高了我们的效率,但是你真的学到了很多底层的知识吗?写到最后可能我们就是一个框架使用工,熟练操作 Vue、React……问题是这些能力很多人都会,甚至比你更加熟练,那面试的时候你拿什么做到脱颖而出呢?我觉得这是我们都应该思考的问题,我们不仅要会使用框架,还要会一些使用原生代码搭建框架或工具库的本领。这也是为什么越是大公司越重视你对基础知识的掌握程度,因为很多大公司并不会直接使用别人的框架,他们会自己搭建框架(Seajs、Avalon、Omi……)、自己搭建组件库(Ant-Design、ElementUI……)、自己搭建脚手架(dva)以及自己搭建工具库(umi……)等等,就算不是自己重写,也会在别人的基础上做很大程度的修改、封装。这就很考验开发的基础功力了。所以……我觉得自己要写这个项目,这个项目不是一个一蹴而就的项目,会经历很长的时间,在这段时间里,我可以学习其他知识,然后继续完善这个项目。这样就可以做到既学习了新鲜的技术,也巩固了基础知识。
  • 写这个项目能够让我学到新知识,比如用 rollup 打包库代码、用 eslint 检测代码语法及风格、用 mocha 做单元测试、用 travis 做持续集成……等等等等,我能够学到很多东西。最重要的是我觉得我能够在写代码的过程中学习到许多兼容性问题。对于有些知识,我们需要集中精力一举攻破,比如 Webpack 的使用;但是对于有些知识我们必须文火慢炖,就比如代码的兼容性问题。这种问题只能在自己写代码的过程中慢慢去学习,慢慢去积累,通过不断地查阅 MDN 文档,我们就可以了解到哪些 API 兼容性如何。这个问题实际上也是面试的时候喜欢问的一个问题。

那么加入这个项目对你有什么好处呢?

为什么加入这个项目

首先看了上面我写这个项目的理由,我相信很多人也会有同样的感受,写这个项目是有利于提高自身水平的。

另外在你面试的时候,对于开源项目的贡献是能够给你大大加分的。然而很多大型的项目架构复杂、源码晦涩难懂,而且随着框架的成熟,需要增加的新功能和需要修改的 bug 实际上是很少的,这就大大减少了你对它们做出贡献的可能。

但是现在 Jerry 是一个刚刚起步的项目,功能简单,代码架构清晰,只需要你来实现你就可以对这个项目做出贡献了。

如何加入项目

首先你可以参考一下这个指导文件,里面用中文写的很清楚了。

大致的提交步骤如下:

  • 需求列表下找到心仪的、你有把握实现的且未实现的新功能,当然也可以是去找 bug。

  • fork 项目 repo

  • 然后创建一个新的分支(分支命名最好参考一下指导文件),把你的项目拷贝到你的本地:

    $ git clone ...
  • 然后切换到你的新分支,开始写代码。写代码时需要注意:

    • (1)注意尽量使用兼容性较好的原生 API,至少确保是 babel 会转译的 API。
    • (2)代码风格请参考已有代码,运行 npm run eslint 可以检测代码风格及语法错误。
    • (3)写完功能代码请自行添加测试用例到对应文件下,比如 src/packages/String.js 模块下的新功能对应的测试案例位于 test/String.test.js,然后运行 npm run test 可以进行单元测试,测试案例全部通过之后才可进入下一步。
    • (4)本地构建代码,运行 npm run build,确保你的代码能被打包压缩。
    • (5)新增模块时,请在 src/packages 下新增对应文件,然后在 test 下新增对应测试文件,最后不要忘了在 src/index.js 中引入对应模块,否则新模块的函数不会被暴露出来。
  • 写完代码并且通过风格测试、单元测试、构建测试之后,就可以提交到你的远程仓库了,然后可以提起 Pull Request,在提交 PR 的时候记得描述清楚你本次所完成的工作。我会在 review 之后合并分支。

注意实现完功能之后,不用提交 npm,这一步由我来做,文档的话可以不写,到时候我会写上去的。

我有新想法

现在在 issues 下面有一个 issue 专门用于计划 API 的,你可以在下方直接回复,说出你想要实现的新功能。

另外你也可以直接新增 issue,说出你的想法。

如果是 bug 提单的话,请直接提交 issue。

我什么都不会

什么都不会也没关系的,你可以点进去我们的 repo,然后轻轻地点一个 star,现在不会以后就会了,欢迎你在任何时候对我的项目做出贡献!

我的开源项目——Jerry的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  3. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  4. iOS开源项目周报0105

    由OpenDigg 出品的iOS开源项目周报第四期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. He ...

  5. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

  6. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  7. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  8. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  9. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

随机推荐

  1. unity 判断平台(安卓,iOS还是编辑器)

    两种方式 --------------- C预处理器编译判断 --------------- #if UNITY_IOS // ... iOS项目才会编译 #elif UNITY_ANDROID // ...

  2. [日常] nginx反代websocket

    去年的事 , 随便记记 ============================================================= 2017年11月6日 记录: 获取包的选择状态: d ...

  3. Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决

    下面代码: public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("msg& ...

  4. pch文件配置

    配置.pch文件 刚上手 Xcode6 的人,总会发现之前在 6 之前常常会在“利用名-Prefix.pch”这个文件中来配置我们全局要用到的头文件,但是 xcode6 没有了,人家说,这类东西有时候 ...

  5. Myeclipse默认编码设置

    Myeclipse默认编码设置 由于编码问题的出现,我们就必须明确自己在Myeclipse所写的各种文件是按照什么格式来进行编码的.所以只有知己知彼,才能bug少出. 对于刚接触MyEclipse的不 ...

  6. Python rest-framework 中类的继承关系(as_view)

    一. 背景 最近几天一直在学习restful framework的源代码,用户请求的流程,在路由系统这块遇到一个疑问,关于类的继承关系,当请求进来到路由这块,执行as_view()方法的时候,为什么会 ...

  7. [AMPPZ2014]Petrol

    关键点的最小生成树? 关键点初始化为0,跑多源最短路,然后重构整个图,用Kruskal跑最小生成树 然后跑树链剖分在线回答询问 对树上每个点维护到链顶的最大值,结合线段树可以做到\(\Theta(n ...

  8. 纯web实现游记类手机端应用

    初衷 当初的一个学习框架项目,采用sui框架实现的一套手机端页面.今天清理github的时候重新整理了一下,因为设计的确实不错嘛,拿出来大家一起学习...哈哈 说明 采用sui框架 纯html/css ...

  9. 配置ftp服务器只能上传不能进行其他操作

    又到期末考试了,今年当了数据挖掘助教,课程有一道编程大作业,需要搭建ftp服务器,实现文件上传,但是禁止下载重命名.服务器系统是ubuntu12.04 server,使用的ftp服务器也是linux下 ...

  10. redis 持久化策略、aof配置、测试、手动持久化、aof文件体积优化

    redis持久化策略 1.数据文件.rdb 2.更新日志.aof 设置aof 1.命令方式config set appendonly noconfig rewrite2.配置文件方式 redis持久化 ...