webpack打包优化

因为项目一直在加工能,每次打包之后都很慢,所以就要解决这个问题,我采用的方法如下,

一、使用DllPlugin 和DllReferencePlugin

       这两个插件我们不用安装,是webpack支持的,我们可以直接来使用,主要思想就是我们将依赖单独抽离出来,单独打包,然后将打包后的js文件引入到html中,利用manifest.json(生成)来映射。接下来说步骤

(1)建一个config.dll.js文件,文件内容如下

const webpack = require('webpack');
const path = require('path');

const lib = {
    entry: {
        "lib": [
            'react-hot-loader','react', 'react-dom', 'redux', 'react-router',             
            'antd'
        ],
    },
    output: {
        // 将会生成./ddl/lib.js文件
        path: path.join(__dirname,'../build/static/, "ddl"),
        filename: '[name].js',
        library: '[name]',
    },
    
    plugins: [
        new webpack.DllPlugin({
            context: __dirname,
            name: '[name]',
            path: path.join(__dirname,'../build/static/ddl/manifest.json'),
        }),
    ],
    module: {
        loaders:  [
            {
                test: /\.json$/,
                loaders: ['json-loader']
            }
        ]
    }
};
 module.exports = lib;

这个文件和webpack的规则一样,entry就是入口文件,outPut就是输出文件,这里是设置依赖打包后的路径和文件名,我们在入口文件上放上我们要抽离的依赖,plugin是配置生成manifest.json的生成路径。在这里我将依赖达成的包和manifest.json放在了同意目录ddl下面。我这里之所以要设置loaders,是因为一直保存,antd下的package.json不能解析。

创建完这个文件,我们可以执行webpack命令打包。也可以将打包命令写在package.json里面,这样比较方便。当我们执行完打包命令的时候,就会在我们指定的目录下面生成两个文件,一个是lib.js,这个是抽离出来的依赖,还有一个是manifest.json,这个是用来做映射用的,我们需要将此文件放在DllReferencePlugin,就是我们接下来要配置的

(2)配置完DllPlugin,再来配置DllReferencePlugin

new webpack.DllReferencePlugin({

        context: __dirname,

        manifest: require('./../build/static/ddl/manifest.json'),

    })

将这段代码放在webpack.config.js的plugin中,如果开发和线上是两个webpack文件的话,这段代码两个文件中国呢都要有,要注意写对manifest.json的路径。

(3)最后就是将我们抽离出来的依赖引入到html文件中,在这里,我们一定要注意路径,由于在服务器上,build文件夹是根目录,所以我们要将抽离出来lib.js放在build文件夹下。本地的话,我们的根目录根据devser.js中的contencBase,所以,我们设置路径的时候,要分别是开发还是正式。当然,如果根目录是一样的就无所谓了

<script src="./ddl/lib.js"></script>

到此为止,这两个插件就配好了,使用了这两个插件,不用打包依赖,打包速度将会提高很多

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值