从0开始搭建vue+webpack脚手架(三)
在从0开始搭建vue+webpack脚手架(二)中已经基本完成了开发环境的配置。当开发完成后,我们需要将完成的项目进行打包,接下来对打包做一些优化:
运行 $ npm run build 可生成dist目录

可以看到 01.jpg被存放在 images目录下, 并且后面生成一串不固定的字符串, 这是由之前的 rules配置的 name: 'images/[name]-[hash:8].[ext]' 产生的,
同样 bundle后面的字符串也是由 filename: "scripts/bundle.[hash:8].js"生成的
六、对CSS进行分离打包
在之前的开发环境下,我们都尽可能将图片和CSS都添加到bundle.js中,但是在完成开发后打包项目,我们需要将CSS文件单独分离出来。
1. 安装分离插件 ExtractTextWebpackPlugin, 使用webpack4.x的必须加 @next, 它会下载到extract-text-webpack-plugin@4.0.0-beta.0 , 否则打包时会有如图报错:
npm install --save-dev extract-text-webpack-plugin@next

当然,在最新的webpack版本中,也可以使用 mini-css-extract-plugin 功能和 extract-text-webpack-plugin相似
2. 修改之前配置中 css和style的rules
省略代码...
const ExtractTextPlugin = require('extract-text-webpack-plugin') const config = {
# 省略代码...
module: {
rules: [
{
test: /\.vue$/,
use: [
...
]
},
{
test: /\.jsx?$/,
loader: "babel-loader"
},
## 原来的css和stylus分为isDev环境和非isDev环境下配置
{
test: /\.(jpg|jpeg|gif|png|svg)$/,
use: [
...
]
}
]
},
plugins: [
...
]
} if (isDev) {
config.mode = 'development'
34 config.module.rules.push( // 开发环境的配置,不需要提取,与之前的相同
35 {
36 test: /\.css$/,
37 use: ['style-loader', 'css-loader']
38 },
39 {
40 test: /\.styl(us)?$/,
41 use: [
42 'style-loader',
43 'css-loader',
44 {
45 loader: "postcss-loader",
46 options: {
47 sourceMap: true
48 }
49 },
50 'stylus-loader',
51 ]
52 },
53 )
config.devServer = {
...
}
config.plugins.push(
...
)
} else {
config.output.filename = 'scripts/bundle.[chunkhash:8].js' // 打包时使用chunkhash ,之前开发时使用hash或者使用文件名本身亦可
config.module.rules.push(
{
test: /\.css$/,
65 use: ExtractTextPlugin.extract({
66 fallback: 'style-loader',
67 use: ['css-loader']
68 })
},
{
test: /\.styl(us)?$/,
72 use: ExtractTextPlugin.extract({
73 fallback: 'style-loader',
74 use: [
75 'css-loader',
76 {
77 loader: "postcss-loader",
78 options: {
79 sourceMap: true
80 }
81 },
82 'stylus-loader',
83 ]
84 })
},
)
87 config.plugins.push(
88 new ExtractTextPlugin('style.[hash:8].css')
89 )
} module.exports = config
由以上修改的代码中看出:
(1)在开发环境中不用分离CSS代码, 打包时才使用 ExtractTextPlugin插件分离
(2)编译时使用ExtractTextPlugin的extract方法, 最后用style.[hash:8].css文件输出
(3)打包时使用chunkhash输出文件, 与hash的区别在于,hash是整个应用的文件一样,而chunkhash是每个文件都不一样
(4)运行打包结果如下 : 多出了style.[hash].css文件

七、单独打包类库文件(vue框架及第三方包)
原因:此类库的代码稳定性较高,而项目的业务代码经常需要更新迭代,为了让浏览器能更长时间缓存静态的类库文件,防止类库代码随着业务代码的更新而更新。类库的代码如果能长时间缓存在浏览器中,在项目运行时就不用每次都重新加载,达到减少服务器流量和用户加载更快。
在 else部分添加以下代码:
config.entry = {
app: path.join(__dirname, 'src/index.js'),
vendor: ['vue']
}
config.plugins.push(
new ExtractTextPlugin('style.[hash:8].css'),
// new webpack.optimize.CommonsChunkPlugin() 在webpack4中已废弃, 使用SplitChunksPlugin
// new webpack.optimize.SplitChunksPlugin({
// name: 'vendor'
// }),
)
config.optimization = {
splitChunks: {
name: 'vendor'
},
runtimeChunk: {
name: 'runtime'
}
}
打包后如下:


