webpack 打包 归纳整理

开始步骤
1、创建一个项目 在空项目中运行 npm init -y 快速初始化一个包管理文件
2、自动创建出一个 package.json
3、创建一个src原代码目录
4、src创建一个index.html 里面写代码结构
5、运行 npm i jquery -s 安装jq
6、src目录下创建一个index.js 文件 通过 import $ from ‘jquery’ 导入jq
7、index.html 引入jq.js

此时 运行代码的时候 并没有出现我们想要的结果 原因是 es6语法不支持,报错 所以需要使用webpack打包工具

安装配置 webpack
1、运行 npm install webpack webpack-cli -D ,安装webpack相关的包
在这了我使用npm的时候一直报错,所以采用了cnpm 安装成功了
2、在项目根目录创建名为webpack.config.js 的 webpack 配置文件
3、在webpack 配置文件中,初始化如下基本配置

	module.exports = {
		mode:'development' // mode 用来指定构建模式,转换速度快慢, 一般开发项目使用 development ,上线项目使用 production
	}

4、在package.json 配置文件中script 节点下,新增dev脚本

	"scripts":{
		"dev":"webpack" // script 节点下的脚本,可以通过npm run 运行
	}

5、在终端运行 npm run dev 命令 启动webpack 进行项目打包 打包成功

6、index.html 引入打包成功后的 dist/main.js

webpack 基础使用
1、配置打包的入口出口

//webpack 的4.x版本中默认约定
//打包的入口文件为 src--> index.js
//打包的出口文件为 src--> main.js

//如果要手动修改打包的入出口文件,可在webpack.config.js中新增配置信息

const path = require('path') // 导入node.js 中专门操作路径的模块
module.exports = {
	// 编译模式
	mode:'development',  //production  一般开发项目使用 development ,上线项目使用 production
	entry:path.join(__dirname,'./src/index.js'), //打包入口文件的路径
	output:{
		path:path.join(__dirname,'./dist'), //输出文件的存放路径
		filename:'bundle.js'  //输出文件名称
	}
}

2、index.html 引入打包成功后的 dist/bundle.js (替换main.js)

webpack 自动打包功能(为了每次修改完代码自动生效)

  1. 运行 npm install webpack-dev-server -D 命令,安装支持项目自动打包的工具
  2. 修改 package.json 配置文件中 scripts 的 dev 命令如下:
"scripts":{
		"dev":"webpack-dev-server" // script 节点下的脚本,可以通过npm run 运行  webpack-dev-server会启动一个实时打包的 http 服务器
	}
  1. 将src–》 index.html 中,script脚本的引用路径,修改为 “/buldle.js” // 放在了项目根目录中 看不到
    通过 http://localhost:8080/bundle.js 看
  2. 运行 npm run dev命令,重新打包
  3. 浏览器访问 http://localhost:8080 地址,查看自动打包效果
  4. ctrl + c 停止项目 cls 清空控制台(一些小命令)

webpack 配置生成预览页面
配置 html-webpack-plugin 生成预览页面

1、运行 npm install html-webpack-plugin -D ,安装生成预览页面的插件

2、修改 webpack.congig.js 文件头部区域,添加如下配置:

//导入生成预览页面的插件,得到一个构造函数
	const HtmlWebpackPlugin = require('html-webpack-plugin')
	const htmlPlugin = new HtmlWebpackPlugin({  //创建插件的实例对象
		template:'./src/index.html',  //指定要用到的模板文件
		filename:'index.html'  //指定生成的文件的名称,该文件存在于内存中,在目录中不显示
	})

3、修改 webpack.congig.js 文件中向往暴露的配置对象,新增如下配置节点

module.exports = {
		plugins:[htmlPlugin] //plugins 数组是webpack 打包期间会用到的一些插件列表
	}

webpack 基础使用

配置自动打包相关的参数

//package.json 中的配置
// --open 打包后自动打开浏览器页面
// --host 配置IP地址
// --port 配置端口
"scripts":{
	"dev":"webpack-dev-server --open --host 127.0.0.1 --port 8888"
}

webpack加载器

1、通过loader打包非js模块
实际开发中,webpack默认只能打包以.js后缀名结尾的模块,非 .js 后缀名结尾的处理不了,只能调用loader加载器才可以正常打包,否则报错
loader加载器 可以协助webpack 打包处理特定的文件模块,如
less-loader 可以打包处理 .less相关的文件
sass-loader 可以打包处理 .scss相关的文件
url-loader 可以打包处理 .css中与 url 路径相关的文件

