代码之家  ›  专栏  ›  技术社区  ›  Nelson Owalo

ES6类函数中的导入模块

  •  1
  • Nelson Owalo  · 技术社区  · 6 年前

    我已将项目迁移到ESM,因此在nodejs中的所有文件中都使用了.mjs。

    在CommonJs中,我可以在ES6类函数的中间需要一个文件来加载它 只有 需要的时候。

     module.exports = class Core{
        constructor() {
            this.init = this._init.bind(this)
    
            return this.init()
        }
    
        async _init(){
            const module = require('module')
    
            //use required file/module here
        }
    }
    

    但现在使用迈克尔杰克逊的剧本 .mjs ,我无法按需导入文件:

         import Koa from 'koa'
    
         export default = class Core{
            constructor() {
                this.init = this._init.bind(this)
    
                return this.init()
            }
    
            async _init(){
                import module from 'module'
    
                //use imported file/module here
            }
        }
    

    我的应用程序有许多文件/模块没有立即使用,将来还可以添加更多文件/模块,因此在文件开始时硬编码导入不是一个选项。

    有没有办法在需要时根据需要动态导入文件?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Nelson Owalo    6 年前

    稍微修改一下 this 答:我设法通过以下途径让它工作:

    import Koa from 'koa'
    
         export default = class Core{
            constructor() {
                this.init = this._init.bind(this)
    
                return this.init()
            }
    
            async _init(){
                const router = await import('./Router')
    
                //use imported file/module here
            }
        }
    

    或者你可以用一个承诺,如果你喜欢:

       import('./router')
        .then(something => {
           //use imported module here
        });
    

    这件适合我,如果最终确定并装运的话