首页 > 其他分享 >nuxt3项目自定义环境变量,typescript全局提示

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

时间:2024-08-27 11:15:08浏览次数:4  
标签:__ typescript 自定义 nuxt3 ts env 环境变量 nuxt

最近使用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.ts

console.log(process.env.DATA_TEST); // test

console.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是无法预料的。但是可以在打包的时候对自定义全局变量进行 宏定义 ,编译打包之后变量生成到代码中即可。

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;

标签:__,typescript,自定义,nuxt3,ts,env,环境变量,nuxt
From: https://www.cnblogs.com/kongyijilafumi/p/18382314

相关文章

  • 使用xinference部署自定义embedding模型(docker)
    使用xinference部署自定义embedding模型(docker)说明:首次发表日期:2024-08-27官方文档:https://inference.readthedocs.io/zh-cn/latest/index.html使用docker部署xinferenceFROMnvcr.io/nvidia/pytorch:23.10-py3#KeepsPythonfromgenerating.pycfilesinthecontai......
  • Nuxt3 全局变量接口前缀全局配置,全局方法,全局状态管理
    接口前缀全局配置,全局变量1.像api前缀这类的全局变量一般配置在nuxt.config.ts文件中。如下:nuxt.config.ts可以在public下定义全局变量,且public下的变量可以在客户端和服务端使用在其他任意vue或者js、ts文件中,可通过以下方式获取变量const{public:{apiBase}}=u......
  • 新手专科准大一学习c语言的第10天之strcpy、memset、自定义函数的学习与应用
    strcpystrcpy是C语言标准库中的一个字符串操作函数,用于将源字符串复制到目标字符串中。#include<stdio.h>#include<string.h>intmain(){chararr1[50];//确保目标数组足够大,能够容纳源字符串chararr2[]="helloworld";//源字符串......
  • 学懂C++(四十四):C++ 自定义内存管理的深入解析:内存池与自定义分配器
    目录1.内存池(MemoryPool)概念模型特点核心点实现适用场景经典示例实现代码解析2.自定义分配器(CustomAllocators)概念模型特点核心点实现适用场景经典示例实现代码解析高级自定义分配器示例代码解析总结        C++作为一种高性能编程语言,在......
  • vue element-ui表格table 表格动态 添加行、删除行、添加列、删除列 自定义表头
         vuetable表格动态添加行、删除行、添加列、删除列自定义表头; 增加一行、删除一行、添加一列、删除一列;每行带输入框input代码1、HTML部分:<template><divclass="app-container"><el-table:data="tableData"borderstyle="width:600px;margin-to......
  • DNF台服自定义apc斗蛐蛐归纳
    目录结构 action.ai#PVF_File[aipattern][think][void]`istargetinattackarea()`150.0150.0100.0100.0[true][think][void]`checkrandom()`30100......
  • 063、Vue3+TypeScript基础,作用域插槽的使用
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 061、Vue3+TypeScript基础,插槽中增加图片和控制视频
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 062、Vue3+TypeScript基础,插槽中使用具名插槽
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 18-神经网络-自定义带参数的层
    1、nn.Parameter函数2、torch.mm和torch.matmul区别都是PyTorch中用于矩阵乘法的函数,但它们在使用上有细微的差别importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassMyLinear(nn.Module):def__init__(self,in_units,out_units):......