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格式:
实现了这样的效果:
Demo: https://neditor.notadd.com/demo/
项目地址:https://git.oschina.net/notadd/neditor
Neditor 是 Notadd 默认的富文本编辑器,之后我们还将发布基于Markdown的简单文本编辑器。
前端模块化加载
目的:实现可插拔的插件机制。
由于在webpack的传统模式下是将所有模块都打包到同一文件或者同一系列文件,也就是说它所有模块必须做关联打包,进而无法实现可插拔的注入,也就无法实现插件的开启和关闭。
因此我们的实现方式是:
- 将模块功能以umd模块的方式用webpack打包出来。
- umd模块单文件用script加载到浏览器后。
- 接着会在window对象上附加一个自身的对象。
这样就可以在任意地方获取到这个对象,然后进行模块或功能注入。
Notadd相关代码参考:
https://github.com/notadd/administration/t...
开发环境下前端实时编译
利用webpack watch 实现的前端实时编译。
后端组件化加载
- 模块或插件必须是符合composer规范的包,
- composer.json需包含psr-4规范的目录映射,
- 注入模块自动检索modules或extensions目录,获取目录结构,生成对应的package对象,
- 针对每个package,检索vendor目录是否存在,存在则require文件autoload.php,实现类的自动加载,
- 针对每个package,检索src目录是否存在Extension或ModuleServiceProvider类,有则将该类加载到Container中,并自动注册。
生态
Notadd 真正希望构建的是开发者的生态。
技术生态
能将新技术应用到Notadd中,从而带向生产环境。
应用商店
让开发者不仅能够简化开发,还能通过应用商店收益。
更多领域
不仅仅局限于web领域,通过websocket、TCP、MQTT协议的拓展,Notadd 还将运用于智能家居平台、嵌入式等其他领域。
Notadd 项目地址 https://github.com/notadd/notadd 【欢迎star】
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: