web优化 之 模块化引入

本文Demo的完整工程代码, 参考import-as-required-antd / import-as-required-lodash / import-as-required-date-fns

目录

antd

开始

dva new import-as-required-antd
npm run build
File sizes after gzip:

  88.61 KB  dist/index.js
  316 B     dist/index.css

全部引入

cnpm i --save antd
vim src/routes/IndexPage.js
import React from 'react';
import { connect } from 'dva';
import { Button } from 'antd';
import styles from './IndexPage.css';

function IndexPage() {
  return (
    <div className={styles.normal}>
      <Button>Antd Button</Button>
    </div>
  );
}

IndexPage.propTypes = {
};

export default connect()(IndexPage);
npm run build
File sizes after gzip:

  397.95 KB  dist/index.js
  316 B      dist/index.css

模块化引入

vim src/routes/IndexPage.js
import React from 'react';
import { connect } from 'dva';
import Button from 'antd/lib/button';
import 'antd/lib/button/style';
import styles from './IndexPage.css';

function IndexPage() {
  return (
    <div className={styles.normal}>
      <Button>Antd Button</Button>
    </div>
  );
}

IndexPage.propTypes = {
};

export default connect()(IndexPage);
npm run build
File sizes after gzip:

  90.51 KB  dist/index.js
  10.1 KB   dist/index.css

优化

npm i babel-plugin-import --save-dev
vim .roadhogrc
{
  "entry": "src/index.js",
  "env": {
    "development": {
      "extraBabelPlugins": [
        "dva-hmr",
        "transform-runtime",
        ["import", { "libraryName": "antd", "style": "css" }]
      ]
    },
    "production": {
      "extraBabelPlugins": [
        "transform-runtime",
        ["import", { "libraryName": "antd", "style": "css" }]
      ]
    }
  }
}
vim src/routes/IndexPage.js
import React from 'react';
import { connect } from 'dva';
import { Button } from 'antd';
import styles from './IndexPage.css';

function IndexPage() {
  return (
    <div className={styles.normal}>
      <Button>Antd Button</Button>
    </div>
  );
}

IndexPage.propTypes = {
};

export default connect()(IndexPage);
npm run build
File sizes after gzip:

  90.51 KB  dist/index.js
  10.1 KB   dist/index.css

关于babel-plugin-import详细介绍 参考ant-design/babel-plugin-import

lodash

开始

dva new import-as-required-lodash
npm run build
File sizes after gzip:

  88.61 KB  dist/index.js
  316 B     dist/index.css

全部引入

cnpm i --save lodash
vim src/routes/IndexPage.js
import React from 'react';
import { connect } from 'dva';
import _ from 'lodash';
import styles from './IndexPage.css';

function IndexPage() {
  const r = _.indexOf(['hello', 'world'], hello);
  console.log('lodash: ', r);

  return (
    <div className={styles.normal}>
      <h1 className={styles.title}>Yay! Welcome to dva!</h1>
      <div className={styles.welcome} />
      <ul className={styles.list}>
        <li>To get started, edit <code>src/index.js</code> and save to reload.</li>
        <li><a href="https://github.com/dvajs/dva-docs/blob/master/v1/en-us/getting-started.md">Getting Started</a></li>
      </ul>
    </div>
  );
}

IndexPage.propTypes = {
}; 

export default connect()(IndexPage);
npm run build
File sizes after gzip:

  112.62 KB  dist/index.js
  316 B      dist/index.css

模块化引入

vim src/routes/IndexPage.js
import React from 'react';
import { connect } from 'dva';
import array from 'lodash/array';
import styles from './IndexPage.css';

function IndexPage() {
  const r = array.indexOf(['hello', 'world'], 'hello');
  console.log('lodash: ', r);

  return (
    <div className={styles.normal}>
      <h1 className={styles.title}>Yay! Welcome to dva!</h1>
      <div className={styles.welcome} />
      <ul className={styles.list}>
        <li>To get started, edit <code>src/index.js</code> and save to reload.</li>
        <li><a href="https://github.com/dvajs/dva-docs/blob/master/v1/en-us/getting-started.md">Getting Started</a></li>
      </ul>
    </div>
  );
}

IndexPage.propTypes = {
};

export default connect()(IndexPage);
npm run build
File sizes after gzip:

  99.57 KB  dist/index.js
  316 B     dist/index.css

优化

cnpm i --save-dev babel-plugin-lodash
vim .roadhogrc
{
  "entry": "src/index.js",
  "env": {
    "development": {
      "extraBabelPlugins": [
        "dva-hmr",
        "transform-runtime",
        "lodash"
      ]
    },
    "production": {
      "extraBabelPlugins": [
        "transform-runtime",
        "lodash"
      ]
    }
  }
}
npm run build
File sizes after gzip:

  89.41 KB  dist/index.js
  316 B     dist/index.css

date-fns

开始

dva new import-as-required-date-fns
npm run build
File sizes after gzip:

  88.61 KB  dist/index.js
  316 B     dist/index.css

全部引入

cnpm i --save date-fns
vim src/routes/IndexPage.js
import React from 'react';
import { connect } from 'dva';
import { format } from 'date-fns';
import styles from './IndexPage.css';

function IndexPage() {
  return (
    <div className={styles.normal}>
      {format(new Date(2017, 6, 6), 'MM/DD/YYYY')}
      <h1 className={styles.title}>Yay! Welcome to dva!</h1>
      <div className={styles.welcome} />
      <ul className={styles.list}>
        <li>To get started, edit <code>src/index.js</code> and save to reload.</li>
        <li><a href="https://github.com/dvajs/dva-docs/blob/master/v1/en-us/getting-started.md">Getting Started</a></li>
      </ul>
    </div>
  );
}

IndexPage.propTypes = {
};

export default connect()(IndexPage);
npm run build
File sizes after gzip:

  96.04 KB  dist/index.js
  316 B     dist/index.css

模块化引入

vim src/routes/IndexPage.js
import React from 'react';
import { connect } from 'dva';
import format from 'date-fns/format';
import styles from './IndexPage.css';

function IndexPage() {
  return (
    <div className={styles.normal}>
      {format(new Date(2017, 6, 6), 'MM/DD/YYYY')}
      <h1 className={styles.title}>Yay! Welcome to dva!</h1>
      <div className={styles.welcome} />
      <ul className={styles.list}>
        <li>To get started, edit <code>src/index.js</code> and save to reload.</li>
        <li><a href="https://github.com/dvajs/dva-docs/blob/master/v1/en-us/getting-started.md">Getting Started</a></li>
      </ul>
    </div>
  );
}

IndexPage.propTypes = {
};

export default connect()(IndexPage);
npm run build
File sizes after gzip:

  91.46 KB  dist/index.js
  316 B     dist/index.css

优化

cnpm i --save-dev babel-plugin-date-fns
vim .roadhogrc
{
  "entry": "src/index.js",
  "env": {
    "development": {
      "extraBabelPlugins": [
        "dva-hmr",
        "transform-runtime",
        "date-fns"
      ]
    },
    "production": {
      "extraBabelPlugins": [
        "transform-runtime",
        "date-fns"
      ]
    }
  }
}
npm run build
File sizes after gzip:

  91.46 KB  dist/index.js
  316 B     dist/index.css

参考

更多文章, 请支持我的个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容