Notadd —— 基于 Laravel 构建新的 PHPer 生态

前言

PHP 是一门简单实用的语言,有梗曰:“PHP 是世界上最好的语言!”。
PHP 简单,好上手,正因为门槛低,也拉低了行业对 PHPer 的看法。 随着发展,项目越来越需要像 Laravel 框架这样 可持续维护。不论是 MVC ,API,还是SPA单页面应用,都在预示着技术在不断迭代,Laravel 更是这种迭代的趋势。
我们希望有一个东西,能够将这些技术融合起来,树立起一个新的标杆,同时又希望能有一个应用商店,让PHPer 的努力得到回报的同时也减少其他人的工作量。

技术选型

技术选型是一个纠结而痛苦的事情,需要同时考虑 应用场景、上手难度、社区活跃度、稳定性 等等,比如我们最早的方案是 Laravel + Angular1 ,后来随着Angular2 的发布,又换成 Angular2 ,最终才确定使用 Vue2。 仅后台就重构了三个版本。
相关技术
后端:

  • PHP7
  • Laravel
  • composer

前端:

  • NodeJS
  • NPM
  • ES6
  • iView2
  • Html 5 API

模块化

一个程序不可能满足所有人的需求,我们将Notadd 的插件类型分为 模块、插件、模板、拓展,开发者可以像搭积木一样构建网站,只需要开发少量插件就能完成自己想要做的。

模块
大功能,Notadd 由各个大模块组成。 比如一个商城 需要 商城模块+用户模块,如果需要发布文章,再安装用户模块,如果需要微信,还可以安装微信模块。
插件
全局或者大模块的功能增强,比如支付插件,比如认证插件。
模板
前端样式,不做过多说明。
拓展
拓展是Notadd 里比较特殊的功能增强,它需要依赖于特定环境或者实现特定需求。比如workerman 拓展,redis 拓展。

改进与优化

Neditor
中文的富文本编辑器,要么不好用,要么界面丑。
Neditor 是我们团队基于 Ueditor 的一款富文本编辑器。
不论从功能还是从其它各方面来讲, Ueditor 都是一款无以替代的编辑器产品。
我们重新绘制了所有图标,并且将图标改为矢量图SVG格式:

实现了这样的效果:

image

Demo: https://neditor.notadd.com/demo/

项目地址:https://git.oschina.net/notadd/neditor

Neditor 是 Notadd 默认的富文本编辑器,之后我们还将发布基于Markdown的简单文本编辑器。

前端模块化加载

目的:实现可插拔的插件机制。
由于在webpack的传统模式下是将所有模块都打包到同一文件或者同一系列文件,也就是说它所有模块必须做关联打包,进而无法实现可插拔的注入,也就无法实现插件的开启和关闭。

因此我们的实现方式是:

  1. 将模块功能以umd模块的方式用webpack打包出来。
  2. umd模块单文件用script加载到浏览器后。
  3. 接着会在window对象上附加一个自身的对象。
    这样就可以在任意地方获取到这个对象,然后进行模块或功能注入。
    Notadd相关代码参考:
    https://github.com/notadd/administration/t...

开发环境下前端实时编译
利用webpack watch 实现的前端实时编译。

后端组件化加载

  1. 模块或插件必须是符合composer规范的包,
  2. composer.json需包含psr-4规范的目录映射,
  3. 注入模块自动检索modules或extensions目录,获取目录结构,生成对应的package对象,
  4. 针对每个package,检索vendor目录是否存在,存在则require文件autoload.php,实现类的自动加载,
  5. 针对每个package,检索src目录是否存在Extension或ModuleServiceProvider类,有则将该类加载到Container中,并自动注册。

生态

Notadd 真正希望构建的是开发者的生态。
技术生态
能将新技术应用到Notadd中,从而带向生产环境。

应用商店
让开发者不仅能够简化开发,还能通过应用商店收益。

更多领域
不仅仅局限于web领域,通过websocket、TCP、MQTT协议的拓展,Notadd 还将运用于智能家居平台、嵌入式等其他领域。

Notadd 项目地址 https://github.com/notadd/notadd 【欢迎star】

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 14
DukeAnn

不错的,加油

6年前 评论
zoroo

不错:+1:

6年前 评论

前台spa后,SEO怎么办呢?用node服务端渲染?我觉得还不如直接php拼页面。。。

6年前 评论

@Boomdawn 默认方式: 路由全部交由后端,后端渲染出头部,然后前端JS渲染页面。 搜索引擎可以读出头部。

也可以把前端全部放在CDN上,后端只提供API和搜索引擎页面。

PHP拼页面的效率太低,而且体验不好

6年前 评论

@依剑听雨 这样的话文章内容度娘还是抓不到。。。 php开了opcache,拼页面的消耗也就第一次访问的时候有,后面都是拿缓存了,非常快。想要提高体验折中的办法就是pjax,也不刷新页面。

6年前 评论

@Boomdawn 可以抓取到的,搜索引擎只是不能使用JS,但正常页面内容还是可以抓取到的。

6年前 评论

@Boomdawn SEO优化,两种方式:
1、针对搜索引擎爬虫由输出特殊的页面渲染结果;
2、后端针对每个路由输出统一的前端资源代码(即相同的html结构)+不同的SEO数据

6年前 评论

@Boomdawn API输出要比 传统后端渲染方式 高大约3倍以上的性能。
如果将前端页面放在CDN上,加载速度就更不能比了。 已经接近纯静态HTML了

6年前 评论

@Boomdawn 网上方案挺多的 noScript、双页面、Pjax 以及各种插件~~
Notadd 默认是后端先渲染出来简单页(包括了文章内容),然后前端渲染的时候,会把这部分内容再隐藏掉。
所以搜索引擎看到的是首先渲染出来的内容,用户看到的单页应用。对SEO影响不大~

6年前 评论

@依剑听雨 我就是看到这么多解决方案就苦恼,本来好好的php拼页面就都完事了,把页面拿到前端去拼又生出来这么多问题。反正现在侧重的是移动端,移动端和web后台话,spa什么的随便玩。我就是提个建议,可能pc前台直接按原来简单的来,会省不少事情。

6年前 评论

@Boomdawn 在很多人看来,Laravel是个很麻烦的框架,composer 更是麻烦~~
SPA也是这样的状态,当你用typescript 、Vue2、less 、sass 这些之后,你就再也不想用以前的方式开发了。
并且,用户体验也要比原先的好太多~

6年前 评论

编辑器后期还会再做一次修复~~

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!