你的Project Starter在哪里?
今早看到一个github repo,hackathon starter。它是一个nodejs
的project starter,帮助你快速建立项目原型。
![](http://image.baizhud.com/images/mytent/2022-05-06/1651808886c16PP51x808886.jpeg)
它提供了如下功能:
- Local Authentication using Email and Password
- OAuth 1.0a Authentication via Twitter
- OAuth 2.0 Authentication via Facebook, Google or GitHub
- Awesome flash notifications with animations by animate.css
- MVC Project Structure
- Node.js clusters support
- Rails 3.1-style asset pipeline (See FAQ)
- LESS stylesheets (auto-compiled via Express middleware)
- Bootstrap 3 + Flat UI + iOS7 Theme
- Contact Form (powered by Mailgun or Sendgrid)
- Account Management
- Gravatar
- Profile Details
- Change Password
- Link multiple OAuth strategies to one account
- Delete Account
- Forgot Password
- API Examples: Facebook, Foursquare, Last.fm, Tumblr, Twitter, PayPal, and more.
这些都是当你要做一个项目的时候都必不可少,却又和项目的business logic没有太多关系的功能。所以,使用它能帮你省下很多时间。
然而,本文的目的并不在于鼓吹nodejs
的开发者使用这个repo作为你的project starter,因为我自己也是刚刚接触它,尚未真正了解它的能力 —— 尽管它有5300多个star为其背书,但将一个自己未使用过项目就此撰文力推给大家使用,并不是我的作风。
我的建议是:每个开发者需要有自己的project starter。
如果你翻看我的github repo,从去年起,我的所有django project都似乎从一个模子里出来的:它们有相同的layout,相同的css template,甚至还有一致的makefile
和deploy configuration。没错,我使用的是我个人的project starter,这样,我的每一个新的django项目都能快速进入到核心的产品功能开发中。
Project starter可以来源于你自己的某个项目,也可以是github上某个repo的clone,就像本文中提到的hackathon starter。它出自何处并不重要,重要的是你对其代码融会贯通,烂熟于胸 —— 这就是为何我不太推荐拿来主义的原因,大部分即拿即用的项目,我们未必能,或者,会,去研究它的全部。即使要拿,也要努力将其搞懂,删减不需要的功能,使其成为你自己的独立发展的project starter。
Project starter需要与时俱进。如果说你的项目是流水线上的一个个产品,那么,project starter本身就是流水线。你需要定期清理污垢,注入润滑油,让它保持在最佳状态。其实我没有一个专门的project starter,但如果可能的话,每一个新项目都以最近完成的某个项目为project starter。最近完成的项目往往涵盖了最新的技巧与best practice。
用不用专门的project starter,就像OOP中class based OOP与prototype based OOP之争,各有优缺点,使用上因人而异,自己用着顺手就好。
最后,不要勉强使用project starter。屠龙宝刀不是万能的,必要时,你也需要唐门暗器。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
- YII框架实现自定义第三方扩展操作示例
- 在Tensorflow中实现leakyRelu操作详解(高效)
- Django def clean()函数对表单中的数据进行验证操作
- Python3爬虫中Splash的知识总结
- Laravel框架自定义公共函数的引入操作示例
- PHP PDOStatement::setFetchMode讲解
- Python QTimer实现多线程及QSS应用过程解析
- PHP count()函数讲解
- Laravel中9个不经常用的小技巧汇总
- PHP simplexml_load_string()函数实例讲解
- php文件操作之文件写入字符串、数组的方法分析
- php xhprof使用实例详解
- PHP获取远程http或ftp文件的md5值的方法
- PHP addslashes()函数讲解