首页 > 其他分享 >dotenv模块引入失败

dotenv模块引入失败

时间:2024-09-10 16:03:40浏览次数:8  
标签:node modules 引入 internal 模块 dotenv config

一、背景

项目中需要加入环境变量到进程中,例如数据库连接地址、ETCD数据等

使用dotenv,读取特定的配置文件进行数据的写入。代码如下:

import dotenv from 'dotenv';
dotenv.config({
  path: './config/.env',
});

该代码在其他项目使用过,应该是可以跑通的

二、现象

项目启动的时候报错:
dotenv.config({
       ^


TypeError: Cannot read properties of undefined (reading 'config')
    at Object.<anonymous> (/Users/zhuchuanzhen/Documents/RMS/callback-feature/src/main.ts:2:8)
    at Module._compile (node:internal/modules/cjs/loader:1358:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
    at Module.load (node:internal/modules/cjs/loader:1208:32)
    at Module._load (node:internal/modules/cjs/loader:1024:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
    at node:internal/main/run_main_module:28:49

Node.js v20.14.0

三、疑问地方

  • 通过vscode的代码定义跳转,config函数确实在安装的三方模块中确实是有定义的
  • 打印引入的该值:console.log(dotenv),该变量确实为undefined
  • 查看dotenv源码,该模块并没有使用export default暴露出任何变量或者方法

那原来的项目是怎么可以使用的呢?

四、结论

关注一下 ts 配置文件 `tsconfig.json` 中的配置项:`esModuleInterop` 该配置项就是为了能够兼容ES模块与CommonJS模块的不同写法,使得引入方式能够变得统一

要解决该问题,有下面两种方式

  1. 使用import * as dotenv from 'dotenv'
  2. tscofnig.json中添加配置项:"esModuleInterop": true,

标签:node,modules,引入,internal,模块,dotenv,config
From: https://www.cnblogs.com/Mr-Kahn/p/18406527

相关文章

  • 鸿蒙OS模块化开发实战:独立路由与解耦策略
    前言在现代软件开发中,模块化设计是提高项目可维护性和可扩展性的关键。鸿蒙OS以其先进的架构设计,为开发者提供了强大的模块化开发工具。本文将深入探讨如何在鸿蒙OS中实现模块的独立路由配置,以降低模块间的耦合度,实现单模块的独立运行和开发。一、架构设计概述一个清晰的......
  • NLTK英文文本分词的常用模块
    目录1.断句模块:2.分词模块:3.去除文本中的除标点符号:4.去除停用词:5.词频提取与词频绘图: 5.1词频的提取5.2画出词频5.3画出出现频率最高的三个词 6.单词搜索1.断句模块:importnltkfromnltk.tokenizeimportsent_tokenize#英文断句模块#要断句的文本parag......
  • JavaScript之模块模式
    一模块模式JavaScript模块模式有传统的立即调用函数表达式(IIFE)、CommonJS、AMD、ES6模块立即调用函数表达式(IIFE)立即调用函数表达式(IIFE)是一种设计模式,通过创建一个立即执行的函数来封装代码,避免全局命名空间污染。IIFE结构如下:(function(){//你的代码})(......
  • 如何集成Android平台GB28181设备接入模块?
    技术优势大牛直播SDK的Android平台GB28181设备接入模块在适用场景、音视频能力、定位与通信、数据管理、安全性与稳定性、配置与扩展性以及集成与维护等方面均表现出显著的优势。这些优势使得该模块在视频监控、巡检抢修、远程指挥等多个领域具有广泛的应用前景和重要的应用价值。......
  • 树莓派通过串口驱动HC-08蓝牙模块
    树莓派通过串口驱动HC-08蓝牙模块文章目录树莓派通过串口驱动HC-08蓝牙模块一、HC-08蓝牙模块介绍二、树莓派与蓝牙模块硬件连接三、树莓派通过蓝牙控制设备一、HC-08蓝牙模块介绍蓝牙模块,是一种集成的蓝牙功能的PCB板,用于短距离无线通信,按照功能分为蓝牙数据模块......
  • ansible模块编写
    目录1.程序为什么能识别模块a.模块是独立的脚本b.模块的路径与目录结构2.模块的工作特性a.ansible模块执行任务,会ssh到远程主机b.ansible.module_utils.basicc.核心模块(CoreModules)与插件(Plugins)的区别3.构建简单模块a.模块功能b.模块文档c.验证模块功能1.程序为什......
  • Python 编程:如何巧妙运用 `abc` 模块解锁面向对象设计的新维度?
    引言在软件开发的世界里,面向对象编程(OOP)作为一门艺术,其精髓在于通过封装、继承与多态来构建可维护性高、易于扩展的系统。而在Python这门语言中,abc模块则为我们提供了一种优雅的方式来定义抽象基类(AbstractBaseClasses,ABCs),从而帮助我们更好地实践OOP的核心原则。本文将带......
  • shutil模块详解
    shutil模块提供了一系列高级文件操作功能,包括复制、移动、删除和搜索文件或目录。shutil模块对压缩包的处理是调用ZipFile和TarFile这两个模块来进行的。下面详细介绍并给出示例代码:1. shutil.copy(src,dst)复制文件,但不保留权限和时间戳等元数据。importshutils......
  • 关于schneider施耐德140模块
    SCHNEIDER140模块是施耐德电气(SchneiderElectric)公司生产的一系列工业自动化和控制产品,这些模块通常用于Quantum系列PLC(可编程逻辑控制器)系统中,以实现各种自动化和控制任务。以下是对SCHNEIDER140模块的一些详细介绍:一、模块类型与功能SCHNEIDER140模块包括但不限于以下......
  • 功率单元和功率模块有什么区别?
        功率单元和功率模块在电力电子领域中各自扮演着重要角色,它们之间存在明显的区别,主要体现在以下几个方面:一、定义与构成功率单元:指的是集成在一块PCB(印刷电路板)上的功率转换电路模块,通常由MOSFET、IGBT(绝缘栅双极型晶体管)或SiCMOSFET等功率半导体器件构成。它能够......