webpack4 入门配置研究

1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g

1.1)输密文的密码(电脑开机)
1.2)安装成功

2. 输入命令mkdir config dist src创建三个文件夹

3.输入命令npm init -y

4. 输入命令touch dist/index.html src/index.js分别dist和src文件夹下面创建一个index.html文件和index.js文件

5. webpack4.x中打包默认找src/index.js作为默认入口,可以直接在终端中输入命令webpack 将当前的内容进行一个简单的打包

5.1) 应该看到打包的时候终端中会出现黄色的警告提示

5.2)mode是webpack中独有的,有两种打包环境,一个是开发环境:development另外一个是生产环境:production
打包的时候输入webpack --mode=development或者webpack --mode=production就不会出现警告提示了
5.3)webapck --mode=production命令打包,这个是代码压缩过的,同时项目文件夹下面多了 一个node_modules文件夹

6.输入命令touch config/webpack.dev.js创建文件

7. 输入命令rm dist/main.js src/index.js移除掉这两个文件我们自己来配置

7.1) 现在在src文件夹下面创建main.js文件
7.2)进入到webpack.dev.js文件中进行配置,具体在代码中注释
1329237-20180715170453962-1273881982.png
7.3) 现在不能执行之前的webpack --mode="development"命令了会报下面的错误没有放在src文件夹内;这里是因为webpack4打包默认找的src下面的index.js入口,我们前面已经删除了,这里src下面死main.js文件,所以找不到就报ERROR in Entry module not found: Error: Can't resolve './src' in '/Users/yubo/Desktop/www/study_webpack2'错误,所以这里我们到packsge.json里面配置下命令,让打包的时候执行我们在config/webpack.dev.js下面配置的入口。

启动配置

1329237-20180715191123120-280675513.png

8.npm run build 就可以了;

简单配置 webpack.dev.js

module.exports = {
entry: ['./src/okcPages/okMainIndex.js', './src/units/remChange.js','./src/okcPages/initCp.js'],
output: {
publicPath: '/', //这里要放的是静态资源CDN的地址
path: path.resolve(__dirname, 'dist'),
filename: 'build.js' // 单文件输出 ,如果多文件可在 entry :{} ,这里 filename: '[name].js'
},
resolve: {
extensions: [".js", ".css", ".json"],
alias: {
// jquery: './src/units/jquery-1.83.min.js',
} //配置别名可以加快webpack查找模块的速度
},
externals: {
jquery: 'window.$'
},
module: {
// 多个loader是有顺序要求的,从右往左写,因为转换的时候是从右往左转换的
rules: [
{
test: /.css$/,
use: ExtractTextWebapckPlugin.extract({
fallback: 'style-loader',
use: ['css-loader'] // 不再需要style-loader放到html文件内
}),
include: path.join(__dirname, 'src'), //限制范围,提高打包速度
exclude: /node_modules/
},
{
test: /.jsx?$/,
use: {
loader: 'babel-loader',
query: { //同时可以把babel配置写到根目录下的.babelrc中
presets: ['env', 'stage-0'] // env转换es6 stage-0转es7
}
}
},
{ //file-loader 解决css等文件中引入图片路径的问题
// url-loader 当图片较小的时候会把图片BASE64编码,大于limit参数的时候还是使用file-loader 进行拷贝
test: /.(png|jpg|jpeg|gif|svg)/,
use: {
loader: 'url-loader',
options: {
outputPath: 'images/', // 图片输出的路径
limit: 1 * 1024
}
}
}
]
},
plugins: [
// 多入口的html文件用chunks这个参数来区分
/* new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'src', 'index.html'),
filename: 'index.html',
hash: true,//防止缓存
minify: {
removeAttributeQuotes: true//压缩 去掉引号
}
}),*/
new ExtractTextWebapckPlugin('css/build.css'), // 其实这个特性只用于打包生产环境,测试环境这样设置会影响HMR
// new CleanWebpackPlugin([path.join(__dirname, 'dist')]),
],
devtool: 'eval-source-map', // 指定加source-map的方式
devServer: {
contentBase: path.join(__dirname, "dist"), //静态文件根目录
port: 3824, // 端口
host: 'localhost',
overlay: true,
compress: false // 服务器返回浏览器的时候是否启动gzip压缩
},
watch: true, // 开启监听文件更改,自动刷新
watchOptions: {
ignored: /node_modules/, //忽略不用监听变更的目录
aggregateTimeout: 500, //防止重复保存频繁重新编译,500毫米内重复保存不打包
poll: 1000 //每秒询问的文件变更的次数
},

配置js压缩

uglifyjs-webpack-plugin(JS压缩插件,简称uglify) webpack4 已经集成;
const uglify = require('uglifyjs-webpack-plugin');
plugins:[
new uglify()
],
这个时候我们再终端运行命令 npm run bulid 进行打包会提示下载webpack-cli 命令输入yes

webpack都有哪些插件?

1.)html生成插件: html-webpack-plugin
2.)css分离的插件:extract-text-webpack-plugin new extractTextPlugin("css/index.css") //这里的/css/index.css 是分离后的路径
3.)处理HTML中的图片:html-withimg-loader
4.)自动处理CSS3属性前缀:postcss-loader 和 autoprefixer
5.)消除未使用的css 和js: purify-css purifycss-webpack
6.)copy 插件 :copy-webpack-plugin
7.)编译输出文件前,删除旧文件: clean-webpack-plugin
8.) 压缩css,优化css结构,利于网页加载和渲染 : optimize-css-assets-webpack-plugin
9.) 打包编译时,显示进度条: progress-bar-webpack-plugin
10.) 规范scss, less,css书写规则:stylelint-webpack-plugin
11.) 将CSS解压到单独的文件中。它为每个包含CSS的JS文件创建一个CSS文件:webpack4用mini-css-extract-plugin 代替了 extract-text-webpack-plugin
12.)减少构建时间:webpack-parallel-uglify-plugin
13.)加快编译速度:happypack
14.)资源路径与问件名对应:assets-webpack-plugin
参考原文:https://segmentfault.com/a/1190000015355816 ;

