webpack进阶篇(二十三):代码分割和动态import

简介: webpack进阶篇(二十三):代码分割和动态import

说明

玩转webpack课程学习笔记。



代码分割的意义


对于⼤的 Web 应⽤来讲,将所有的代码都放在⼀个⽂件中显然是不够有效的,特别是当你的

某些代码块是在某些特殊的时候才会被使⽤到。


webpack 有⼀个功能就是将你的代码库分割成 chunks(语块),当代码运⾏到需要它们的时候再进⾏加载。


适⽤的场景:


  • 抽离相同代码到⼀个共享块
  • 脚本懒加载,使得初始下载的代码更⼩


20200706213409817.png


懒加载 JS 脚本的⽅式


CommonJSrequire.ensure

ES6:动态 import(⽬前还没有原⽣⽀持,需要 babel 转换)


如何使⽤动态 import


1、安装 babel 插件

npm install @babel/plugin-syntax-dynamic-import --save-dev


2、ES6:动态 import(⽬前还没有原⽣⽀持,需要 babel 转换)

{
  "plugins": ["@babel/plugin-syntax-dynamic-import"],
  ...
}




代码分割的效果

20200706213425327.png



例子


1、先安装依赖插件,并且配置

2、在search文件夹里添加text.js文件

import React from 'react';
export default ()=> <div>动态 import</div>


3、修改search文件夹里index.js文件,添加点击事件动态加载text.js

import React from 'react';
import ReactDOM from 'react-dom';
import './search.less';
import logo from './images/logo.png';
console.log(logo);
import '../../common/index.js';
import { kaimo666 } from './tree-shaking.js';
class Search extends React.Component {
  constructor() {
    super(...arguments);
    this.state = {
      Text: null
    }
  }
  loadComponent() {
    // 动态加在text.js,返回一个promise
    import('./text.js').then((Text) => {
      console.log(Text);
      this.setState({
        Text: Text.default
      });
    })
  }
  render() {
    const kaimo = kaimo666();
    const { Text } = this.state;
    return <div className="search-text">
      { kaimo }
      凯小默的博客666
      { Text ? <Text /> : null }
      <img src={ logo } onClick={ this.loadComponent.bind(this) } />
    </div>
  }
}
ReactDOM.render(
  <Search/>,
  document.getElementById('root')
)



4、打包效果

20200706213459744.png

5、浏览器效果

20200706213513797.png



目录
相关文章
|
3月前
|
JavaScript 前端开发 UED
如何配置 Webpack 进行代码分离?
通过以上方法,可以有效地配置Webpack进行代码分离,根据项目的具体需求和场景选择合适的方式,能够显著提高应用的性能和用户体验。在实际应用中,还可以结合其他优化技术,进一步优化Webpack的打包结果和应用的加载速度。
95 5
|
3月前
|
缓存 JavaScript 前端开发
配置 Webpack 进行代码分离的常见方法有哪些?
通过以上常见方法,可以根据项目的具体需求和场景,灵活地配置Webpack进行代码分离,从而提高应用的性能和加载速度,优化用户体验。
56 3
|
5月前
|
前端开发 JavaScript UED
除了 Webpack,还有哪些工具可以进行代码分割?
除了 Webpack,还有哪些工具可以进行代码分割?
|
5月前
|
UED
如何通过 Webpack 实现代码分割?
如何通过 Webpack 实现代码分割?
166 0
|
9月前
|
前端开发
【专栏】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译
【4月更文挑战第29天】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译。通过配置键值对,如 `ENV: JSON.stringify(process.env.NODE_ENV)`,可以在代码中根据环境执行相应逻辑。实际应用包括动态加载资源、动态配置接口地址和条件编译优化代码。注意变量定义的合法性和避免覆盖,解决变量未定义或值错误的问题,以提升开发效率和项目质量。
423 3
|
9月前
说说webpack中代码分割如何实现?
说说webpack中代码分割如何实现
70 0
|
9月前
|
前端开发 JavaScript
《Webpack5 核心原理与应用实践》学习笔记-> webpack代码压缩
《Webpack5 核心原理与应用实践》学习笔记-> webpack代码压缩
211 0
|
缓存 前端开发 JavaScript
学会用Webpack搭建开发环境并打包代码
学会用Webpack搭建开发环境并打包代码
161 0
学会用Webpack搭建开发环境并打包代码
|
JavaScript 前端开发
vue+webpack项目动态设置页面title的方法
vue+webpack项目动态设置页面title的方法
|
前端开发
Webpack5 系列(七):代码分离2
Webpack5 系列(七):代码分离2
105 0