动态导入typescript express

动态导入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

从我的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;
};
这是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)] }