webpack dllPlugin使用(基于vue-cli webpack模板)
由于本例单入口时打包的文件体积过大,将其分成多入口。
主要涉及到的几个文件为:
/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
- 新建文件webpack.dll.config.js,可以放置在任意位置,只要将路径理清即可。本例以根目录示例:
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中增加:
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中使用:
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模板)的更多相关文章
- 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]
基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1] 原文:基于Vue JS, Webpack 以及Material Design的渐进式web应 ...
- 基于Vue 和 webpack的项目实现
Vue.js 是一款极简的 mvvm 框架,如果让我用一个词来形容它,就是 “轻·巧” .如果用一句话来描述它,它能够集众多优秀逐流的前端框架之大成,但同时保持简单易用.废话不多说,来看几个例子: & ...
- Vue CLI Webpack 创建Vue项目
简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还 ...
- 在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?
环境: 有2个业务接口需要转发到82的服务器上: ../user/getCode.do ../user/doLogin.do 现象: 使用上述的 ...
- 基于@vue/cli 的构建项目(3.0)
1.检测node的版本号 注意:1.Vue CLI需要Node.js的版本 8.9+(推荐8.11.0+) 所以在安装Vue CLI之前先看下node的版本 node -v 2.安装@vue/cli ...
- 基于vue cli 3.0创建前端项目并安装cube-ui
前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...
- 基于Vue cli生成的Vue项目的webpack4升级
前面的话 本文将详细介绍从webpack3到webpack4的升级过程 概述 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除 ...
- Vue.js——webpack
Vue.js——60分钟webpack项目模板快速入门 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开 ...
- 【非专业前端】vue+element+webpack
先点这里(- ̄▽ ̄)- 环境搭建 默认你已经安装了node.js 下面安装vue和webpack npm install -g @vue/cli npm install -g @vue/cli-ini ...
- Vue.jsbrowserify项目模板
Vue.js——60分钟browserify项目模板快速入门 概述 在之前的一系列vue.js文章,我们都是用传统模式引用vue.js以及其他的js文件的,这在开发时会产生一些问题. 首先,这限定 ...
随机推荐
- 在C#中,Newtonsoft.Json + dynamic动态解析jsonString,jsonString转实体
记录一下 引用 using Newtonsoft.Json; using Newtonsoft.Json.Linq; var jsonString = "{\"ApiResourc ...
- Kafka笔记5(内部工作原理)
集群成员关系: Kafka使用zookeeper维护集群成员信息,每个broker拥有唯一标识符,这个标识符可以在配置文件里指定也可以自动生成,会注册到Zookeeper的/brokers/ids路径 ...
- cookie小结
cookie的用处:当不同的用户访问同一家网站时(采用相同的请求地址),服务器如何区分不同用户的请求操作呢?需要浏览器对发出的每个请求进行标识.属于同一个会话的请求,都带有相同的标识,不同的会话带有不 ...
- MySql 版本
MySql 版本: netformwork 2.0 netformwork 4.0
- .Net与 WebAssembly 随笔
WebAssembly 是啥 - WebAssembly 是一种浏览器支持的字节码格式,WebAssembly 字节码和底层机器码很相似可快速装载运行,因此性能相对于 JS 解释执行大大提升,需要放到 ...
- IIS + FastCGI+php(从5.2升级到5.3)
由于PHP5.3 的改进,原有的IIS 通过isapi 方式解析PHP脚本已经不被支持,PHP从5.3.0 以后的版本开始使用微软的 fastcgi 模式,这是一个更先进的方式,运行速度更快,更稳定. ...
- sys模块
#python run_case.py #在terminal中执行.py文件 在terminal中执行.py文件: 注: 无法使用terminal来打开那个文件 会显示如下:python: can't ...
- 关于weblogic部署Java项目的包冲突问题
我们可能会用各种应用服务部署我们的Java应用,比如Tomcat.WAS.weblogic等.Tomcat和WAS可能会比较少遇到一些奇怪的问题,但是用weblogic部署项目则经常遇到一些比如包冲突 ...
- java线程学习之notify方法和notifyAll方法
notify(通知)方法,会将等待队列中的一个线程取出.比如obj.notify();那么obj的等待队列中就会有一个线程选中并且唤醒,然后被唤醒的队列就会退出等待队列.活跃线程调用等待队列中的线程时 ...
- vue父组件给子组件传值:属性的形式
1.父组件怎么传值 2.子组件怎么接受值:依赖props 父页面定义的参数接收返回值,到子组件依旧用定义好的参数,在定义参数的类型,然后渲染数据