由于本例单入口时打包的文件体积过大,将其分成多入口。

主要涉及到的几个文件为:

/index.html,

/webpack.dll.config.js,

/build/webpack.base.conf.js,

/build/webpack.dev.conf.js,

/build/webpack.prod.conf.js

运行配置的dll命令如下:

webpack --config webpack.dll.config.js
  1. 新建文件webpack.dll.config.js,可以放置在任意位置,只要将路径理清即可。本例以根目录示例:
  2. const fs = require('fs')
    const path = require('path')
    const webpack = require('webpack') let vendors = [
    [
    'echarts',
    'echarts-wordcloud',
    'element-ui'
    ],[
    'vue/dist/vue.esm.js',
    'vue-echarts',
    'vue-js-modal',
    'vue-router',
    'vue-waterfall',
    'vuex'
    ]
    ] module.exports = {
    entry: {
    // 多入口,单入口情况,只需写一个,key值自定义,value值为数组
    vendor0: vendors[0],
    vendor1: vendors[1]
    },
    output: {
    path: path.join(__dirname, "static/dll"),
    filename: "[name].[chunkhash].dll.js",
    library: "[name]_[chunkhash]"
    },
    plugins: [
    new webpack.DllPlugin({
    path: path.join(__dirname, "dllManifest", "[name]-manifest.json"),
    name: "[name]_[chunkhash]",
    context: __dirname
    }),
    new webpack.optimize.UglifyJsPlugin({
    compress: {
    warnings: false
    }
    })
    ]
    }

    在/build/webpack.base.conf.js中增加:

  3.   plugins: [ 
       // 这是一个数组,单入口时只需填写一个对应的webpack.DllReferencePlugin实例
    // webpack.DllReferencePlugin可以帮助webpack得知哪些包是dll负责的,进而避免重复打包
    ...(function () {
    let max = 2
    let res = []
    for (let i = 0; i < max; i++) {
    res.push(new webpack.DllReferencePlugin({
    context: path.resolve(__dirname, '../'),
    manifest: require(resolve(`./dllManifest/vendor${i}-manifest.json`))
    }))
    }
    return res
    })()
    ]

    在/build/webpack.dev.conf.js,/build/webpack.prod.conf.js文件HtmlWebpackPlugin实例中添加dll属性,方便在index.html中使用:

  4.     new HtmlWebpackPlugin({
    filename: 'index.html',
    template: 'index.html',
    inject: true,
    // ----------------------------------------------------
    dll: (function () {
    let max = 2
    let res = []
    for (let i = 0; i < max; i++) {
    const dllName = require(path.resolve(__dirname, `.././dllManifest/vendor${i}-manifest.json`)).name.split('_')
    res.push(`/static/dll/${dllName[0]}.${dllName[1]}.dll.js`)
    }
    return res
    })()
    // ----------------------------------------------------
    })

    修改/index.html模板:

        <!-- 要注意文件注入的位置,以免其他js运行前,找不到相关依赖 -->
    <% for (let i of htmlWebpackPlugin.options.dll) { %>
    <script src="<%= i %>"></script>
    <% } %>

本次主要解决的问题是:每次代码改动重新打包花费时间过长的问题。

解决是通过webpack提供的DllPlugin完成,包括dll打包的js文件命名加上hash,以及避免每次打包需手动修改index.html模板的问题。

webpack dllPlugin使用(基于vue-cli webpack模板)的更多相关文章

  1. 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]

    基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1] 原文:基于Vue JS, Webpack 以及Material Design的渐进式web应 ...

  2. 基于Vue 和 webpack的项目实现

    Vue.js 是一款极简的 mvvm 框架,如果让我用一个词来形容它,就是 “轻·巧” .如果用一句话来描述它,它能够集众多优秀逐流的前端框架之大成,但同时保持简单易用.废话不多说,来看几个例子: & ...

  3. Vue CLI Webpack 创建Vue项目

    简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还 ...

  4. 在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?

    环境:            有2个业务接口需要转发到82的服务器上:     ../user/getCode.do     ../user/doLogin.do 现象:          使用上述的 ...

  5. 基于@vue/cli 的构建项目(3.0)

    1.检测node的版本号 注意:1.Vue CLI需要Node.js的版本 8.9+(推荐8.11.0+) 所以在安装Vue CLI之前先看下node的版本 node -v 2.安装@vue/cli ...

  6. 基于vue cli 3.0创建前端项目并安装cube-ui

    前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...

  7. 基于Vue cli生成的Vue项目的webpack4升级

    前面的话 本文将详细介绍从webpack3到webpack4的升级过程 概述 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除 ...

  8. Vue.js——webpack

    Vue.js——60分钟webpack项目模板快速入门 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开 ...

  9. 【非专业前端】vue+element+webpack

    先点这里(- ̄▽ ̄)- 环境搭建 默认你已经安装了node.js 下面安装vue和webpack npm install -g @vue/cli npm install -g @vue/cli-ini ...

  10. Vue.jsbrowserify项目模板

    Vue.js——60分钟browserify项目模板快速入门   概述 在之前的一系列vue.js文章,我们都是用传统模式引用vue.js以及其他的js文件的,这在开发时会产生一些问题. 首先,这限定 ...

随机推荐

  1. iOS 控制台po不出值

    本人这几天开发项目时在控制台用po命令打印时,发现总是打印不出来,这里将我的解决方案推荐给大家 方法一:(本人就是用该方法解决了问题的) 在控制台选择All Output 方法二: 按图中指示选择de ...

  2. 学习animation、transition、transform和@keyframes的使用

    当我们需要给页面添加动画效果时,需要用到CSS3的animation样式属性: 例如: animation: test 2s infinite; 其中test是动画的名称,2s是动画的时长,infin ...

  3. Python selenium中注入并执行Javascript语句

    众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...

  4. go语言生成一张正弦图

    先看效果: package main import ( "image" "image/color" "image/png" "lo ...

  5. Docker:从头开始基于CentOS-Minimal安装Docker

    基础环境:win10+vmware 14 一.CentOS-Minimal安装 虚拟机安装CentOS-Minimal的步骤不多说,网络选Net,硬件不需要的什么声卡打印机全都删掉没什么问题,然后ce ...

  6. 关于asp.net中链接数据库的问题

    学习了asp.net 有web服务器控件和C#代码两部分 那么在做页面时候,需要用到数据库和asp.net的链接 课本上只是说明了和SQL server的链接,本文介绍如何在.net中链接 Acces ...

  7. 前端学习历程--http与https

    一.CA(证书授权中心)证书 1.ca是通信的中介,具有足够的权威性 2.信任可嵌套如:C 信任 A1,A1 信任 A2,A2 信任 A3 二.根本区别 1.https需要基于ssl的ca证书认证(判 ...

  8. 【stm32开发之HAL采坑记之:001使用ST-LINK下载出错问题】

    使用ST-LINK下载出错问题 开发环境:swstm32+stm32cubeMx+硬石F1开发板 联系方式:yexiaopeng1992@126.com 出现问题:在使用ST-linik下载时发现,在 ...

  9. # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库

    使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...

  10. 20175208 张家华 MyOD

    一.实现目的: 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 二.功能简介 1.Linux下的od功能是将指定文件内容以八进制.十进制.十六进 ...