webpack4-1.常见配置
参看:文档地址
视频地址: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.常见配置的更多相关文章
- MyEclipse常见配置及调试
常见配置 1.配置workspace ----- 建议不要采用含有空格和中文目录 所有代码保存workspace空间中2.新建工程时,设置工程需要jre环境MyEclipse提供多种内置layout ...
- Httpd2.2常见配置及功能
Httpd 2.2常见配置 要配置http服务的配置文件,先备份一下,养成良好习惯,如果误操作导致http服务起不来,就可以将备份的主配置文件重新覆盖一下 httpd配置文件的组成:有三大部分组成,其 ...
- Spring Boot常见配置及错误
一.SpringBoot常见配置 (1)SpingBoot与MyBatis集成时跟踪SQL语句 log4j: logger: java: sql: ResultSet: TRACE (2)日志跟踪 d ...
- httpd常见配置
httpd常见配置 配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 辅助配置文件 配置文件语法检查及重新加载配置文 ...
- Struts2常见配置(草稿)
Struts2框架配置文件加载的顺序(了解加载配置文件的顺序,重点掌握struts.xml配置文件) 1.Struts2框架的核心是StrutsPrepareAndExecuteFilter过滤器,该 ...
- Java-JVM调优常见配置举例
常见配置举例 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统 下,一般限制在1.5G~ ...
- Redis系列四 Redis常见配置
redis.conf常见配置 参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no2. ...
- Mybatis常见配置错误总结
Mybatis常见配置错误总结 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionF ...
- web.xml的常见配置
web.xml的常见配置 <!-- 配置全局的编码过滤器 --> <filter> <description>编码过滤器</description> & ...
- [springMvc]常见配置
[springMvc]常见配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...
随机推荐
- 《精通Objective-C》书籍目录
1.入门 2.使用类 3.对象和消息传递 4.内存管理 5.预处理器 6.专家级技巧:使用ARC 7.运行时系统 8.运行时系统的结构 9.专家级技巧:使用运行时系统API 10.Foundation ...
- C# Connection:连接数据库---转载
C# 语言中 Connection 类是 ADO.NET 组件连接数据库时第一个要使用的类,也是通过编程访问数据库的第一步. 接下来我们来了解一下 Connection 类中的常用属性和方法,以及如何 ...
- sdfsdsf
1 $('.advert-title').each(function(){ 2 var TXTlength = $(this).text().length; // 当前文本的长度 3 if(TXTle ...
- Oracle数据库自带了decode()函数
Oracle数据库自带了decode()函数,函数的使用方法如下: SELECT emp.ename, emp.job, emp.sal, decode(job, 'manager ...
- 图解jvm--(一)jvm内存结构
jvm内存结构 1.程序计数器 1.1 定义 Program Counter Register 程序计数器(寄存器) 作用,记住下一条jvm指令的执行地址 特点 是线程私有的 (唯一)不会存在内存溢出 ...
- 105、Java中String类之利用indexOf()方法判断子字符串是否存在
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- LINQ---查询语法和方法语法
namespace ConsoleApplication45 { class Program { static void Main(string[] args) { , , , , , , }; va ...
- zabbix WebUI自定义Nginx监控项模板
zabbix webUI自定义Nginx监控项模板 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建模板 1>.如下图所示,依次点击"配置" --- ...
- Ubuntu安装Orcale
Linux_Ubuntu安装oracle总结 ---------转自 https://www.2cto.com/database/201305/215338.html 话说我花了一晚上才在ubuntu ...
- linux测试网速
wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py python speedtest.py D ...