2、loader的调用过程

在这里插入图片描述

3、webpack中加载器的基本使用
在这里插入图片描述

  • 1.打包处理css文件
    (在src文件夹中新建css文件夹,css文件夹中新建index.css样式表 在里面添加新的样式 , 在index.js 导入index.css样式表,此时会报错)
  1. 运行npm i style-loader css-loader -D 命令,安装处理css文件的loader
  2. 在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
//所有第三方文件模块的匹配规则
			module: {
				rules:[  //  是一个数组,存放所有的loader规则
						 //  test 匹配的文件类型 接受一个正则表达式,
						 //  /\.css$/ 代表要匹配的后缀名类型 
						 //  \. 表示匹配后缀名的.号  $表示以css结尾的文件类型
						 //  use 属性 用来表示对应要调用的loader  指定的loader 顺序是固定的,多个loader调用顺序是从后往前调用
					{ test: /\.css$/, use:['style-loader','css-loader'] } 
				]
			}
  1. 在index.js 导入index.css样式表
  • 2.打包处理less文件
    1、运行 npm i less-loader less -D 命令
    2.在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
所有第三方文件模块的匹配规则
			module: {
				rules:[  //  是一个数组,存放所有的loader规则
						 //  test 匹配的文件类型 接受一个正则表达式,
						 //  /\.css$/ 代表要匹配的后缀名类型 
						 //  \. 表示匹配后缀名的.号  $表示以css结尾的文件类型
						 //  use 属性 用来表示对应要调用的loader  指定的loader 顺序是固定的,多个loader调用顺序是从后往前调用
					{ test: /\.less$/, use:['style-loader','css-loader','less-loader'] } 
				]
			}
3.在index.js 导入index.less样式表
  • 3、打包处理scss文件
    1、运行 npm i sass-loader node-sass -D 命令
    2、在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
所有第三方文件模块的匹配规则
module: {
	rules:
		[  
			{ test: /\.scss$/, use:['style-loader','css-loader','sass-loader'] } 
		]
}

3、在index.js 导入index.scss样式表

  • 4、配置postCSS自动添加css的兼容前缀
    (比如 ::placeholder 在ie中不兼容 )
    1、.运行 npm i postcss-loader autoprefixer -D 命令
    2、.在项目根目录创建postcss 的配置文件 postcss.config.js,并初始化如下配置
	const autoprefixer = require('autoprefixer') // 导入自动添加前缀的插件
			module.exports = {
				plugins: [autoprefixer]  //挂载插件
			}

3.在webpack.config.js 的module–>rules 素组中,修改css 的 loader规则如下:

	//所有第三方文件模块的匹配规则
			module: {
				rules:
				[  
					{ test: /\.css$/, use:['style-loader','css-loader','postcss-loader'] } 
				]
			}
  • 5、打包样式表中的图标和字体文件
    1.运行 npm i url-loader file-loader -D 命令
    2.在webpack.config.js 的module–>rules 素组中,添加loader规则如下:
所有第三方文件模块的匹配规则
			module: {
				rules:
				[  //  ttf|eot|svg|woff|woff2  字体文件后缀名
				   //  ? 之后是loader 的传参项   limit 用来指定图片的大小,单位是字节(byte),小于limit 大小的图片,会被转为base64 图片
					{ test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/, use:'url-loader?limit=4156' } 
				]
			}
  • 6、打包配置js文件中的高级语法
    1.安装babel转换器相关的包
    运行 npm i babel-loader @babel/core @babel/runtime -D 命令

2.安装babel语法插件相关的包
运行 npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D 命令

3.在项目根目录创建babel 的配置文件 babel.config.js,并初始化如下配置

const autoprefixer = require('autoprefixer') // 导入自动添加前缀的插件
			module.exports = {
				presets: ['@babel/preset-env'],
				plugins: ['@babel/plugin-transform-runtime','@babel/plugin-proposal-class-properties']  //挂载插件
			}

4.在webpack.config.js 的module–>rules 素组中,添加loader规则如下:

所有第三方文件模块的匹配规则
			module: {
				rules:
				[  //  exclude 为排除项,表示babel-loader 不需要处理 node_modules 中的js文件, 只需要处理字节的js文件
					{ test: /\.js$/, use:'babel-loader', exclude:/node_modules/} 
				]
			}

版权声明:本文为qq_42709302原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。