`
开源社交系统
  • 浏览: 3111 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记

阅读更多

在上一篇文章《 ThinkSNS+基于Laravel master分支,从1到 0,再到0.1》,简单的介绍了 ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动。

Laravel Mix的放弃

在 Laravel 中,前端工作流默认是由 laravel-mix 包驱动的,集成了 Vue.js。而作为核心开发之一,也负责前端这块的开发。其实,这是seven第一次写 Vue,之前都是用 React 做开发。

然后seven和另一个核心成员 Wayne 在楼道抽烟聊前端这事情,要不要用 Vue,这个东西对于我们来说,都没有做过,我们都只会 React。然后突然Wayne司机来了一句“玩点没玩过的嘛”!就这样,我们决定前端使用 Vue。

跑题了,决定用什么前端框架后,起初是5.3版本的 Laravel 前端构建有 gulp 和 webpack 都在里面,然后在 gulpfile.js 里面配置编译 js,这就不爽了呀,之前用惯了 webpack 也用惯了自动导出 css。这家伙不能从js里面抽离css单独打包,样式,js都是单独编译的。如何能忍?但是还是忍了,因为 5.4 即将发布,因为前端不是 ThinkSNS+ 重点方向,过了很久,5.4 虽然还没正式发布,我们决定直接合并。发现 laravel-mix 也是这个样子。然后,然后,算了,删了 laravel-mix 吧,来自于开发 React 经验做构建的自信,我决定自己做前端构建。

webpack && Vue 构建的坑

好了,开始自己做构建了,为了保持js语法的统一性,我们一直都是使用 webpack.config.babel.js 文件名,使用 ES6 语法配置webpack,所以,首先依赖的包是 Babel 各个包。然后依赖进入了 Vue 包,哈哈成功了,可以转换 Vue 了。

高兴的太早了,是的,没有达到想要的效果。style 也没有办法导出为独立css。最后利用 vue-cli 生成了一个example,发现这个构建也是很多问题。原因嘛,主要是不适合用在 laravel 中。example 的意义在于适合大多数情况,而我们的需求就是少数情况,由此踏上了各种文档阅读之旅。

最后在 vue-cli 中找到了答案,按照 example 的配置,去掉不需要的多余依赖,在 配置中逐步依赖,最终完成(感谢尤大神提供了这么全的配置说明)。

mix-manifest.json

配置是完成了,强迫症不能忍什么?使用 laravel-mix 的时候是可以使用 Laravel 的 mix 函数的,自己做构建,没法玩了。后来阅读 laravel-mix 包的代码,也没有找到答案,然后拿着 mix-manifest.json 文件反复研究,突然茅塞顿开,不就是这么一个文件的事情么?我自己生成他不就完了?

解决方法有了,如何实现呢?起初在 webpack 配置中的实现如下:

利用 webpack-stats-plugin 这个包,自己实现 transform 并把 文件输出到输出目录。

这个东西一直用了接近两个月,直到后来,我们有个包 「plus-component-web」主要开发的是 h5 这个包就是利用 vue-cli 生成的,你想象一下配合laravel后,没有watch,没有hot,开发人员忍了一个月,每次修改完运行 yarn build 看样子,再修改。最后大功能开发完成后,调bug,调细节,简直要人崩溃好么。

作为为公司的“前端担当”用了一个上午的时间,删了 vue-cli 生成的构建套装,自己做了一套。问题出现了,我希望这个拓展包中,可以和 ThinkSNS+ 的后台开发一样,可以使用 mix 函数怎么办?

总不能在这个包里面也放上面的 函数+拓展生成 mix-manifest.json 文件吧?这也太不方便了点。于是决定,我要早轮子,最后在周末的时候,终于开发出了一个 webpack 插件 webpack-laravel-mix-manifest

核心代码如下:

插件的实现思路来自于 webpack-stats-plugin 这个包,非常感谢这个作者。

然后转换方法如下:

我知道,各位看官要吐槽了,这里为啥不用 reduce ?起初,初版真的是 reduce 实现的,代码看起来也很好。问题来了,vue的构建都是 node 4 起步,如果用 reduce, 至少 node 6 起步了。最后妥协了,为了保证 node 4 - 7 都能运行。用了 for in来生成。

如果你对比过这个 webpack 插件,你一定发现了,之前我在 webpack 配置文件中写的转换函数其实是有bug的,例如,我入口不是对象或者数组咋办?我输出的不是 name.hash 格式怎么办?都做不到。在 webpack 插件中,解决了这个问题,最终使用如下:

生成的 mix-manifest.json 如下:

Hot 热加载

用了 mix 辅助函数,怎么能不提 热加载呢?在 Laravel 里面热加载是很有意思的事情。阅读 laravel-mix 后问题很简单。只要在 webpack 配置中配置如下:

完美,ThinkSNS+,以及拓展包都惠及了,可以尽情享受 mix 辅助函数带来的便利。

 

开源代码仓库:

GitHub:https://github.com/zhiyicx/thinksns-plus(点击star,每日关注开发动态。)

 

开源不易,为了争取开源,我们团队做了很多努力。把基于 Laravel 的作品展示在大家面前,之后专栏会持续不断的分享 ThinkSNS+ 开发过程中的技术细节。

分享到:
评论

相关推荐

    ThinkSNS是基于Laravel开发的一个用户生态基础框架系统

    【ThinkSNS:基于Laravel构建的用户生态基础框架系统】 ThinkSNS是一款采用现代Web开发框架Laravel精心打造的用户生态基础框架系统。Laravel是PHP领域内的一款优雅、富有表达力的框架,以其出色的代码组织结构和...

    thinksns.zip_thinksns_thinksns+源码_thinksns源码

    这个标题“thinksns.zip_thinksns_thinksns+源码_thinksns源码”暗示了我们正在讨论的是ThinkSNS的源代码压缩包,包含完整的项目文件,可用于开发和定制。 1. **ThinkSNS系统概述**:ThinkSNS是一个基于PHP语言和...

    ThinkSNS + 移动端使用说明书1

    【ThinkSNS+ 移动端使用说明书】 ThinkSNS+ 是一款强大的社交网络软件,其移动端提供了丰富的功能,让用户可以在手机上轻松享受社区互动的乐趣。本说明书将详细介绍如何在移动设备上注册、登录、找回密码,以及使用...

    app端使用手册1

    朋友圈是ThinkSNS+移动端的一个核心功能,用户可以在朋友圈中发表动态、查看好友的动态、评论、点赞、收藏、分享等。 评论是ThinkSNS+移动端提供的一种社交功能,用户可以对他人的动态进行评论,评论内容可以是文字...

    plus:PlusPlus(ThinkSNS +)是使用Laravel构建的功能强大且易于开发的社交系统

    请看特色再加上是基于Laravel所开发的,它拥有以下的几个主要特点:跟随Laravel一起升级,但是我们放弃LTS版本,长期的框架不变,虽然会会于稳定,但是Plus是一个长期规划维护的开源项目,随时可以升级框架击败我们...

    基于PHP的ThinkSNS开源社交系统正式版源码.zip

    【描述】"基于PHP的ThinkSNS开源社交系统正式版源码.zip" 指出这个压缩包包含了ThinkSNS系统的源代码,这意味着用户可以自由地查看、修改和分发这些代码,以适应不同的需求和定制化开发。.zip文件格式是一种常见的...

    基于PHP的ThinkSNS 开源社交系统正式版.zip

    开发者还需要熟悉Laravel框架,因为ThinkSNS基于此框架构建,Laravel提供了优雅的MVC设计模式,使得代码结构清晰,易于维护。 安装与部署ThinkSNS的过程相对简单,一般包括以下步骤:下载最新版本的源码,配置合适...

    ts社交软件使用文档

    首先,ThinkSNS+的技术栈包括Laravel、VUE.js、PHP(7.0+)、MySQL(5.6+)、Swift 3.1和JAVA。这些技术的选择保证了平台的高性能与扩展性。此外,ThinkSNS+还支持通过应用、插件和风格包的方式扩展平台功能,体现了...

    ThinkSNS扩展插件之任务/效率管理.zip

    需要考虑如何在thinksns下以易用的方式完善兼容常见的xmlrpc接口库 代码仓库地址 https://github.com/hiwiki/taskapp-thinksns GIT命令行: git clone git@github.com:hiwiki/taskapp-thinksns.git

    ThinkSNS2.0改进版代码包

    内置的超级管理员 ... 安装方法 - 程序包放入服务器 - 导入数据库文件ts_2_0.sql 新增加的功能 - 新浪式的两栏页面 - 新增举报功能 - 新增敏感词过滤功能 - 热门话题的自动生成+后台手动设置 ...- 完善微博广场(全新的UI...

    ThinkSNS V4 APPThinkSNS+ PC.rar

    《ThinkSNS V4 APP与ThinkSNS+ PC:一体化社交平台深度解析》 ThinkSNS V4 APPThinkSNS+ PC是一款集成了移动端APP和PC端应用的社交软件解决方案,旨在为企业和个人用户提供全面、高效且自定义化的社交网络服务。这...

    thinksns2.8模板开发说明

    《ThinkSNS 2.8 模板开发详解》 ThinkSNS 是一款知名的社交网络系统,其2.8版本提供了强大的模板定制功能,允许开发者根据需求自由调整界面设计,打造出个性化的用户体验。本文将详细介绍如何进行ThinkSNS 2.8的...

    ThinkSNS二次开发指南.rar

    《ThinkSNS二次开发指南》是一份针对ThinkSNS开源社交网络系统的详尽教程,旨在帮助开发者深入理解和扩展这个强大的平台。ThinkSNS是一款广泛应用于企业、社区、学校等场景的社交软件,它提供了丰富的功能模块,如...

    THINK SNS源码

    THINK SNS源码是一款基于PHP开发的社会化网络软件(Social Networking Software)源代码,它提供了构建社交网络平台的基础框架。这款源码以其全自动安装和易用性为特点,允许开发者快速搭建自己的社区网站,无需从零...

    ThinkSNS插件开发说明

    根据给定文件的信息,我们可以详细地探讨一下ThinkSNS插件开发的相关知识点: ### ThinkSNS插件开发说明 #### 简介 ThinkSNS是一款开源社交平台系统,提供了丰富的API接口和钩子(Hook)机制,允许开发者通过开发...

    ThinkSNS V2.5_APP开发指南.pdf

    ThinkSNS V2.5是一款由智士软件(北京)有限公司开发的开源社区软件,其核心定位是基于微博客的多应用社交网络系统。该系统旨在帮助用户建立一个注重交流和沟通的垂直类社区网站。ThinkSNS V2.5拥有以下主要特性: ...

    PHP实例开发源码——ThinkSNS 开源社交系统正式版.zip

    【标题】"PHP实例开发源码——ThinkSNS 开源社交系统正式版.zip" 提供的是一个基于PHP语言开发的开源社交系统ThinkSNS的完整源代码。这个系统旨在为开发者提供一个构建社区、社交网络平台的基础框架,帮助开发者快速...

    ThinkSNS1.6源代码

    ThinkSNS基于许多优秀的开源软件开发,提供全方位的社交网络解决方案ThinkSNS源于办公圈项目,WEB端基于国内技术领先的ThinkPHP框架开发,另外还有IM客户端软件。 ThinkSNS全部基于开源项目,同时也作为开源项目,...

    thinksns2.4

    对于前端,Bootstrap和Vue.js等现代前端框架的使用,能够提升用户体验,实现页面的快速响应和动态加载。 数据库层面,ThinkSNS 2.4可能会继续支持MySQL作为默认数据库,同时可能引入了对其他NoSQL数据库的支持,如...

Global site tag (gtag.js) - Google Analytics