代码分割

395 阅读1分钟

代码分割的意义:在大型项目中,将所有的代码都打包在一起是不现实的,所以我们要将不同功能的代码拆分打包,并且在需要的时候才加载。

比如,我们项目的菜单栏有多个子项,我们想在访问一个子项的时候,其他子项页面的资源不加载,只有访问的时候才加载,这个时候就需要将代码进行分割。

一、适用的场景

  • 将公共代码进行抽离(juejin.cn/post/700704… 这个文章中讲过)。

  • 代码懒加载,使初次加载的资源很小。

二、js脚本懒加载的方式

有两种:

  • 使用CommonJS的require.ensure()。

  • 使用es6的动态import(原生没有支持,所以要使用babel进行转义)。

那么什么是es6的动态的import?有动态的import,就有静态的import。

我们经常在代码顶部使用 import Search from 'search';这种引入的方式叫做静态的import

使用import('./src/search/index.js')这样引入的叫做动态的import

比如我们可以为项目配置,当路由触发时才使用动态的import加载对应的组件,这样就是减少了首次加载的资源的大小,节省了加载时间。

三、使用动态import

动态import这么优秀,那我们要怎么使用呢?

动态import原生是不支持的,所以我们要使用@babel/plugin-syntax-dynamic-import插件对代码进行转义。

使用yarn add @babel/plugin-syntax-dynamic-import安装。

.babelrc文件的配置:

{  "presets": ["@babel/preset-env", "@babel/preset-react"],  "plugins": ["@babel/plugin-syntax-dynamic-import"]}

plugins中增加 @babel/plugin-syntax-dynamic-import。

之后再项目中使用即可,比如在路由加载的时候,使用import动态加载打包好的组件。