1.路径问题

var website ={
publicPath:"http://localhost:8888/"
// publicPath:"http://192.168.1.103:8888/"
}
声明一个变量查找更快 publicPath:website.publicPath 使用webpack命令进行打包,你会发现原来的相对路径改为了绝对路径

2. 处理HTML中的图片

在webpack中是不喜欢你使用标签来引入图片的,但是我们作前端的人特别热衷于这种写法,国人也为此开发了一个:html-withimg-loader。他可以很好的处理我们在html 中引入图片的问题,如何把图片放到指定的文件夹下html-withimg-loader;

npm install html-withimg-loader --save-dev
{
test: /.(htm|html)$/i,
use:[ 'html-withimg-loader']
}

3.)自动处理CSS3属性前缀:postcss-loader 和 autoprefixer

postCSS推荐在项目根目录(和webpack.config.js同级),建立一个postcss.config.js文件。

module.exports={
plugins: [
require('autoprefixer') //自动添加前缀插件
]
}
在webpack.dev.cnfig.js中配置:
{
test:/.css$/,
use: extractTextPlugin.extract({
fallback: "style-loader",
use:[{loader:"css-loader"},
{
loader:"postcss-loader",
},
]
})
},

4.消除未使用的CSS 安装PurifyCSS-webpack

PurifyCSS-webpack要依赖于purify-css这个包,所以两个都要下载
npm install purifycss-webpack purify-css --save-dev
因为我们需要同步检查html模板,所以我们需要引入node的glob对象使用。在webpack.dev.config.js文件头部引入glob
const glob = require('glob');
const PurifyCSSPlugin = require("purifycss-webpack");
new PurifyCSSPlugin({
//这里配置了一个paths,主要是需找html模板,purifycss根据这个配置会遍历你的文件,查找哪些css被使用了。
paths: glob.sync(path.join(__dirname, 'src/*.html')),
}),

