有时我们在导入文件之前并不知道文件的名称。或者我们在执行代码到一半的时候才需要导入一个文件,我们可以使用动态导入在代码中的任何位置导入模块。之所以称之为 "动态",是因为导入的路径可能是不确定的,可以是字符串变量也可以是字符串表达式,而不像静态导入那样必须是一个字符串字面量。
由于 ES 模块是异步的,所以模块不会立即可用。我们必须等待它被加载后才能对它做事情。正因为如此,动态导入会返回一个解析模块的 Promise。
async function createFruit(fruitName) { try { const FruitClass = await import(`./${fruitName}.js`) } catch { console.error('Error getting fruit class module:', fruitName) } return new FruitClass() } 总结ES 导出的内容可以是值(包括变量和字面量)也可以是类和函数的声明,从导出方式上可以分为默认导出、命名导出和聚合导出。根据不同的导出方式,导入可以分为默认导入、命名导入、副作用导入和动态导入。命名导出和导入均可以使用 as 指定别名。导出和静态导入必须在文件的最外层,动态导入可以在代码的函数中异步完成。