node package manager

scorequery

scorequery

项目地址

https://github.com/micooz/scorequery

演示地址

PHP实现的老版本 https://apporz.com/scores

简介

此项目为成都理工大学成绩查询系统,主要功能如下:

  • 即时成绩列表(学期,课程名,学分,成绩,成绩类型,课程绩点)
  • 当前学期标示
  • 平均学分绩点计算
  • 不及格科目,低绩点科目标示(刷分建议)

想说几句

在介绍后面技术性的东西之前,我觉得有必要谈谈关于这个项目的几个问题:

  • 历史
  • 开源的原因

历史

当微信开始在国内高校日渐流行的时候,这个项目就开始萌芽了。各学院、各社团都在搞新媒体,可谓轰轰烈烈。当时刚退出学生会,但还一直为学院提供技术支持。学院需要在微信上建立公众号,当初商业的或者半免费的公众平台搭建服务还不成熟,还只能用微信的 SDK 从底层开始搭,对于大多数对软件技术,特别是计算机网络,通信协议几乎不了解的同学们来说无疑是难以逾越的障碍。能掌握微信平台搭建技术的老鸟也不一定会分享自己的宝贵经验。

不管怎样,有能力扛下学院重担的我建立了当时第一个可以算是 "自主研发" 微信公众平台。而在众多简陋的功能当中,成绩查询系统,也就是这个项目的雏形,可谓是当时的特色功能之一。当时整个公众平台采用 PHP 作为开发语言,而成绩查询系统并非以网页形式给出,而是集成在微信内的。

微信公众平台上线不久后,一些带有商业性质的 "免费" 在线一键微信平台搭建服务如雨后春笋般出现,自己搭建的微信公众平台面临稳定性差,难以维护的巨大困难,很快就被这些新新的商业项目取代了。然而成绩查询系统是不能被取代的,一直存在且生生不息。

这个闭源项目经历了几次重大的蜕变:

  • 从微信中独立,采用网页外链的形式展现,并使用了 ThinkPHP
  • 数据库支持
  • AngularJS 重写了前端, Laravel 重写了后端
  • ReactJS 重写了前端

每当自己回顾这个我一手经营的小项目的时候,我都会感叹时代在发展,技术在进步。

开源的原因

实际上学校第三方的成绩查询系统就我了解到的已有不少,实现起来也并不复杂,但并非人人都能开放源代码。本项目使用最宽泛的 MIT 开源协议,旨在帮助同学们学习先进的 Web 开发技术。

说实话国内的IT环境让我感到很失望,是功利的,是金钱至上的,是一味索取的,很少有人愿意把自己的技术贡献出来分享给大家。封闭的互联网环境更是雪上加霜。这种环境是不利于这个行业发展和进步的。我认为我是一个乐于奉献的人,我愿意把我所学到的知识技术分享出来,即便得不到任何利益。

开源不仅仅是毫无保留地开放源代码,更是一种传承。我希望有同学能继续维护这个项目,我希望在未来看到这个项目仍然欣欣向荣。

技术栈

  • 项目采用流行的 NodeJS 重写,使用内建 http 模块提供 http 服务,无 express 依赖。
  • javascript语言标准采用ES6,利用 babel 转换。
  • 前端 AmazeUI HTML5跨屏框架,后端 ReactJS 视图渲染。
  • 基于 Docker 容器虚拟化技术的快速部署策略。

安装和部署

目录及文件结构

目录 描述
src/ 源代码
src/controllers/ 控制器
src/views/ 视图
src/dispatcher.js 路由
src/index.js 应用入口
public/ 静态文件目录
public/amazeui/ AmazeUI库
Dockerfile Docker镜像构建文件
init.sh Docker容器启动脚本
package.json npm包管理器配置文件
jsconfig.json Visual Studio Code 配置文件

部署

NOTE: 下面的配置环境均在 *unix 下完成,不保证 Windows 上的兼容性。

首先下载项目:

$ git clone https://github.com/micooz/scorequery

有两种方法,推荐使用 Docker 部署:

Docker自动部署

Docker的安装见: http://docs.docker.com/linux/step_one/

构建镜像:

$ cd scorequery && sudo docker build --tag=micooz/scorequery .

启动应用:

$ sudo docker run --name=www -d -p 80:80 micooz/scorequery

手动部署

安装NodeJS,下面以 Ubuntu 操作系统为例,参考:https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

$ sudo curl --silent --location https://deb.nodesource.com/setup_0.12 | bash -
$ sudo apt-get install nodejs

修改 NPM 的源,加速下载:

$ npm config set registry http://registry.cnpmjs.org

安装依赖:

$ cd scorequery && npm install

编译代码:

$ ./node_modules/.bin/babel src -d lib --experimental

启动应用:

$ sudo npm start

开发帮助

假定你具有基本的 javascript 编码能力以及能够熟练使用 Git 版本控制:

  • 学习 NodeJS 请到:https://nodejs.org/
  • 学习 ReactJS 请到:http://facebook.github.io/react/
  • 学习 AmazeUI 请到:http://amazeui.org
  • ES6的新特性见:http://www.cnblogs.com/Wayou/p/es6_new_features.html

开源协议

MIT

提出建议/贡献代码

通过Github的 IssuePullRequest 系统可以很方便地提出你的建议和贡献你的代码:

Issues:https://github.com/micooz/scorequery/issues

PullRequest:https://github.com/micooz/scorequery/pulls

作者

Micooz: micooz@hotmail.com