注意: 使用这个插件必须配合extract-text-webpack-plugin这个插件

5)webpack bable 的配置;

npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
//babel 配置
{
test:/.(jsx|js)$/,
use:{
loader:'babel-loader',
options:{
presets:[
"es2015","react"
]
}
},
exclude:/node_modules/
}
5.1)一般是写到.babelrc 文件夹里
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-0"
]
}
5.2)对比.webpack.dev.config.js里的loader配置
babel 配置
{
test:/.(jsx|js)$/,
use:{
loader:'babel-loader',
},
exclude:/node_modules/
}

参考原文:简书(素时年锦 )webpack4.x入门配置

转载于:https://www.cnblogs.com/panax/p/9314396.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

王者荣耀6月23服务器维护,王者荣耀6.23维护到什么时候?6月23日长枪掠火版本异常介绍...

王者荣耀6.23维护到什么时候&#xff1f;可能很多玩家对于今天更新的时间还不太清楚&#xff0c;下面就让浏览器小编为大家带来&#xff0c;王者荣耀6月23日长枪掠火版本异常介绍。亲爱的召唤师&#xff1a; “长枪掠火”版本更新后&#xff0c;我们收到反馈&#xff0c;本次在…

mysql ignore详解_MySQL replicate-ignore-db详解

1&#xff1a;官方的解释是&#xff1a;在主从同步的环境中&#xff0c;replicate-ignore-db用来设置不需要同步的库。解释的太简单了&#xff0c;但是里面还有很多坑呢。生产库上不建议设置过滤规则。如果非要设置&#xff0c;那就用Replicate_Wild_Ignore_Table: mysql.%吧。…

【转】_declspec(naked) 使用

// 将本文完整拷贝, 然后在VC6 下建立控制台程序, 可直接运行~ 看到结果后再来阅读此文 // 文章出处甚多, 已不能列出所有连接 #include "stdafx.h"#include <stdio.h> /* >>>>>> _declspec(naked) 使用 <<<<<<<…

采样频率和带宽的关系_基于矢量网络分析仪的 TDR 与传统采样示波器 TDR 之间的测量性能和优势比较...

最近几年随着多 Gbps 传输的普及&#xff0c;数字通信标准的比特率也在迅速提升。比特率的提高使得在传统数字系统中不曾见过的问题显现了出来。诸如反射和损耗的问题会造成数字信号失真&#xff0c;导致出现误码。另外由于保证器件正确工作的可接受时间裕量不断减少&#xff0…

【模板】并查集

只是再自己打一遍熟悉一些 #include<iostream> #include<cstdio> using namespace std; #define tcl(a,b,c) for(ab;a<c;a) int f[100001]; int get(int x) {if(f[x]x)return x;else {f[x]get(f[x]);return f[x];} } void join(int a,int b) {int t1,t2;t1get(a…

mysql的分片系统_MySQL分片

shardingMySQL5以后提供了Sharding的能力&#xff0c;其目的就是为突破单节点数据服务器I/O能力限制&#xff0c;解决数据库Scale Out水平扩展的问题。通过Sharding可以将数据按照物理位置贴合用户分布&#xff0c;得到更加快速的响应&#xff1b;操作庞然大物总是让人头疼&…

在线普通话转粤语发音_香港最新悬疑侦探剧福尔摩师奶,粤语知识好难

150元系统学粤语付费咨询微信2019年2月25日香港TVB上了一部新剧《福尔摩师奶》&#xff0c;该剧以19世纪末至20世纪初的油麻地为背景&#xff0c;讲述一个女探长祖迪费查(陈松伶饰)破案的故事。/ 盏鬼 // 识少少 /①普通话的“嫉妒、受不了”&#xff0c;粤语会说&#xff1a;唔…

Java web小项目_个人主页(1)—— 云环境搭建与项目部署

摘自&#xff1a;Java web小项目_个人主页&#xff08;1&#xff09;—— 云环境搭建与项目部署 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-26 23:59:39 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115104493?spm1001.2014.3001…

