WEB前端程序开发编程语言爱好者NUXTJS

回忆杀,Nuxt.js

2020-01-10  本文已影响0人  anOnion

这两年,我主要从事部门周边业务,搭建了数个细碎的 web 应用。最近由于一些人事变动,我又回到了最初的产品线上。时光飞逝,欣赏着自己的遗(la)产(ji)代码,“青骢”岁月浮现眼前。今天就谈谈我第一个web技术栈——nuxt.js,一款server/client同构渲染的 vue 框架。

安装

当年向领导层推荐 nuxt 的时候,我列了很多理由;虽然有些比较扯蛋,但当时最核心的考量是,nuxt 可以帮助我们零基础上手 web 应用。我这里先说说如何安装。nuxt 多年来一直使用的是 npm script 脚手架:操作就这么几步:

  1. 在命令行里敲下:yarn create nuxt-app <my-project>
  2. 按默认选项安装依赖
  3. 一句yarn dev,开工了!

在 vue-cli 满天飞的今天,npm 脚手架自然算不上什么惊奇的事情了,但几年前能做到零基础启动 vue 是很不容易的。我记得那时候市面上的资料还是基于 html 挂载 vue.js——把 vue 当作一个类似于 Jquery 的 lib 使用。作为练习项目而言,以上足够了;但是,放到一个企业级项目里,你要考虑其他问题,比如浏览器兼容、开发体验、代码风格……这就意味着你要配齐 vue 全家桶,各色 webpack、eslint、babel 配置,集成三方的 UI 库,布置后端服务等等等等。在一个几乎没有任何现代开发经验的项目组里,该怎么上手?从零开始学所有配置,或是在 github 的某个角落找到大体接近你需求的 demo,然后开始修改自己也不懂的各色文件?

也许,经历过那段时期的老员工依旧会对 nuxt 抱有微词,毕竟坑是不可抗拒的。但在前端开发方面,nuxt(相比于单纯的 vue 库)还是给我们带来了很多惊喜:它封装了上述所有配置,限制了代码风格和目录结构,提供了一个相对舒适的开发环境,我们因此得以在最短时间内投入到了生产实践中。

目录结构

作为一个通用框架,nuxt 给我们提供了什么?我最早是 1.4 版本开始的第一个 nuxt 项目,到今天是 2.11 版本,nuxt 的目录结构几乎没有变化:

├── .nuxt
├── pages
├── components
├── layouts
├── assets
├── static
├── store
├── plugins
├── middleware
├── nuxt.config.js

nuxt 目录结构的定型,稍早于 vue-cli 推荐结构的普及;目录结构看似合理,但是与主流风格稍有不同,还是略显美中不足的。在项目开始前,最好先确定这类代码规范;这样,当切换项目、新手入门,或是多团队合作时,能尽最大可能减少“解码成本”——理解项目逻辑所需的成本。我参与的项目由于历史惯性,之后都沿用了 nuxt 风格。

生命周期

上面提到过 nuxt 框架对 vue 生命周期的增强。我们刨去 vue 自带的生命周期(简化为 Render),看看增强部分。

Nuxt Lifecycle

nuxt 增强的生命钩子主要就是上面几种,分工很明确。不过由于 SSR 的特性,server 和 client 端都有可能触发这些钩子,所以 debug 的时候,还是很容易搞混的。我这里列一下最常见的钩子触发时机,大家注意一下:

Hooks Server(1st page) Client(1st page) Client(next pages)
nuxtServerInit
middleware
beforeCreate
asyncData/fetch
Created
mounted

小结

这期介绍了一款基于 vue 的 SSR 框架——nuxt。nuxt 框架对比 vue 库的好处是:它提供了一套完整的解决方案,帮助团队统一命令、规范代码、集成配套工具、封装配置文件,以及提供生产和开发环境。这是对缺少文档、缺乏经验,或是流动性很大的团队来说,不可或缺的优异功能。

不过,框架之于库的劣势也很鲜明:缺乏灵活性,缺少配套插件,封装可能过深,项目侵入较大等等。我自己碰过最大的坑是,nuxt 对 serverless lambda 支持不友好;server 端的依赖不能打包部署,只能把所有 node_modules 一股脑扔到 lambda 上,结果超出了 lambda 上传 size 限制。所幸,有个小姑娘花了两礼拜时间,用 webpack 过滤掉了无用文件,从而大幅减少了 size。当然,依赖问题可能是各种技术栈都会碰到的难题。我就见过有些部门专门组织多人团队,花了一年时间才勉强解决依赖过大的问题,最后得到了领导层的高度赞扬。

总之,框架和库的选择目前来说还是极度依个人经验,很难找出一套可以量化优劣的评判机制;多写代码,积累经验,并在适当时机转型,可能是比较靠谱的应对之道。(我也经常在 nuxt 和 vue spa 之间摇摆,有时候还会被领导层喷“拍脑袋”,)

相关

文章同步发布于an-Onion 的 Github。码字不易,欢迎点赞

上一篇 下一篇

猜你喜欢

热点阅读