react-loadable

严元白
2023-12-01
Demo1:
import React from 'react'
import style from  './demo1.less'
import _ from 'lodash'
class Demo1 extends React.Component{
    constructor(props){
        super(props)
    }
    render(){
        console.log(style)
        return (
            <div className={style.box}>
                我是demo1
                <div className={style['box-a']}>
                    aaaa
                    <div className={style['box-a-b']}>
                        ddddd
                    </div>
                    <div className={style['box-a-c']}>
                        cccc
                    </div>
                    <div className={style['box-a-d']}>
                        dddd
                    </div>
                    <img width="100" height="100" src={require('../images/red.png')} />
                    <img width="100" height="100" src={require('../images/eye.png')} />
                </div>
            </div>
        )
    }
}
export default Demo1

index:
import React from 'react';
import loadable from './utility/loadable'
import style from './App.css';
const Demo1 = loadable(()=>import('./demo1/demo1'))
const Demo2 = loadable(()=>import('./demo2/demo2'))
class App extends React.Component {
  constructor(props){
    super(props)
    this.state={
      show:false
    }
  }
  showDemo2=()=>{
    this.setState({
      show:true
    })
  }
  render(){return (
    <div className={style.App}>
      <header className={style.header}>
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a 
          onClick={this.showDemo2}
          className={style.link}
        >
          Learn React
        </a>
        {this.state.show&&<><Demo1 />
        <Demo2 /></>}
      </header>
    </div>
  )}
}

export default App;

动态引入Demo1时,Demo.js会被单独打包到一个文件,不会打包到main.js中,而且Demo1中引入的Lodash也会单独打包到一个文件中,不会与其他nodemodules达到到一起。如果index中也引入lodash,那么Demo1中的lodash就会和其他的nodemodules打包到一起。
就是说,动态加载的文件中引入的第三方库,如果在其他非动态组件中没有引入,那么就会单独打包成一个文件,不会同其他第三方库打包在一起。如果其他非动态组件中也引入的有这个第三方库,那么这个第三方库就会和其他第三库库打包在一起。如果多个动态加载的组件中都引入了同一个第三方库,那么这个第三方库只会打包一次,且也是单独打包成一个文件。
webpack会自动将 react-loadable中的文件单独打包成一个独立文件,我们不需要在webpack中做配置,与splitchunks无关。

 类似资料: