webpack4.0入门配置文件
wepback风头正火 ,但是公司一直在用gulp,正好赶上年底活动,借此机会第一次尝试了webpack,说实话webpack真的很强大,内容一层一层递进。
这几天跟着官网跑了一遍,然后写了自己的配置文件,因为活动内容不多,很多强大的功能没有用上,但是相信对于入门来说足够了。
下面来总结并附上源码
当 webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
webpack支持的模块语法有哪些?
ES6,CommonJs,Amd
webpack和gulp的区别?
Webpack可以通过众多loader和plugin完成许多gulp上的功能,但Webpack本质在于模块打包,而gulp的本质在于执行任务;使用webpack-stream包可以实现gulp和webpack的搭配使用
核心概念
1.入口:指定使用哪个模块来作为构建内部依赖图的开始,随后打包成bundle
2.输出:定义输出生产的bundle的位置及文件名;
3.loader:让webpack可以处理非js模块;loader 可以将所有类型的文件转换为webpack 能够处理的有效模块。
4. 插件:执行的任务范围包括从打包优化和压缩,一直到重新定义环境中的变量,目的在于完成一些loader无法完成的任务。
常用配置项
1.mode: ‘development’|| ‘production’ || ‘none’
2.entry: array || obj
3.output: {
path: path.resolve(__dirname, "dist"), // 输出文件的目标路径
filename:’bundle.js’,// 打包后的文件名
publicPath: ‘static’// 输出解析文件目录,url相对于html
}
4.module: {
rules: [
{
test: /\.js$/, // 指定使用此loader的文件
use: ‘babel-loader’,
options: { },
include: /src/, // 匹配项
exclude: /node_modules/ // 非匹配项
}
]
}
5.plugins: […instance]
6.devServer: {
host: ‘localhost’,
port: ‘8080’,
contentBase: Boolean|| string || array, // 服务器从哪里获取内容
hot:boolean, // 是否开启webpack模块热替换
open: Boolean, // 是否自动打开浏览器
proxy: { path: targetUrl}, // 代理
…others
}
7.resolve: {
alias: {
test: url
},
extensions: [.js, .json]
}
8.devtool: string || false
可选值:
cheap-eval-source-map
eval-source-map
cheap-source-map
source-map
cheap-module-eval-source-map
…others
常用loader及plugin
loader
Css-loader:解析css中资源路径;
Sass-loader:sass转码为css
Postcss-loader:使webpack可以用postcss处理css
Px2rem-loader: px转换为rem
Style-loader:将css以style标签的形式插入到dom中
Babel-loader:转码js以提高兼容性
url-loader:图片转base64
webpack imagemin-webpack-plugin 压缩图片
file-loader:将文件输出到输出目录并返回文件路径
html-loader:处理html中资源路径
eslint-loader:使js支持eslint
plugin
html-webpack-plugin:根据模板导出html文件,并注入bundle
DinePlugin: 创建编译时可以进行配置的全局变量。
HashedModuleIdsPlugin: 根据模块的相对路径生成一个四位数的hash作为模块id
extract-text-webpack-plugin:分离css
mini-css-extract-plugin:分离css
uglifyjs-webpack-plugin:压缩js
optimize-css-assets-webpack-plugin:压缩css
clean-webpack-plugin: 清空某个目录
cli常用命令
--config 使用指定的配置文件
--env.key=value 指定环境变量
--mode=production 指定模式
--progress 打印编译进度的百分比
--display-error-details 展示错误细节
--define 定义环境变量
-w 观察文件变化,变化后重新执行构建流程
--hot 开启模块热替换
--json > stats.json 将编译结果的各种信息输出为json文件
--profile 捕获编译时每个步骤的时间信息
配置文件编写
前端常见需求:
1) Js压缩
2) Css压缩
3) Css提取
4) 小图片转base64
5) Px转rem
6) Css前缀添加
7) Sass转码
8) Babel转码
9) 文件名加hash
10) 文件编码格式转换(常见utf-8与gbk互转)
11) 代码分离
12) Eslint
13) 模块热替换
14) 配置编译过程的全局变量
15) 打包后的代码注入html中
1. 常用模块变量
__dirname:当前文件夹路径
2. 常用占位符
[hash]:模块标识符的hash(后拼接:‘:n’可指定长度)
[chunkhash]: chunk内容的hash(后拼接:‘:n’可指定长度)
[name]:模块名称
[id]: 模块标识符
3. 配置文件使用commonjs编写的,配置类型有下面几种:
1) 导出一个配置对象
2) 导出一个函数
3) 导出一个promise
代码分离
该功能可以把代码分离到不同的 bundle 中,然后可以按需加载或并行加载这些文件。代码分离可以用于获取更小的 bundle,以及控制资源加载优先级,如果使用合理,会极大影响加载时间。
代码分离的方式:
1.手动配置多个入口文件
2.使用webpack自带的splitChunks功能
3.使用import()动态导入
下面附上自己的web.config.js
webpack4.0入门配置文件的更多相关文章
- webpack4.0入门总结
1. 安装webpack: // 初始化.安装webpack以及webpack-clinpm init npm install --save-dev webpack webpack-cli 2.创建配 ...
- webpack4.0入门以及使用
1. 安装webpack 先新建一个文件夹(demos),然后 npm init -y 新建一个package.json然后在当前目录执行webpack命令 webpack 模块未发现或者未找到src ...
- ASP.NET Core 1.0 入门——Application Startup
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Omnet++ 4.0 入门实例教程
http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...
- 史上最走心webpack4.0中级教程——配置之外你应该知道的事
<webpack4.0各个击破系列>适合不满足于只会配置webpack但一时间又看不懂源码的中级读者.我没法保证这个系列是最好的,但至少能保证每一篇博文都跟那些Ctrl+C和Ctrl+V的 ...
- webpack4.0各个击破(4)—— Javascript & splitChunk
目录 一. Js模块化开发 二. Js文件的一般打包需求 三. 使用webpack处理js文件 3.1 使用babel转换ES6+语法 3.2 脚本合并 3.3 公共模块识别 3.4 代码分割 3.5 ...
- webpack4.0各个击破(9)—— karma篇
webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...
- webpack4.0各个击破(10)—— Integration篇
webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...
- webpack4.0 实战记录
从零配置webpack4.0 搭建React工程. 基本环境:Node(v8.1.2)+ webpack(v4.16.2) 1.在项目目录 命令窗口 执行 npm init 初始化项目,执行完后项 ...
随机推荐
- leetcode874
这道题直接按照题意来解,建立坐标系和移动方案,思路是比较简单的.只是需要注意需要使用set来判断是否遇到障碍,否则会超时. int robotSim(vector<int>& co ...
- python之Dict和set类型
Dict就是一种key:value的表格: >>> d = { 'Adam':95, 'Lisa':85, 'Bart':59, 'Paul':75 } >>> p ...
- Python单例模式剖析
在聊这之前我们首先要明确的是,单例模式在实际中的意义以及在python中具有实现的价值? 当前,相信有很多人支持单例模式,也有不少人反对,尤其是在python中,目前依旧具有很大的争议性.我们要在评论 ...
- sql 一些偶尔会用到的写法和函数 不定时更新
小数转整数: --round() 遵循四舍五入把原值转化为指定小数位数,如: ) -- =1 ) -- =2 --floor() 向下舍入为指定小数位数 如: SELECT floor(1.45) - ...
- 详解CSS盒模型(转)
详解CSS盒模型 阅读目录 一些基本概念 盒模型 原文地址:http://luopq.com/2015/10/26/CSS-Box-Model/ 本文主要是学习CSS盒模型的笔记,总结了一些基本概 ...
- nodejs安装配置
1.安装node.js(6.3.0)2.检测PATH环境变量是否配置了Node.jscmd下node --version3.D:/www/nodejs文件夹下创建hello.jsvar http = ...
- Struts2框架07 Struts2 + Spring + Mybatis 整合
1 导包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...
- 关于IE6下绝对定位元素莫名消失的问题
一般来说,让绝对定位的元素不挨着浮动元素就OK了: 1.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,以及没有清除浮动时,IE6/7,FF中显示一致: 2.当绝对定位层的邻近浮动层的宽度不等于父层宽 ...
- grep多条件和sed合并两行
grep多条件,最简单的方式是使用正则表达式: egrep "条件1|条件2" sed合并两行,将 1 2 3 4 合并成: 1 2 3 4 sed '$!N;s/\n/\t/ ...
- 多线程学习-基础( 十一)synchronized关键字修饰方法的简单案例
一.本案例设计到的知识点 (1)Object的notify(),notifyAll(),wait()等方法 (2)Thread的sleep(),interrupt(). (3)如何终止线程. (4)如 ...