参看:文档地址

视频地址:https://www.bilibili.com/video/av51693431

webpack的作用:代码转换、文件优化、代码分割、模块管理、自动刷新、代码检验、自动发布

2 webpack 常见配置

2.1 安装

npm init -y
cnpm i webpack webpack-cli -D # 版本
# "webpack": "^4.41.4"
# "webpack-cli": "^3.3.10" # webpack 打包命令
npx webpack

2.2 配置

// webpack.config.js
const path = require('path')
module.exports = {
mode: 'development', // development production(该模式下回自动压缩代码)
entry: path.join(__dirname, './src/index.js'),
output: {
filename: 'bundle.[hash:8].js',
path: path.join(__dirname, './build'),
}
}

2.2.1 自定义打包配置文件

// webpack.config.xxx.js
module.exports = {
// ...
} // 执行命令
// npx webpack --config webpack.config.xxx.js

2.2.2 配置脚本

{
"scripts": {
"dev": "webpack-dev-server --config webpack.config.js --colors",
"build": "webpack --config webpack.config.js --colors"
}
}

2.3 常用插件

webpack-dev-server

cnpm i webpack-dev-server -D

devServer: {
port: 8081,
progress: true, // 进度条
contentBase: './build', // 指定 build 文件夹作为静态服务
compress: true // 压缩文件
}

html-webpack-plugin - 打包 html 页面:

cnpm i html-webpack-plugin -D

const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// ...
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'index.html',
minify: {
removeAttributeQuotes: true, // 删除双引号
collapseWhitespace: true // 折叠空行
},
hash: true // 添加 hash 戳
})
]
// ...
}

css less loader 配置

cnpm i css-loader less less-loader mini-css-extract-plugin postcss-loader style-loader url-loader -D

const MiniCssExtractPlugin = require("mini-css-extract-plugin")
module.exports = {
// ...
plugins: [
new MiniCssExtractPlugin({
filename: path.posix.join('static', 'css/[name].[contenthash].css'),
// disable: false, //是否禁用此插件
// allChunks: true,
// publicPath: '',
options: {
insert: 'head'
}
})
],
module: {
rules: [
{ // css
test: /\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
// localIdentName:'[name]-[local]-[hash:base64:6]',
publicPath: '../../'
}
},
{
loader: 'css-loader',
options: {
url: true,
modules: {}
}
},
'postcss-loader'
]
},
{ // less
test: /\.less$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../../'
}
},
{
loader: 'css-loader',
options: {}
},
'less-loader',
'postcss-loader'
]
},
]
}
// ...
}

postcss.config.js

module.exports = {
plugins: {
'autoprefixer': {
overrideBrowserslist: 'last 5 version'
}
}
}

postcss-loader 配合autoprefixer给样式加前缀。

打包 JS CSS 压缩优化:

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') // 用于优化\最小化CSS
const TerserJSPlugin = require('terser-webpack-plugin') // js 压缩 module.exports = {
// ...
optimization: {
minimize: true,
minimizer: [
new TerserJSPlugin({
cache: true, // 是否缓存
parallel: true, // 并发打包
sourceMap: true,
}),
new OptimizeCSSAssetsPlugin({
cssProcessorPluginOptions: {
preset: ['default', { discardComments: { removeAll: true } }],
},
cssProcessorOptions: {
safe: true
}
})
]
},
// ...
}

2.4 ES6 语法转换

cnpm i @babel/preset-env @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties @babel/plugin-transform-runtime -D

cnpm i @babel/runtime -S

@babel/polyfill 已弃用,参看:core-js@3带来的惊喜corejs

require("core-js-pure/stable")
require("regenerator-runtime/runtime") module.exports = {
// ...
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
presets: [ // 预设
["@babel/preset-env", {
"useBuiltIns": "usage",
"targets": {
"chrome": "58",
"ie": "11"
}
}]
],
plugins: [
['@babel/plugin-proposal-decorators', {'legacy': true}], // 装饰器
['@babel/plugin-proposal-class-properties', {'loose': true}], // Class
"@babel/plugin-transform-runtime"
]
}
},
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/
},
]
}
// ...
}

2.5 代码规范

cnpm i eslint eslint-loader -D

// webpack.config.js
module.exports = {
// ...
module: {
rules: [
{
test: /\.js$/,
enforce: 'pre', // previous post,在mormal loader 前置执行
use: {
loader: 'eslint-loader',
options: {
cache: true,
fix: true // ESLint自动修复功能
}
},
enforce: 'pre', // previous post
exclude: /node_modules/
}
]
}
// ...
}

官方配置地址 => Rules Configuration

// .eslintrc.json
{
"parserOptions": {
"ecmaVersion": 11,
"sourceType": "module",
"ecmaFeatures": {
"globalReturn": true
}
},
"rules": {
},
"env": {
"node": true,
"commonjs": true,
"es6": true
}
}

2.6 第三方模块使用

以依赖于 jquery 为类,将module中的模块挂载到window上。

cnpm i jquery -S

  • 方法一
// expose-loader 暴露全局的loader/内联的loader 到 window上
import $ from 'expose-loader?$!jquery'
// pre 前面执行的loader normal--普通loader/内联loader/后置post-loader
console.log('window.$',window.$) // 类似于 CDN 引入文件
  • 方法二
import $ from 'jquery'
console.log('window.$',window.$)

配置:

// webpack.config.js
module.exports = {
// ...
module: {
rules: [
{ // 将 jquery 暴露给 window
test: require.resolve('jquery'),
use: 'expose-loader?$'
}
]
}
// ...
}
  • 方法三:在每个模块中注入$ 对象,不打包jquery
console.log('$', $) // 在模块中使用,但是 $ 不存在window中
// webpack.config.js
module.exports = {
// ...
plugins: [
new Webpack.ProvidePlugin({ // 在每个模块注入 $ 对象
"$": "jquery"
})
]
// ...
}
  • 方法四:CDN 引入:
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>

防止在模块中多次import jquery,导致打包体积变大:

// webpack.config.js
module.exports = {
// ...
externals: { // 不打包 jquery
jquery: 'jquery'
}
// ...
}

2.4 webpack打包图片

js中生成图片、在css插入图片、在html中插入图片

// webpack.config.js
module.exports = {
// ...
module: {
rules: [
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use: {
loader: 'url-loader',
options: {
name: path.posix.join('static', 'img/[name].[hash:7].[ext]'),
esModule: false,
limit: 5 * 1024,
// outputPath: 'img/',
// name: '[name].[hash:7].[ext]',
// publicPath:'img/'
// publicPath: 'http://www.houfee.top/' // 只为打包的图片添加 地址路径
}
}
},
]
}
// ...
}

webpack4-1.常见配置的更多相关文章

  1. MyEclipse常见配置及调试

    常见配置 1.配置workspace ----- 建议不要采用含有空格和中文目录 所有代码保存workspace空间中2.新建工程时,设置工程需要jre环境MyEclipse提供多种内置layout ...

  2. Httpd2.2常见配置及功能

    Httpd 2.2常见配置 要配置http服务的配置文件,先备份一下,养成良好习惯,如果误操作导致http服务起不来,就可以将备份的主配置文件重新覆盖一下 httpd配置文件的组成:有三大部分组成,其 ...

  3. Spring Boot常见配置及错误

    一.SpringBoot常见配置 (1)SpingBoot与MyBatis集成时跟踪SQL语句 log4j: logger: java: sql: ResultSet: TRACE (2)日志跟踪 d ...

  4. httpd常见配置

    httpd常见配置 配置文件 /etc/httpd/conf/httpd.conf    主配置文件 /etc/httpd/conf.d/*.conf  辅助配置文件 配置文件语法检查及重新加载配置文 ...

  5. Struts2常见配置(草稿)

    Struts2框架配置文件加载的顺序(了解加载配置文件的顺序,重点掌握struts.xml配置文件) 1.Struts2框架的核心是StrutsPrepareAndExecuteFilter过滤器,该 ...

  6. Java-JVM调优常见配置举例

    常见配置举例 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统 下,一般限制在1.5G~ ...

  7. Redis系列四 Redis常见配置

    redis.conf常见配置 参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程  daemonize no2. ...

  8. Mybatis常见配置错误总结

    Mybatis常见配置错误总结 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionF ...

  9. web.xml的常见配置

    web.xml的常见配置 <!-- 配置全局的编码过滤器 --> <filter> <description>编码过滤器</description> & ...

  10. [springMvc]常见配置

    [springMvc]常见配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...

随机推荐

  1. BZOJ 4166: 月宫的符卡序列

    如果使用回文树,节点 \(u\) 的回文串和 \(fail_u\) 的回文串中心不一样,因为回文树的 \(fail\) 指针指向的是最长回文后缀,没法快速解决异或和 考虑魔改回文树,用马拉车来解决,扩 ...

  2. python面向对象之练习题1

    定义管理员类,管理员有属性(name,password),可以创建学校.创建课程.创建老师 定义老师类,老师有属性(name,password),可以添加课程.给学生打分,但发现学生没有购买课程时,不 ...

  3. 【剑指Offer面试编程题】题目1388:跳台阶--九度OJ

    题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n< ...

  4. C语言入门第四章

    =========C语言的输入与输出=========== %-9d : d:以十进制输出,9表示至少占用9个字符的宽度,宽度不足以空格补齐,-表示左对齐.综合起来,%-9d 表示以十进制输出,左对齐 ...

  5. Spark教程——(2)编写spark-submit测试Demo

    创建Maven项目: 填写Maven的pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <pro ...

  6. JAVA字符串与整形、浮点类型之间的相互转换总结

    1.字符串转化为整形.浮点类型 String s = "100"; //方法一 int a = Integer.parseInt(String s); Long.parseLong ...

  7. Nginx 的优势

    Nginx 的优势 在 Java 开发中,Nginx 有着非常广泛的使用,随便举几点: 使用 Nginx 做静态资源服务器:Java 中的资源可以分为动态和静态,动态需要经过 Tomcat 解析之后, ...

  8. LCS(Longest Common Subsequence)最长公共子序列

    最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题.这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置 .最长公共子序列问题是 ...

  9. 前端学习笔记系列一:12 js中获取时间new date()的用法

    获取时间: 1  var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.get ...

  10. 几道经典的SQL笔试题目

      几道经典的SQL笔试题目(有答案) (1)表名:购物信息 购物人      商品名称     数量 A            甲          2 B            乙        ...