一个外行如何快速融入node项目

brownbutterfly 发布于1年前 阅读12353次
0 条评论

一个外行如何快速融入node项目

nodejs

去年上半年开始接触了一些JS的后端编程,参与了一个基于node(其实是Meteor)的开源项目,有一些知识上的积累,现在回归了Java老本行,怕再过段时间就忘了,在这里记录一下,好记性不如烂笔头,说不定以后会有用。node大神可以看来消遣,跟我一样是外行但是需要写一些node程序的可以看看经验。这篇文章里会包含以下内容:

  1. 背景
  2. 关于Wekan
  3. 关于Meteor
  4. 关于publication&subscription
  5. 关于Jade&Stylus
  6. 关于JS

背景

第一次知道nodejs是在12年实习时,那时只感觉写出来的代码好难看,觉得JS写服务端性能肯定也不咋滴。直到2016年之前,我对于JS的使用还仅限于在网页端偶尔用来做一些字段验证,甚至连JQuery都不怎么会用,老忘记各种selector的语法。

16年开始接触了一些nodejs的框架,忽然好像发现了个新天地,ES6的语法太美妙,nodejs的「单线程异步IO」的设计也可以最大限度地发挥CPU的性能。后来为了提高工作效率,开始在公司推敏捷,于是找到了一个开源的KANBAN(关于KANBAN可以看 这里 )工具 Wekan ,使用一段时间后发现少了两个很重要的feature:

  1. Wekan设计的理念是像Trello那样的一个开放的KANBAN平台,所以默认是开放注册的,但是有很多用户会像我这样把它部署在自己的私服上(像gitlab一样),所以希望有一个开关,可以控制不开放注册,而只能邀请注册。
  2. 在卡片中没有一个可以check的列表,让任务的管理者去更细粒度地控制这个任务。

于是去issue和PR里找,发现好多人都在等待着两个feature,于是想,等他们搞不如自己搞。于是开始了第一次真正的node项目的开发。之前做过一些基于Koa和Express的开发,和Meteor还是有很大的区别。

关于Wekan

一个外行如何快速融入node项目

项目首页

Wekan是一个开源的KANBAN(看板管理)工具,是一种较简单(相对于Scrum和XP)的敏捷开发的理念。KANBAN工具比较有名的有Trello等。Wekan和Trello十分相似,具体的可以去查阅Wekan项目的 Wiki 。Wekan的优势就是,对于不想在公共平台上部署自己的项目管理工具的公司,以MIT协议开源的Wekan是一个很好的选择,如果你也有这方面的需求,不妨试一试Wekan。

Wekan is an open-source kanban board which allows a card-based task and to-do management, similar to tools like  WorkFlowy or  Trello .

—- Wekan Wiki

从技术上讲,Wekan的后端整体和前端的渲染引擎是基于Meteor的,前端的模板和样式使用了Jade和Stylus,对于这三个东西都是比较陌生的,本文主要讲的就是如何快速地融入这种技术栈不熟悉的项目开发中去。

关于Meteor

首先就是去搜索了一下关于这个框架的文章,这样可以简单地建立起来对它的一个感性认识。找到了一些简单的介绍,和一个中文的社区,但是刚刚建立,资料也很少。于是果断开始阅读官方文档,所幸官方文档十分详细。

一个外行如何快速融入node项目

又一个JS框架

Meteor是一个基于nodejs的全栈开发框架,致力于使开发者快速、高效地构建高响应的富客户端Web应用。技术栈包括MongoDB、WebSocket、Blaze等。Meteor引入了客户端DB的概念,使得Meteor开发的应用,可以天然的达到前端的实时响应。

一个外行如何快速融入node项目

Meteor应用架构

从上图中可以看到,服务端通过publication把一部分数据发布到前端,前端通过subscription可以直接调用这些数据。对于前端来说,它只和前端数据库交互,基本上等于本地交互,所以响应很快,而前端数据库再通过和后端实时同步数据来达到和后端交互的目的。

像聊天应用这种实时性要求比较高的服务,可以直接从这种架构受益,用户几乎感受不到延迟,而且服务器上的数据更新也会实时同步到订阅它的客户端。

安装

根据官网的介绍,安装Meteor只需要在Console中执行 curl https://install.meteor.com/ | sh ,然而,由于网络原因,在中国直接这么做简直是折磨人,要等到花儿都谢了(除非你有一个强大的稳定的合法的VPN)。

我的做法是首先把网页 https://install.meteor.com/ 的内容保存到本地,下载其中 TARBALL_URL 的包,保存到 INSTALL_TMPDIR 中的目录,然后注释掉文件中的下载命令( echo "Downloading Meteor distribution" 这一行的后面的一坨),然后执行文件。

Meteor目录结构

Meteor也遵循「convention over configuration」,它有默认的一套目录结构,遵循这套规则可以极大地提高开发效率。Meteor项目的文件载入顺序如下:

  1. HTML模板文件总是比其他文件先被载入
  2. 以main为名字的文件总是最后被载入
  3. lib目录下的文件随后被载入
  4. 更深目录中的文件随后被载入
  5. 其他文件按照字符顺序被载入

还有一些特殊目录:

  1. imports
    这个文件夹中的文件不会被载入,除非使用 import 语句映入到其他文件。
  2. client
    这个文件中的文件不会被服务端的程序载入,相当于在程序中使用 if (Meteor.isClient) { ... } 来执行代码。在production环境这个文件夹下的相关文件会被压缩。
  3. server
    与client相对应,这里的代码不会被客户端程序载入。相当于在 if (Meteor.isServer) { ... } 中执行。
  4. public
    项目顶级目录下public文件夹内的文件可以被任何人引用。

再看Wekan的目录结构如下,项目的代码结构和相互间的关系就很清晰了:

lkMacBook-Pro:wekan-setting lk$ tree -dL 2
.
├── client
│   ├── components
│   ├── config
│   └── lib
├── config
├── i18n
├── meta
│   ├── icons
│   ├── screenshots
│   └── t9n-changelog
├── models
├── node_modules
│   ├── fibers
│   ├── node-gyp
│   └── xss
├── public
│   └── fonts
└── server
    ├── lib
    ├── notifications
    └── publications

21 directories

通过读文档和读代码,基本上对于现有项目的结构有了个初步认识,看到各个目录和文件,大致知道其代表的意义,那么接下来就是写代码了。对于这种已经有了大量代码基础的项目,有个优势就是「有很多可以参考的代码」,可以帮助刚接触的人更容易写出更好的代码。

关于publication&subscription

开篇时谈到的两个需求,第一个是先想到的,所以刚开始是拿这个来实验的。分析这个需求,大约有以下几个点:

  1. 要有限制注册的功能
    用户注册时,必须输入邀请码,否则无法注册。
  2. 要有一个默认的管理员

    系统部署好之后,系统是可以任意注册的,这时需要管理员去注册一个账号,然后这个账号自然地成为管理员,然后他可%B

    原创文章,转载请注明:转载自KK笔记

    本文链接地址: 一个外行如何快速融入node项目

    转载须以超链接形式标明文章原始出处和作者信息及版权声明

查看原文: 一个外行如何快速融入node项目

需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。