动态导入typescript express
从我的app.ts动态导入typescript express,typescript,express,import,Typescript,Express,Import,从我的app.ts import * as dotenv from 'dotenv'; dotenv.config(); const env: string = process.env.NODE_ENV || 'development'; export const cnf = async () => { const data = await import('./config.' + env); console.log('data'); return data; }; 这是c
import * as dotenv from 'dotenv';
dotenv.config();
const env: string = process.env.NODE_ENV || 'development';
export const cnf = async () => {
const data = await import('./config.' + env);
console.log('data');
return data;
};
这是console.log打印
import * as confgg from '../../config';
class App {
public app: express.Application;
private host: string = process.env.IP || process.env.ADMIN_HOST || cnf.get('web.host');
private port: number = parseInt(process.env.PORT, 10) || parseInt(process.env.ADMIN_PORT, 10) || cnf.get('web.port');
private mysql = MySql.getInstance();
constructor(private readonly config: AppConfig) {
this.app = express();
this.initializeInfoLoggingHandling();
console.log(confgg)
}
但它应该打印一些数组。
我只是尝试动态加载我的配置
这是console.log打印
{cnf:[函数(匿名)]}
但它应该打印一些数组
它应该准确地显示这一点,因为您使用命名的导出导出函数,但导入模块名称空间对象,每个导出都有一个属性。因此,您看到一个对象(模块名称空间对象)具有一个属性(cnf
),该属性引用一个函数(您正在导出的async
函数)
如果要使用动态导入并使导出成为该动态导入的结果,则需要使用以下命令使模块等待:
config.ts
:
import*作为dotenv从'dotenv'导入;
dotenv.config();
const env:string=process.env.NODE|env|124;'development';
//顶级等待等待导入完成
常量数据=等待导入('./config.'+env);
console.log(“数据”);
导出默认数据;//见下文注释
然后导入默认名称空间对象,而不是模块名称空间对象:
从“../../config”导入confgg;
您尚未显示config.development
等文件的内容,但是data
将是配置信息的模块名称空间对象,您可能希望导出其属性之一
请注意,顶级
await
仍然只是一个建议,尽管它在流行的JavaScript引擎和模块绑定器中已经存在了很久。FWIW,在我最近的新书《JavaScript:新玩具》的第13章和第19章中,我讨论了JavaScript模块导入和导出、动态导入以及顶级await
。如果您感兴趣,请在我的个人资料中添加链接。
{ cnf: [Function (anonymous)] }