nuxt build 变量_7个Nuxt技巧:构建安全高效的Vue.js Web应用程序

news/2024/7/8 13:37:37

c4a8e61affc46d6a106e9d6077be0807.png

作者 | Jonas Galve 译者 | 王强 Nuxt.js是一种创建Vue.js通用应用的开源框架,与传统的Vue SPA相比,该框架SSR(服务端渲染)将带来大量的SEO提升,提供更好的用户体验和。随着Nuxt2.7版本的发布,作者带大家回顾下以前给出的技巧,看看那些仍然是开发中不错的建议。 1. 使用自定义路由索引文件

这仍是一种便捷有用的小技巧。使用技巧这个词是因为我知道用 Nuxt 的 route module 来实现是一种适当的方式。不过,如果不需要访问 VueRouter 的所有特性,用 extendRoutes() 也可以做到。

相关链接:

Nuxt的route module: https://github.com/nuxt-community/router-module extendRoutes: https://nuxtjs.org/api/configuration-router/#extendroutes

2. 根据状态加载组件

根据HTTP的请求活动使用Nuxt的加载组件,可能不如在单个页面上简单的使其无效并调用start()和finish()进行手动控制来得有效。为了让其在一个网页中无效,可以将loading的属性设置为false,该功能在其2.0版中出现,也是我对该项目的第一个贡献,详见: https://github.com/nuxt/nuxt.js/pull/3629

export default {
loading: false,
async mounted() {
await this.$http.$post('/init')
this.$nuxt.$loading.finish()
}
}

在上例中,将loading设置为false,可以让加载组件进入网页时即开始工作,让编程人员可以选择手动停止它。当然,前提假设是它已经由前一个路由启动(不管是自动或通过start()手动启动)。也就是说,如果在网页上将loading设置为false,需要在导航到不同路由时手动调用start()来启动Nuxt的加载组件。

我常使用的另一种模式,是用Nuxt加载组件的状态来更新Vuex store仓库。这种简单的方法可以用来更新需要可视化实现的特定UI部分。

export default {
computed: {
loading: {
get() {
return this.$store.state.loading
},
set(status) {
this.$store.commit('updateLoadingStatus', status)
}
}
},
methods: {
start() {
if (this.loading) {
return
}
this.loading = true
},
finish() {
if (!this.loading) {
return
}
this.loading = false
}
}
}
3. 从 Koa 的上下文传递数据

我不再建议将Nuxt当做Koa中间件。我了解到,处理同类型工作,Nuxt的内置HTTP服务器比Koa强很多。如果在后端API和Nuxt应用代码(建议的方式)使用不同的处理,而且还想使用基于Node的API服务器,可以了解一下hapi、polka或micro。我们很快会发布基于连接的@nuxt/metal。

使用Nuxt服务器中间件时,可以应用相同的方法,即设置要传递给中间件处理程序的req或res参数。

4.  使用 Vuex Store 工厂函数

我已经完全不这样做了。现在Nuxt允许在state.js、actions.js和mutations.js 等单独的文件中拆分Vuex store模块。它能重组符合预期Vuex属性(包括 getters)的文件并用它们来构建一个store模块。这让代码结构变得更简单自然。

可能,你可能想要检出unholy,它是我写的一个Nuxt模块,可以改变缺省 commit()行为来接收一个简单的参数,和root state结合紧密的一个对象。和 Vue核心团队关系密切的一个组织提到,会有类似功能添加到Vuex中。

5. 用 extend() 产生多余的文件

我们最好使用build.templates配置选项。它们可以让我们添加一些列Nuxt模板文件(由lodash.template自动预处理)。你可以指定源,目标和带选项的对象(模板变量),取代writeFileSync()的手动方式,如下所示:

export default {
build: {
templates: [{
options: { api: getAPITree() },
src: './src/api.js.template',
dst: '../src/api.js'
}]
}
}
6. 初始化全局客户端代码

这里的方法有所改变。以前是使用的是我基于实体的方法,现在则使用客户端插件来添加一个onNuxtReady 处理程序。我通常从 src/ready 中导入,如下所示:

import ready from '~/ready'
window.onNuxtReady(ready)

你也可以在 ready.client.js 文件中加入上述代码,在 plugins 配置选项中将其列出。Nuxt 会明白这是一个只在客户端运行的插件,这样就不用每次都检查 process.client了。