网页搜索怎么显示排名_深圳seo搜索排名优化效果怎么样

效果怎么样l31b10seo搜索排名优化深圳&#xff0c;企业商家为了自己的网站有更好的排名&#xff0c;获得更好的流量&#xff0c;往往会采用SEO优化&#xff0c;那么SEO优化有哪些方法呢&#xff1f;或者是哪些方法更有效呢&#xff1f;这是一个多媒体的时代&#xff0c;内容元素…

String.slice

String.slice(start, end)start从字符串的哪个index开始截取 默认值0 如果为负值&#xff0c;则从字符串的尾部向前倒推indexend到从字符串的哪个index结束截取 默认值string.length 有效值 Math.abs(string.length)>end 如果为负值&#xff0c;则从字符串的尾部向前倒推ind…

mysql5.5怎么删除字段_Linux 上 Mysql5.5 只能新建表中的字段不能删除表,权限root...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼mysql> describe wef_wall_content;------------------------------------------------------------------------| Field | Type | Null | Key | Default | Extra |----------------------------------------------------------…

实战 Lucene,第 1 部分: 初识 Lucene

Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包&#xff0c;它不是一个完整的搜索应用程序&#xff0c;而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很…

Java web小项目_个人主页(2)—— 边缘加速原理与实现

摘自&#xff1a;Java web小项目_个人主页&#xff08;2&#xff09;—— 边缘加速原理与实现 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-27 14:44:40 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115260283?spm1001.2014.3001.5…

range函数python-Python for循环与range函数的使用详解

for 循环 For … in 语句是另一种循环语句&#xff0c;其特点是会在一系列对象上进行迭代&#xff08;Iterates&#xff09;&#xff0c;即它会遍历序列中的每一个项目 注意&#xff1a; 1、else 部分是可选的。当循环中包含它时&#xff0c;它循环中包含它时&#xff0c;它总会…

Ajax同步和异步的区别?

今天在code review时候看到同事的代码&#xff0c;用了ajax同步&#xff0c;async:false,如果不设置async参数&#xff0c;默认是true&#xff0c;为异步&#xff0c;异步的情况是比较复杂的&#xff0c;看下同步这个例子&#xff1a; function getCommit(){ var data null;…

mysql 双从性能_MySQL双主一致性架构优化

转自&#xff1a;MySQL双主一致性架构优化 - osc_avwazwuz的个人空间 - OSCHINA​my.oschina.net一、双主保证高可用MySQL数据库集群常使用一主多从&#xff0c;主从同步&#xff0c;读写分离的方式来扩充数据库的读性能&#xff0c;保证读库的高可用&#xff0c;但此时写库仍然…

最清晰细致的教程!一步步教你打造Win7+CentOS双系统

大概半年前自学了一段时间Linux&#xff0c;但没有坚持下来……最近又想开始看&#xff0c;但是希望看到Linux在物理机下的运行情况而不是仅仅在虚拟机下运行&#xff0c;所以尝试着在已经安装了Win7的系统下安装CentOS&#xff0c;实现双系统切换使用的目的。经过大半天的实验…

全国计算机等级考试题库二级C操作题100套(第01套)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

linux系统日志_如何使用 Linux Cockpit 来管理系统性能 | Linux 中国

Linux Cockpit 是一个基于 Web 界面的应用&#xff0c;它提供了对系统的图形化管理。看下它能够控制哪些。-- Sandra Henry-stocker如果你还没有尝试过相对较新的 Linux Cockpit&#xff0c;你可能会对它所能做的一切感到惊讶。它是一个用户友好的基于 web 的控制台&#xff0c…

触摸屏之linux3.4.2安装tslib

1. 写好触摸屏驱动后&#xff0c;安装tslib 1.1 tar xzf tslib-1.4.tar.gz 1.2 cd tslib 1.3 修改编译器版本号或者内核版本号&#xff0c;使它们一致。不然会出错&#xff0c;显示selected device is not a touchscreen I understand 在内核中 —— include/linux/input.h:…