nuxt3项目自定义环境变量,typescript全局提示

最近使用nuxt3框架来写项目,其中有一点就是 typescript 语法提示让人闹心,使用 vscode 编辑器,如果有语法提示进行编码,工作效率可以提升一个档次。本篇文章说的就是如何在 vscode 中使用 nuxt3 框架,自定义环境变量,支持 typescript 语法提示。

  • 列出当前使用的环境版本
node # 21.4.0
pnpm # 8.15.5
nuxt # 3.13.0
vue # latest
  • 创建项目命令
pnpm dlx nuxi@latest init test # test 为项目名称

自定义环境变量:process.env

因为nuxt3自带dotenv,所以只需要修改项目的启动命令,给运行的项目加上自定义环境变量。

  • 新建.env.test文件

在项目根路径下来创建 .env.test 文件,写入文件内容如下。

DATA_TEST=test
  • 使用

DATA_TEST=test
这样就可以在 nuxt.config.ts 文件中或者 nuxt.config.ts 引入的 脚本文件 使用 process.env.DATA_TEST

使用dotenv生成的环境变量一般都是string类型。注意,请不要再.vue中文件使用自定义的环境变量。因为无法读取到!

// nuxt.config.tsconsole.log(process.env.DATA_TEST); // testconsole.log(typeof process.env.DATA_TEST); // string

如何支持 typescript 语法提示。

我们定义了环境变量,需要配置typescript,来支持语法提示。可按照一下步骤进行配置。

  • 创建*.d.ts文件

这里的*代表是任意名称的,例如本案例使用 env.d.ts 名称。在项目根目录下,与 nuxt.config.ts 文件同级。内容如下:

declare namespace NodeJS {interface ProcessEnv {/*** 环境变量 测试数据*/DATA_TEST?: string}
}

定义之后,在整个项目中使用 process.env 时会自动提示语法。(如果没有显示,请重启编辑器,再次查看)如图:

vscode nuxt env示例图1

vscode nuxt env示例图2

如何定义全局变量来支持 .vue 以及 .ts 文件。

前面提到了如何写入自定义环境变量 process.env ,但是不能直接在 .vue 文件中使用。因为 nuxt3 分客户端渲染,服务端渲染。像 process.env 是依赖nodejs执行环境。而vue文件这些代码是需要经过打包之后在使用,所以在客户端中process.env是无法预料的。但是可以在打包的时候对自定义全局变量进行 宏定义 ,编译打包之后变量生成到代码中即可。

  • 安装依赖 @rollup/plugin-replace具体配置请前往查看。
pnpm add @rollup/plugin-replace
  • 配置

因为nuxt内集成了vite手脚架,而vite本身又是支持rollup插件的。在这里,我们只需要在nuxt配置中,添加vite的插件配置信息即可。

