Node.js 在节点js中导入时执行脚本,而不调用函数

Node.js 在节点js中导入时执行脚本,而不调用函数,node.js,typescript,es6-modules,Node.js,Typescript,Es6 Modules,我正在尝试导入一个加载环境变量的typescript模块。由于变量的导入和执行顺序对我的应用程序很重要,我想将它们从index.ts文件重构到另一个模块中。但是,我不想调用函数来运行我的脚本,而是希望在导入模块时执行它们,我现在正在使用loadEnvVars()函数执行这些操作 //index.ts 从“./settings”导入loadEnvVars; **loadEnvVars()** 从“./服务器”导入应用程序; app.run(); 我想要的是: //index.ts 从“./set

我正在尝试导入一个加载环境变量的typescript模块。由于变量的导入和执行顺序对我的应用程序很重要,我想将它们从
index.ts
文件重构到另一个模块中。但是,我不想调用函数来运行我的脚本,而是希望在导入模块时执行它们,我现在正在使用
loadEnvVars()
函数执行这些操作

//index.ts
从“./settings”导入loadEnvVars;
**loadEnvVars()**
从“./服务器”导入应用程序;
app.run();
我想要的是:

//index.ts
从“./settings”导入loadEnvVars;
从“./服务器”导入应用程序;
app.run();
/./settings.ts
从“dotenv”导入dotenv;
从“路径”导入路径;
const envVars=():void=>{
dotenv.config({
path:path.join(_dirname,'...env.'+process.env.NODE_env),
调试:process.env.NODE_env==='development'?true:false,
});
};
导出默认环境变量
我自己提出了以下解决方案,但我不确定这是否是进行此类导入的正确方法:

//index.ts
导入“./设置”;
...
//settings.ts
从“dotenv”导入dotenv;
从“路径”导入路径;
const envVars=():void=>{
dotenv.config({
path:path.join(_dirname,'...env.'+process.env.NODE_env),
调试:process.env.NODE_env==='development'?true:false,
});
};
环境变量();
导出默认环境变量;

由于不再使用该函数,而是自动调用该函数,因此完全删除该函数可以使其更干净一些:

// settings.ts

import dotenv from 'dotenv';
import path from 'path';

dotenv.config({
  path: path.join(__dirname, '../.env.' + process.env.NODE_ENV),
  debug: process.env.NODE_ENV === 'development' ? true : false,
});

// remove this next line
// export default envVars;
也就是说,依赖于
导入
订单会导致代码脆弱。在导入取决于已设置的配置的
设置
之前,可能会意外导入其他内容,从而很容易搞乱某些内容。如果我是你,考虑继续使用原始代码。明确的执行依赖时间线是好的

还要注意的是,进口货物被吊运。你的密码

import loadEnvVars from './settings';
loadEnvVars();
import app from './server';
相当于

import loadEnvVars from './settings';
import app from './server';
loadEnvVars();

谢谢你的回答。第一部分很有效,对我来说很有意义。然而,第二部分对我不起作用。原因是我的
loadenvars
有我的数据库信息,在
app
中,我正在调用这些vars以连接到数据库。通过在
app
之后移动
loadEnvVars
,它在启动数据库时失败。如果您能澄清这一点,我将不胜感激,尽管我的问题已通过第一部分解决。同样,如果您可以编辑以下行的答案,我可以接受答案:
import loadEnvVars from./settings'这需要更改为
import./settings'
因为我删除了那些建议的行并应用了您对
设置的建议更改。ts
我只是引用了您在那里的原始代码-显示导入已挂起。我不是说“使用此代码”,我是说“您的原始代码相当于…”以便更好地理解导入的工作原理。您的原始
import./settings'就可以了