webpack3基础知识
## 本地化安装webpack ##
1. npm init //npm初始化生成package.json文件
2. npm install --save-dev webpack //安装webpack,dev表示安装到开发环境,save表示本地安装
3. 如果是老项目,有package.json文件,直接运行npm i 安装对应的依赖包
## webpack快速打包 ##
webpack src/entery.js dist/bundle.js
//将entery.js打包到bundle.js
如果有配置文件,直接运行webpack即可
## package.json ##
{
"name":"webpacktest",
"version":"1.0.0",
"description":"test webpack",
"main":"index.js",
"scripts":{ //本地npm启动命令:npm run xxxx
"server":"webpack-dev-server --open",
//open表示自动打开
"build":"set type=build&webpack", //node语法,传递参数
"dev":"set type=dev&webpack" //mac或linux:export type=dev&&webpack
},
"author":"tabb",
"license":"ISC",
"devDependencies":{ //开发依赖 --save-dev
"webpack":"^3.6.0",
"webpack-dev-server":"^2.8.2"
},
"dependencies":{ //生产依赖 --save 'npm install --production'(项目上线只安装生成包)
}
}
## webpack config ##
配置文件webpack.config.js
const glob=require("glob"); //引入全局控制插件
const path=require('path'); //引入路径模块
const uglify=require('uglify-webpack-plugin'); //引入js代码自动压缩模块
const htmlPlugin=require('html-webpack-plugin'); //引入html打包插件
const extractTextPlugin=require('extract-text-webpack-plugin'); //引入文件分离插件
const purifyCSSPlugin=require("purfiycss-webpack"); //引入css冗余删除插件
const copyWebpackPlugin=require("copy-webpack-plugin"); //引入静态资源处理
//根据配置传值,打包出不同的根目录,区分生产环境和开发环境
if(process.env.type="build"){ //node语法
var website={
publicPath:"http://tabb.com/" //设置根路径
}
}else{
var website={
publicPath:"http://192.168.0.104/" //设置根路径
}
}
var website={
publicPath:"http://192.168.0.104/" //设置根路径
}
module.exports={
entry:{ //入口文件路径
entry1:'./src/entry1.js',
entry2:'./src/entry2.js',
jquery:'jquery',
vue:'vue'
},
output:{ //出口文件
path:path.resolve(__dirname,'dist'),
filename:'bundle.js' //可写[name],js保持与入口文件名一致
publicPath:website.publicPath //设置项目引用的公共路径
},
module:{
rules:[ //css打包
{
test:/\.css$/, //正则匹配对应需要处理的文件
use:['style-loader','css-loader'] //添加打包需要使用的功能模块
//也可以写成如下形式
use:[{
loader:'style-loader'
},{
loader:'css-loader'
},
"postcss-loader" //css3自动加前缀
],
//extract抽离处理
use:extractTextPlugin.extract({
fallback:"style-loader",
use:"css-loader"
})
},
{
test:/\.(png|jpg|gif)/, //处理图片
use:[
{
loader:'url-loader',
boptions:{
limit:5000 //设置图片小于多大显示为base64编码
outputPath:"images/" //配置图片生成路径
}
}
]
},
{ //处理html中image标签引用图片
test:/\.(htm|html)$/i,
use:['html-withimg-loader']
},
{ //处理less文件
test:/\.(htm|html)$/i,
use:[
{
loader:"style-loader"
},{
loader:"css-loader"
},{
loader:"less-loader"
}
]
},
{ //babel配置
test:/\.(jsx|js)$/,
use:{
loader:"babel-loader",
options:{
presets:["es2015","react"]
}
},
exclude:/node_modules/
}
]
},
plugins:[
new copyWebpackPlugin({ //处理静态资源
from:__dirname + "/src/public", //静态资源来源
to:"./public" //默认到dist目录下
}),
new webpack.optimize.CommonsChunkPlugin({ //配置第三方插件抽离打包
name:['jquery','vue'], //对应入口配置entry中的key
filename:"assets/js/[name].[ext]", //配置输出路径,可将[ext]改为js,[name]自动匹配配置的名称
minChunks:2
})
new webpack.ProvidePlugin({
$:"jquery"
}),
new uglify(), //开发环境会报错,因为开发环境代码100%不压缩
new htmlPlugin({
minify:{ //配置压缩条件
removeAttributeQuotes:true //去除标签中的引号
},
hash:true, //给引入的js添加hash,保证加载新文件,防止缓存
template:'./src/index.html'
}),
new extractTextPlugin("/css/index.css"), //指定css分离打包路径
new purifyCSSPlugin({
paths:glob.sync(path.join(__dirname,'src/*.html')) //全局搜索html文件中的dom,找到有效的css
}),
new webpack.BannerPlugin("tabb版权所有") //设置打包文件的title注释
],
devServer:{ //开发服务配置,需要安装webpack-dev-server
contentBase:path.resolve(__dirname,'dist'), //基本目录结构
host:'192.168.0.104', //服务器host
compress:true, //服务器是否启用压缩
port:1717 //端口
},
watchOptions:{ //自动监测watch打包配置
poll:1000, //监测修改的时间
aggregeateTimeout:500, //表示500ms内重复按键ctrl+s不进行打包
ignored:/node_modules/, //忽略监视项
}
}
## babel配置文件,babelrc ##
{
presets:["env","react"] //env转换es6,es7等
}
## webpack中的工具安装 ##
1. webpack-dev-server //热更新工具
2. style-loader //样式处理
3. css-loader //css文件处理
4. uglify-webpack-plugin //js自动压缩插件
5. html-webpack-plugin //html打包插件
6. url-loader //处理路径
7. file-loader //处理加载文件
8. extract-text-webpack-plugin //抽离css等文件打包
9. html-withimg-loader //处理html中使用img标签引用图片
10. less less-loader //less编译
11. sass sass-loader //sass编译
12. postcss-loader autoprefixer //css3自动添加前缀依赖
13. purify-css purify-webpack //自动删除css冗余
14. babel-core babel-loader babel-preset-es2015 babel-preset-react babel-preset-env //babel用于编译es6等语法,以及react中的jsx
15. webpack.ProvidePlugin //统一配置引入插件
16. webpack.optimize.CommonsChunkPlugin //配置第三方插件抽离打包
17. copy-webpack-plugin //静态资源打包
webpack3基础知识的更多相关文章
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- (转载)深入super,看Python如何解决钻石继承难题
1. Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通方法和super方法 假设Base是基类 class Base(object): def __init_ ...
- web框架与爬虫
所有的web框架 http://www.cnblogs.com/wupeiqi/articles/5341480.html 爬虫技术 http://www.cnblogs.com/wupeiqi/ar ...
- Myeclipse报错-Java compiler level does not match 完美解决方法
从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description Resource Path Location Type Java compiler level d ...
- FJOI 2019 游记
(FJOI 2019 滚粗记) Day 0 早上刷了一些水题,然后就上路了. (画图3D好好玩) 来得晚只有十几分钟时间看考场,于是连试机题都没有Ak. Day 1 果然我还是太菜了 走过来的时候再讨 ...
- html5特效库
Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端.能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果. delaunay.js是一款能在图片中形成无数个三角形 ...
- 【多校联合】(HDU6045)Is Derek lying?
分析 之前没有想到题目解法,看了题解才会,记录一下思考过程. 这条题目的实质是,在满足合法的情况下,有没有a和d的可行解?也就是说,不要仅仅附在表面的思考逻辑条件,而是要思考实际的数学表达. 转化为数 ...
- zabbix从入门到精通
第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源 网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...
- pandas DataFrame行或列的删除方法
pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...
- BZOJ 2333 SCOI2011 棘手的操作 并查集+可并堆
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2333 ..题意概述就不写了,各位老爷如果是看着玩的可以去搜一下,如果是做题找来的也知道题干 ...
- Spring Boot学习(一):入门篇
目录 Spring Boot简介 Spring Boot快速搭建 1 新建项目 2 运行项目 3 设置spring boot可以热部署(修改后端代码后,自动部署,不用手动部署) 3.1:配置pom.x ...