// nuxt.config.ts
import replace from '@rollup/plugin-replace';export default defineNuxtConfig({vite: {plugins: [replace({values: {__HTTPURL__: `'http://baidu.com'`, // 替换之后 为 "http://baidu.com" 字符串类型__LOG__: `false`, // 替换之后为 false  boolean 类型}}),]}
})
  • 使用
<!-- pages/index.vue -->
<template><h1>index page</h1>
</template><script setup lang="ts">
const url = __HTTPURL__;
const b = __LOG__;
console.log(url, typeof url); // http://baidu.com string
console.log(b, typeof b); // false 'boolean'
</script>
  • 打包后的代码

因为经过@rollup/plugin-replace插件编译转换后,你所用的预定义代码会变成定义好的。

// 假设
const url = "http://baidu.com";
const b = false;
  • typescript支持

在我们之前定义好的env.d.ts中 再次添加以下代码,即可做到vscodets语法提示。

// env.d.ts
declare const __HTTPURL__: string;
declare const __LOG__: boolean;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/787899.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32与Linux串口双向通信

STM32 与 linux 双向串口通信实验本文记录STM32 与 linux 双向串口通信,包含stm32发送、Linux阻塞式接收;Linux发送,STM32阻塞式接收;本实验的目的在于调通数据链路,为之后使用奠定基础。 实验平台为:STM32方面用的是STM32H723ZGT6为核心的开发板;开发环境为 VSCode + AC…

Java基础-学习笔记14

Collection、Map 类实现14 集合 Collection、Map 第一部分 Collection的框架体系 1) 可以动态保存任意多个对象,使用比较方便 2) 提供了一系列方便的操作对象的方法:add、remove、set、get等 3) 使用集合添加、删除新元素简单便捷。 集合 Collection 主要是两组:单列集合…

Apache SeaTunnel技术架构演进及其在AI领域的应用

随着数据集成需求的增长,Apache SeaTunnel作为新一代的数据同步引擎,不仅在技术架构上不断演进,也在AI领域展现出其独特的应用价值。在CommunityOverCode Asia 2024大会上,Apache SeaTunnel PMC Chair 高俊 深入探讨SeaTunnel的技术演进路径,分析其在AI领域的应用案例,并…

Windows 系统 局域网文件夹共享无法访问的终极解决方法

先介绍 Win10 无法访问其他电脑的解决方法首先,Win10 能成功访问共享文件夹,必须有安装 SMB1 协议,否则会提示找不到网络名称的提示。 方法很简单,点击 微软小娜 Cortana 输入 启用或关闭 Windows 功能(或者直接输入 功能 也能找到),打开 启用或关闭 Windows 功能 对话框…

使用 updateAppConfig 更新 Nuxt 应用配置

title: 使用 updateAppConfig 更新 Nuxt 应用配置 date: 2024/8/27 updated: 2024/8/27 author: cmdragon excerpt: 通过使用 updateAppConfig,你可以轻松地在应用运行时更新配置,而无需重新启动应用。这对于需要在运行时调整设置的应用场景非常有用。 categories:前端开发…

AtCoder Beginner Contest 051

A - Haiku 直接模拟。 #include <bits/stdc++.h>using namespace std; using i64 = long long;int main() {ios::sync_with_stdio(false), cin.tie(nullptr);string s;cin >> s;string a, b, c;a = s.substr(0, 5);b = s.substr(6, 7);c = s.substr(14);cout <&…

PEP 508:为不同版本Python指定不同依赖

如果使用Python第三方包的某一个版本有问题,而不同版本Python所对应的软件最新版本又不一致,这种情况下如何在requirements.txt文件中指定软件最高版本是非常重要的。这里根据PEP 508的规范,做了一个Numpy版本要求numpy<=1.21.6 || 1.28>numpy>=1.23的示例。问题背…

经验分享|如何发现并利用信息泄露漏洞?

信息泄露漏洞是发现和报告的重要目标。虽然它们可能不会带来很丰厚的回报,但发现它们表明Web应用程序的安全性较差,这可能有助于发现更严重的漏洞。 一、常见的信息泄露漏洞类型 1.1服务器标识版本 服务器标识版本能够揭示服务器上运行的特定软件及其版本,这可以被用来寻找已…

简单萌萌哒 Top Tree(上)

前情提要。 Top Cluster 分解与 Top Tree 情景导入 我们总是想要以一种合适的方式对树进行划分,但是对于菊花图而言,基于点的划分总是不合适的,这启发我们基于边进行划分。事实上可以证明,基于边的划分总是可行的。 Top Cluster 分解就是一种基于边的划分方式,下面我们来介…

手把手教你—搭建Vue3企业级项目规范+基础封装配置

前言 如何搭建一个简易脚手架。核心需求是输入项目命令,clone准备好的项目模板,拉到本地后,装一下依赖,就可以直接开发了。不用每次都花大量时间,去搭建项目规范和做必要的封装配置。 经过简单寻找后,发现没有符合自己预期的。于是大雄从0到1搭建一个具备完善规范的Vue3开…

WPF 模板

一、数据模板继承了ItemConrol的控件对象(如ListView、ListBox、DataGrid、TabControl等等),都可以使用数据模板DataTemplate。 数据模板的作用在于决定每个Item中的数据的展示形式。 普通控件通过Template属性来定义模板,而子项容器控件则通过ItemTemplate属性来定义子项模…

算法与数据结构——队列

队列 队列(queue)是一种遵循先入先出规则的线性数据结构。队列模拟了排队现象,即新来的人不断加入队列尾部,而队列头部的人逐个离开。 如图所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队列尾部的操作称为“入队”,删除队首元素的操作称为“出队”。…