在节点js中导入时执行脚本,而不调用函数
Executing a script upon import in node js, without calling a function
我正在尝试导入一个加载我的环境变量的打字稿模块。由于我的变量的导入和执行顺序对我的应用程序很重要,我想将它们从我的 index.ts
文件重构到另一个模块中。但是,我不想调用一个函数来 运行 我的脚本,而是我想在导入我现在正在使用 loadEnvVars()
函数的模块时执行它们。
// index.ts
import loadEnvVars from './settings';
**loadEnvVars();**
import app from './server';
app.run();
我想要的不是上面的:
// index.ts
import loadEnvVars from './settings';
import app from './server';
app.run();
// ./settings.ts
import dotenv from 'dotenv';
import path from 'path';
const envVars = (): void => {
dotenv.config({
path: path.join(__dirname, '../.env.' + process.env.NODE_ENV),
debug: process.env.NODE_ENV === 'development' ? true : false,
});
};
export default envVars
我自己想出了以下解决方案,但我不确定这是否是进行此类导入的正确方法:
// index.ts
import './settings';
...
// settings.ts
import dotenv from 'dotenv';
import path from 'path';
const envVars = (): void => {
dotenv.config({
path: path.join(__dirname, '../.env.' + process.env.NODE_ENV),
debug: process.env.NODE_ENV === 'development' ? true : false,
});
};
envVars();
export default envVars;
您可以通过完全删除该函数使其更简洁一些,因为它不再使用,而是自动调用:
// 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
顺序会导致代码脆弱。在导入 settings
之前不小心导入其他东西很容易搞砸,这取决于已经设置的配置。如果我是你,请考虑继续使用原始代码。显式执行依赖时间线很好。
另请注意,导入已挂起。您的代码
import loadEnvVars from './settings';
loadEnvVars();
import app from './server';
相当于
import loadEnvVars from './settings';
import app from './server';
loadEnvVars();
我正在尝试导入一个加载我的环境变量的打字稿模块。由于我的变量的导入和执行顺序对我的应用程序很重要,我想将它们从我的 index.ts
文件重构到另一个模块中。但是,我不想调用一个函数来 运行 我的脚本,而是我想在导入我现在正在使用 loadEnvVars()
函数的模块时执行它们。
// index.ts
import loadEnvVars from './settings';
**loadEnvVars();**
import app from './server';
app.run();
我想要的不是上面的:
// index.ts
import loadEnvVars from './settings';
import app from './server';
app.run();
// ./settings.ts
import dotenv from 'dotenv';
import path from 'path';
const envVars = (): void => {
dotenv.config({
path: path.join(__dirname, '../.env.' + process.env.NODE_ENV),
debug: process.env.NODE_ENV === 'development' ? true : false,
});
};
export default envVars
我自己想出了以下解决方案,但我不确定这是否是进行此类导入的正确方法:
// index.ts
import './settings';
...
// settings.ts
import dotenv from 'dotenv';
import path from 'path';
const envVars = (): void => {
dotenv.config({
path: path.join(__dirname, '../.env.' + process.env.NODE_ENV),
debug: process.env.NODE_ENV === 'development' ? true : false,
});
};
envVars();
export default envVars;
您可以通过完全删除该函数使其更简洁一些,因为它不再使用,而是自动调用:
// 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
顺序会导致代码脆弱。在导入 settings
之前不小心导入其他东西很容易搞砸,这取决于已经设置的配置。如果我是你,请考虑继续使用原始代码。显式执行依赖时间线很好。
另请注意,导入已挂起。您的代码
import loadEnvVars from './settings';
loadEnvVars();
import app from './server';
相当于
import loadEnvVars from './settings';
import app from './server';
loadEnvVars();