JavaScript 动态import js文件(动态加载) 作者:马育民 • 2024-10-04 16:02 • 阅读:10011 # 为什么要动态加载 有些功能在另一个 `.js` 文件中,这些功能不是必须运行的,而是当用户触发时,才会运行 类似的,**动态加载** 也就是 **按需加载**,这样在需要的时候才会调用相应的文件,会从一定程度上提升应用的性能 ### 应用场景 支付功能,要对接 `支付宝`、`微信支付`、`银行支付`,但不是一定会运行的,当用户点击支付时,才 **动态加载** 相应的 **支付代码** # 实现 通过 `import()` 表达式实现,`import(module)` 表达式加载模块并返回一个 `Promise` ## 方式一 `import` 返回 `Promise`,然后通过 `then` 执行 ``` import('./xxx.js').then(module => { // 通过 module 调用 js文件中导出的方法 }) ``` #### 例子1 模块文件:`say.js`,代码如下: ``` export function hi() { alert(`Hello`); } export function bye() { alert(`Bye`); } ``` 动态 import 并调用方式1: ``` import('./say.js').then(module => { module.hi(); // Hello! module.bye(); // Bye! }) ``` #### 例子2 `say.js` 模块文件默认导出: ``` export default function() { alert("Module loaded (export default)!"); } ``` 动态 import 并调用 ``` import('./say.js').then(module => { module.default(); }) ``` ## 方式二 如果在异步函数中,可通过 `async/await` 实现 ``` const handle = async () => { let module = await import('./template/sharp.js'); // 通过 module 调用 js文件中导出的方法 } handle() ``` #### 例子1 模块文件:`say.js`,代码如下: ``` export function hi() { alert(`Hello`); } export function bye() { alert(`Bye`); } ``` 动态 import 并调用方式1: ``` async function load() { let module = await import('./say.js'); module.hi(); // Hello! module.bye(); // Bye! } load() ``` 动态 import 并调用方式2: ``` async function load() { let {hi, bye} = await import('./say.js'); hi(); bye(); } load() ``` #### 例子2 `say.js` 模块文件默认导出: ``` export default function() { alert("Module loaded (export default)!"); } ``` 动态 import 并调用 ``` async function load() { let module = await import('./say.js'); module.default(); } load() ``` 参考: https://zh.javascript.info/modules-dynamic-imports 原文出处:http://malaoshi.top/show_1IX8XspGYNSg.html