滴普大前端系列之开篇 | 前端开发脚手架

535 阅读5分钟

📚系列介绍

在滴普科技这个卧虎藏龙的地方,有着一群身怀绝技,才华横溢的开发,他们苦心钻研技术,致力于回馈社区。小水滴作为一个热心的搬运工,将给大家带来一系列的前端技术成果的分享,接下来我们会有......

DEEPEXI 官方:产品介绍与技术分享

https://www.zhihu.com/org/deepexi

DEEPEXI 大前端:前端技术成果的分享

https://zhuanlan.zhihu.com/deepexi-frontend

开源地址(欢迎点击github来贡献你的star哦 ✨)

https://github.com/deepexi

https://github.com/FEMessage


create-nuxt-app 2.0 :集成更多工程化实践

🤔简单介绍

@femessage/create-nuxt-app 是滴普前端开发脚手架工具。提供后台管理和移动 Web App 两个项目模板。基于中后台项目交付,提供一系列预设功能。让前端开发可以专注于业务的实现,无需关注全局逻辑和构建发布配置,提高项目从 0 到 1 的效率。

经历了过去一年大小中后台项目,脚手架集成了更多工程化实践。接下来带大家看一下都有哪些令人期待的特性。

✨新特性预览

👨‍💻用户体验提升

保证最小的主显示区域

开发可以不用考虑屏幕尺寸了,对于部分屏幕特别小的用户,就委屈多划一下鼠标,以保证最低的阅读体验。

以往很多后台管理页面是这样的,表格缩在一块,阅读性大打折扣。

跨平台统一的滚动条

基于 el-scrollbar 实现,这是一个 element 中没有公开的组件。

鉴权失效重定向

登录凭证导致的重新登录,登录后会重定向到失效时的页面。用户不需要重复导航到相关页面。功能虽然简单,但是项目组无暇顾及登录优化,统一在脚手架中实现就最好不过。

默认的接口状态码消息

再也不需要担心接口返回不规范,导致只提示状态码,没有文字信息的问题。


🛠开发体验提升

提供一套较为完整的面包屑方案

nuxt 生态里面,面包屑的方案一直是难题。而且业务中也会经常出现动态面包屑的需求。这一方案可以满足这些需求。

Nuxt 里面实现面包屑难在哪儿呢?

浏览一下 Vue 生态的面包屑解决方案不难发现,基本都是基于路由匹配实现的。然而 Nuxt 以文件目录生成路由的特性,将路由表屏蔽了。对于开发者可以说是又爱又恨。

另外一个痛点就是现在很多中后台项目的面包屑除了需要实现导航的功能,还需要动态渲染一下部门名字、模块名字等,实现区分多个同级目录的作用。

因此提供一种统一的方案,省得每个团队都各自踩坑。统一每个项目的实现也有利于项目人员的临时调度,不需要很多时间就能上手项目了。

提供一个数据分层的方案 service 层

对于企业级 web 应用,接口可以说是海量的。如果既想享受 nuxtjs/axios 封装带来的便捷,又想实现数据分离,则需要一些技巧。下面罗列一下这个方案带来的直观感受:

  • 调用接口不需要各种 import 了,同时也不会出现散落各处的接口路径字符串。
  • 统一且语义化的数据请求调用方式,代码更加直观
  • 临时 mock 数据不会影响到视图层,可以直接在 service 层介入

支持 ES optional-chaining 和 nullish-coalescing-operator

// optional-chainingconst adventurer = {  name: 'Alice',  cat: {    name: 'Dinah'     }};const dogName = adventurer.dog?.name; console.log(dogName);// expected output: undefinedconsole.log(adventurer.someNonExistentMethod?.())// expected output: undefined// nullish-coalescing-operatorconst foo = null ?? 'default string';console.log(foo);// expected output: "default string"const baz = 0 ?? 42; console.log(baz);// expected output: 0
这两个新特性为写出健壮的代码提供了巨大的方便
// 判断值是否「真」真值// Beforeimport { isNull, isUndefined } from "utils" const isTruly = value => !isNull(value) && isUndefined(value)const value = isTruly(val) ? val : ""  // Afterconst value = val ?? ""  // 避免 can't find property xxx of undefinedconst get = {}// Beforeconst obj = get.a && get.a.obj// Afterconst obj = get.a?.obj

提供 svg-icon 的集成

更方便的使用 svg-icon,也不需要自己操心 webpack 配置了。往指定目录存放 svg 文件即可。


👀使用细节

对于大部分的特性,开发者不需要知道细节也能享受得到。因为脚手架的初衷便是为业务开发屏蔽掉不必要配置和全局逻辑,让他们专心于业务逻辑的开发即可。

然而面包屑和 service 层只是提供了一个方案,开发者必须要了解实现才能运用自如。

有兴趣的也可以加入钉钉群讨论哦~


作者:梁汉贤

滴普门前扫地僧



免费试用
1. 登陆 https://cloud.deepexi.com 申请售前咨询,业务需求中加上推荐码deepexi@juejin将有专人联系开通。
2. 快速开通请拨打18026408340(运营专员),我们将为您提供咨询服务。
3. 最终解释权归滴普科技所有。

往期推荐

全渠道数字化营销平台 DEEPEXI DM

企业级研发效能利器 DEEPEXI DevOps

企业级研发能力复用平台 DEEPEXI SPaaS

企业级前端全链路开发服务平台:DEEPEXI Serverless(A20)

云服务编排器 DEEPEXI Conductor


DEEPEXI是滴普科技公司面向企业数字化领域打造的云原生智能平台,定位于企业数字化引擎,为企业提供数字化全栈解决方案。滴普科技致力于互联网/大数据/人工智能/物联网领先技术产品解决方案的研发和实施,是领先的企业数字化建设者。

更多内容请登录:cloud.deepexi.com