【问题标题】:Dynamic import is not working the same as regular import动态导入与常规导入不同
【发布时间】:2022-10-08 23:08:21
【问题描述】:

我在../../src/routes/index.js 中有这个文件:

import Router from '../../my_modules/nexus/Router.js'

Router.get('/', function (request, response) {
    response.send('welcome home')
})

Router.get('/about', function (request, response) {
    response.send('about me')
})

我正在尝试通过节点导入此文件,因为我想创建自己的简单路由 API 类。

这是我试图开始工作的代码:

import express from 'express'
import Router from './Router.js'

const app = express()

import '../../src/routes/index.js'
// import('../../src/routes/index.js')

console.log(Router.routes)

app.listen(3000, function () {
    console.log(`App listening on http://localhost:3000`)
})

这有效:

import '../../src/routes/index.js'
// console.log(Router.routes) has the routes!

这不起作用:

import('../../src/routes/index.js')
// console.log(Router.routes) is empty!

我需要第二个示例才能工作,因为我想从routes 目录中动态导入一堆文件。如何使用 import() 语法让它工作?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    动态导入返回一个Promise,在运行依赖于导入模块的任何代码之前,您需要等待(在async 函数中使用await 或通过调用then)。

    import express from 'express'
    import Router from './Router.js'
    
    const app = express()
    
    import('../../src/routes/index.js').then(function () {
        console.log(Router.routes)
    
        app.listen(3000, function () {
            console.log(`App listening on http://localhost:3000`)
        })
    });
    

    【讨论】:

    • 谢谢实际上只是在import() 修复它之前添加await 但你让我走上了正确的道路:)
    猜你喜欢
    • 1970-01-01
    • 2013-02-26
    • 2019-03-23
    • 2019-10-31
    • 2021-02-03
    • 1970-01-01
    • 2019-09-28
    • 2019-01-01
    • 2013-01-02
    相关资源
    最近更新 更多