7. Axiosq 请求拦截

本文结束前,需要指出,对于Nuxt应用程序,Nuxt: The Hard Parts、@nuxtjs/axios不再是推荐使用的HTTP客户端库。使用@nuxt/http的拦截API也类似,并保留了我的每个Nuxt项目中都会用到的一个特性。

使用@nuxt/http拦截的主要区别在于,需要使用之前已有的config.headers 对象的set(key, value)方法,而不是简单地进行赋值。更新的例子如下:

export default function ({ $http }) {
$http.onRequest((config) => {
config.headers.set('Authorization', 'Bearer ${token}')
return config
})
}

过去一年中,Nuxt有超过 20k+ GitHub的关注,现在已成长为9人的核心团队,并且有190个贡献者,陆续在发布补丁和小版本。它拥有活跃友好的社区,可以轻松地构建Vue.js Web应用程序,是最安全,最高效的选择之一。

相关链接:

Nuxt: The Hard Parts: https://hire.jonasgalvez.com.br/2019/apr/27/nuxt-the-hard-parts/ @nuxtjs/axios: https://axios.nuxtjs.org/ @nuxt/http: https://http.nuxtjs.org/

英文原文: https://vuejsdevelopers.com/2019/05/20/7-nuxt-tips-revisited/?utm_source=echojs&utm_medium=article&utm_campaign=7tr

81b72d45c73731e4d4c140c3facbae8f.gif


http://www.niftyadmin.cn/n/3661337.html

相关文章

[需求]需求分析能力之一:用流程图说话

2006年07月06日 16:08:00 从江西项目上回来,就有一堆的事情,总算可以告一段落了。那是阮阮还在泰安基地工作的时候,有一次,我跟她聊天,说起需求能力。我说,我并不是比别人聪明,而是掌握了需求的…

python个数计算公式_Python 程序计算每个元音的数目

Python 程序计算每个元音的数目 在此程序中,您将学习使用字典和列表理解来计算字符串中每个元音的数量。 要理解此示例,您应该了解以下Python编程主题: 源代码:使用字典 示例#Python 程序计算每个元音的数目 #元音字符串 vowels …

[软工]近距离接触RUP plug-in

2006年06月08日 17:16:00 Derek 在给我们讲SOA的时候,告诉我们,Rational 有一个新的RUP Plug_In,叫做RUP4SOA。我是一个看好SOA并且喜欢RUP的人,这样的有创意的东东,当然不会逃出我的手掌心。PRJ270的Module5&#xff…

volatile关键字的作用_你真的会用Volatile了吗?

你真的会用Volatile了吗? 作者:大方 前言 在Java面试时,很多面试官都喜欢考察面试者对Java并发的了解程度。你面试的时候被并发编程的问题难住了吗?是不是也挂在并发问题上? 在面试中,volatile关键字是出镜…

[软工]此EUP非彼EUP

2006年06月07日 13:46:00 去北京前,跟阿阮家的David 聊起RUP,David是IBM SCM的认证专家,常常会被邀请了去客户那里解决他们的配置管理问题,英文特帮,跟Ivar 非常熟悉。他忽然问我,是否有EUP的资料&#xff…

R中高效安装包,以ComplexHeatmap包为例

包安装问题解决方案 1. Biocmanager安装 [2. 手动安装](正在更新……) 目录 包安装问题解决方案前言1. install.packages()的介绍1.1 install.packages()的工作原理1.2 install.packages()安装失败的原因1.3 解决方案 2. BiocManage安装ComplexHeatmap总…

cmd编译可以通过执行没有结果_QT发布程序没有那么难——WINamp;MAC OS系统release操作指南...

【目标】将代码程序打包成.exe(windows系统下可执行程序)或.app(mac os系统下可执行程序),不要求系统安装QT工具即可执行。【准备工作】(很重要!很重要!很重要!&#xff…

[软工]理想向左,现实向右

2006年09月11日 13:49:00 曾经在若干年前的一个会议上,听到某人慷慨激昂的宣称,国内的电子政务市场有多大,政府每年投入多少亿,感情之激烈,就如同这些钱已经揣入了他的腰包。但目前,国内有若干家公司在盯着…