如上新增三个选项属性
vendor: ['vue'] ------ 表示 将vue, vue-router, vuex等第三方包单独打包
optimization.splitChunks ----- 表示对应vendor打包输出的文件
optimization.runtimeChunk ------ 表示 将app.js中webpack部分的代码分离打包出来
总结:
1. webpack在项目中使用需要分别配置两种环境,即开发环境和生产环境。在开发环境中使用webpack-dev-server和热更新模块HotModuleReplacementPlugin搭配,让数据在不刷新浏览器的情况下改变。在开发环境无需配置压缩代码, 而在生产环境可以使用UglifyJsPlugin对代码压缩。
2. 使用相关loader编译css,js和文件, 编译es6语法
3. devServer选项是在开发环境使用,可以配置热更新,本地域名端口等
4. 使用 ExtractTextPlugin插件对打包文件中的css代码分离出来,注意webpack4 和 webpack3 不用的安装方式。在最新版本的4.x中已经可以使用mini-css-extract-plugin来代替。
5. 使用 CommonsChunkPlugin将第三方类库如vue 等静态代码单独打包可以让浏览器长缓存,在webpack4.x中已经废弃,使用
optimize.SplitChunksPlugin, optimize.RuntimeChunkPlugin或者 optimization.splitChunks, optimization.runtimeChunk替代。
从0开始搭建vue+webpack脚手架(三)的更多相关文章
- 从0开始搭建vue+webpack脚手架(二)
接着从0开始搭建vue+webpack脚手架(一) 三.配置webpack-dev-server 1. webpack-dev-server自带一个node的服务器, 项目在服务端运行的同时可以实现热 ...
- 从0开始搭建vue+webpack脚手架(四)
之前1-3部分是webpack最基本的配置, 接下来会把项目结构和配置文件重新设计,可以扩充更多的功能模块. 一.重构webpack的配置项 1. 新建目录build,存放webpack不同的配置文件 ...
- 从0开始搭建vue+webpack脚手架(一)
基于多数情况下都是使用vue-cli初始化项目, 却始终未去了解其原理.从零开始搭建,可以让自己更深层次的理解框架. 首先从最基本的npm 开始, 至于安装npm 和 node就不用再赘述了,那是前端 ...
- windows环境下搭建vue+webpack的开发环境
前段时间一直在断断续续的看vue的官方文档,后来就慢慢的学习搭建vue的开发环境,已经有将近两周了,每到最后一步的时候就会报错,搞的我好郁闷,搁置了好几天,今天又接着搞vue的开发环境,终于成功了.我 ...
- windows下搭建vue+webpack的开发环境
1. 安装git其右键git bash here定位比cmd的命令行要准确,接下来的命令都是利用git bash here.2. 安装node.js一般利用vue创建项目是要搭配webpack项目构建 ...
- element-ui和npm、webpack、vue-cli搭建Vue项目
一.element-ui的简单使用 1.安装 1. npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用. npm i element-ui -S 2. CDN ...
- 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)
摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...
- Vue.js+vue-element搭建属于自己的后台管理模板:更深入了解Vue.js(三)
前言 上一章我们介绍了关于Vue实例中一些基本用法,但是组件.自定义指令.Render函数这些放到了本章来介绍,原因是它们要比前面讲的要难一些,组件是Vue.js最核心的功能,学习使用组件也是必不可少 ...
- 简单vue项目脚手架(vue+webpack2.0+vuex+vue-router)
github地址 使用技术栈 webpack(^2.6.1) webpack-dev-server(^2.4.5) vue(^2.3.3) vuex(^2.3.1) vue-router(^2.5.3 ...
随机推荐
- opencv模板匹配有趣的链接
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matchi ...
- ArcEngine利用索引获取图层
近期在做GP工具相关的功能,需要获取到图层并用ComboBox列出,比如图层更新: 开始用了根据图层名获取图层,但这样有个弊端,遇到不同文件夹的相同图层名称的图层gg了.本来想利用图层名+路径来区分, ...
- 转:JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )
原文地址:JVM 内存初学 (堆(heap).栈(stack)和方法区(method) ) 博主推荐 深入浅出JVM 这本书 先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap).栈( ...
- Python接口自动化【requests处理Token请求】
首先说一下使用python模拟登录或注册时,对于带token的页面怎么登录注册模拟的思路: 1.对于带token的页面,需要先从最开始的页面获取合法token 2.然后使用获取到的合法token进行后 ...
- Java设计模式之模板模式及使用场景
模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义了模板,我们的剩余工作就是对其进行充实.丰润,完善它的不足之处. 定义模板采用抽象类 ...
- 【Mock】【接口测试】【面试】mock-server 环境搭建—加分项!
mock-server 环境搭建 前言 mock 除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的需要服务端提供 API 接口 此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发 ...
- 前端 HTML form表单标签 input标签 type属性 重置按钮 reset
input type="reset" value="重置" reset重置 还原到默认状态 <!DOCTYPE html> <html lan ...
- dedecms标签(tags)页面伪静态设置
我们在创建文章的时候经常会设置一些tags,如果发表文章时关键词没添加的话tags也会自动成为文章的关键词,tags是一个不错的功能,通过关键词链接可以快速寻找到相关内容,但是标签页面的url经常会带 ...
- 云计算概述及Centos7下安装kvm虚拟机
云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源 云计算到底是什么? 按定义:云计算指的是一种使用模式,是基 ...
- php循环方法实现先序、中序、后序遍历二叉树
二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). <?php class Node { public $v ...