webpack学习

学习目标:

webpack

学习内容:

一、什么是webpack

  1. 概念:webpack是前端项目工程化的具体解决方案。
  2. 主要功能:它提供了有好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。
  3. 好处:让程序员把工作的重心放到具体功能的实现上,提高了前端开发效率和项目的可维护性。
  4. 注意:目前Vue,React等前端项目,基本上都是基于webpack进行工程化开发的。

二、创建列表隔行变色项目

  1. 创建项目空白目录,并运行 npm init -y命令,初始化包管理配置文件package.json。
  2. 新建src源代码目录。
  3. 新建src ->index.html首页和src->index.js脚本文件。
  4. 初始化首页基本的结构
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
   <script src="./index.js"></script>
</head>
<body>
   <ul>
   	<Li>这是第一个</Li>
   	<Li>这是第二个</Li>
   	<Li>这是第三个</Li>
   	<Li>这是第四个</Li>
   	<Li>这是第五个</Li>
   	<Li>这是第六个</Li>
   	<Li>这是第七个</Li>
   	<Li>这是第八个</Li>
   </ul>
</body>
</html>
  1. 运行命令安装jQuery
npm install jquery -S
  1. 通过ES6 模块化的方式导入jQuery,实现列表隔行变色效果
import $ from  'jquery'
$(function(){
	$('li:odd').css('background-color', 'red')
	$('li:even').css('background-color', 'green')
})		

三、在项目中安装webpack

  1. 在终端运行如下的命令,安装webpack相关的两个包

    npm install webpack@5.42.1 webpack-cli@4.7.2 -D
    
  2. package.json文件属性:
    dependencies:项目在开发环境和生产环境下都需要的包
    devDependencies:只在项目开发环境下需要的包

  3. 命令查询网站npmjs.com
    -S是 --save的简写
    -D是 --save-dev的简写

四、在项目中配置webpack

  1. 在项目根目录中,创建名为webpack.config.js的webpack配置文件,并初始化如下的基本配置:
    module.exports = {
       mode:'development'
    }
    
    mode代表webpack运行的模式,可选值有两个 development 和 production
  2. 在package.json的scripts节点下,新增dev脚本如下:
    在终端中运行npm run dev的命令,启动webpack进行项目的打包构建
    "scripts": {
       	"dev": "webpack"
    }
    
  3. 目录中新增dist文件夹
  4. mode属性值的对比: development:打包速度快,体积大; production:打包速度慢,体积小。
  5. webpack.config.js自定义打包的入口与出口:
    默认打包的入口文件为src下的index.js,出口文件为dist下的main.js;
    通过entry节点指定打包的入口。通过output节点指定打包出口。
    示例:
    const path = require('path')
    module.exports = {
    // 代表webpack运行的模式,可选值有两个 development 和 production
    	mode:'development',
    	entry: path.join(__dirname,'./src/index.js'),
    			output: {
    				path: path.join(__dirname,'dist'),
    				filename: "main.js"
    			}
    		}
    	}
    

五、webpack插件的作用

  1. 通过安装和配置第三方的插件,可以拓展webpack的能力,从而让webpack用起来更方便。最常用的webpack插件有如下两个:
    (1)webpack-dev-server:类似与node.js阶段用到的nodemon工具,没当修改了源代码,webpack会自动进行项目的打包和构建
    (2)html-webpack-plugin:webpack中的HTML插件,类似与一个模板引擎插件,可以通过此插件自定制index.html页面的内容

  2. 安装webpack-dev-server插件:

    npm install webpack-dev-server@3.11.2 -D
    
  3. 配置webpack-dev-server,修改package.json-中scripts的dev命令如下:

    "scripts": {
    	"dev": "webpack serve"
    } 
    

    (1)启动命令:npm run dev ,访问浏览器localhost:8080,这时生成的main.js是虚拟文件,不存在于磁盘上而是存在于内存中。
    (2)在webpack.config.js配置文件中,通过devServer节点对webpack-dev-server插件进行更多的配置,示例代码如下

    devServer: {
            // 初次启动服务,自动打开浏览器
            open: true,
            // 服务端口号
            port: 9000,
            // 实时打包使用的主机地址
            host: '127.0.0.1'
        },
    

    注意:凡是修改了webpack.config.js配置文件或修改了packahe.json文件,必须重启实时打包的服务器。

  4. 安装html-webpack-plugin:

    	npm install html-webpack-plugin@5.3.2 -D
    
  5. 配置html-webpack-plugin

    // 使用Node.js中的导出语法,向外导出一个webpack的配置对象
    		const path = require('path')
    		// 1.导入HTML插件,得到一个构造函数
    		const HtmlWebpackPlugin = require('html-webpack-plugin')
    		// 2.创建HTML插件的实例对象
    		const  htmlPlugin = new HtmlWebpackPlugin({
    			// 指定要复制哪个页面
    			template: './src/index.html',
    			// 指定复制出来的文件名和存放路径
    			filename: './index.html'
    		})
    		module.exports = {
    			// 代表webpack运行的模式,可选值有两个 development 和 production
    			mode:'development',
    			entry: path.join(__dirname,'./src/index.js'),
    			output: {
    				path: path.join(__dirname,'dist'),
    				filename: "main.js"
    			},
    			// 插件的数组,将来webpack在运行时,会加载并调用这些插件
    			plugins: [htmlPlugin]
    		}
    
  6. html-webpack-plugin作用:通过HTML插件复制到项目根目录中的index.html页面,放入内存中;html插件在生成的index.html页面,自动注入了打包的main.js文件

六、webpack中的loader

  1. loader概述
    在实际开发过程中,webpack默认只能打包处理以.js后缀名结尾的模块。其他非.js后缀名结尾的模块,
    webpack默认处理不了,需要调用loader加载器才可以正常打包,否则会报错!

  2. loader加载器的作用:协助webpack打包处理特定的文件模块。比如:
    (1)css-loader可以打包处理.css相关文件
    (2)less-loader可以打包处理.less相关的文件
    (3)babel-loader可以打包处理webpack无法处理的高级JS语法

  3. 安装配置css-loader:

    (1)运行命令安装css文件的loader

    npm i style-loader@3.0.0 css-loader@5.2.6 -D
    

    (2)在webpack.config.js的module->rules数组中,添加loader,规则如下:

    module: {
    	rules: [
    		{test: /\.css$/,use:['style-loader','css-loader']}
    	]
    }
    

    其中,test标识匹配的文件类型,use表示对应要调用的loader
    注意:use数组中指定的loader顺序是固定的,多个loader的调用顺序是:从后往前调用

  4. 安装配置less-loader:

    	npm i less-loader@10.0.1 less@4.1.1 -D
    

    配置如下:

    module: {
    	rules: [
    		{test: /\.less$/,use:['style-loader','css-loader','less-loader']}
    	]
    }
    
  5. 打包处理样式表中与url路径相关的文件

    npm i url-loader@4.1.1 file-loader@6.2.0 -D
    

    配置如下:

    module: {
    	rules: [
    		{ test: /\.jpg|png|gif$/,use: 'url-loader?limit=22229' }
    	]
    }
    

    其中?后是loader的参数项,limit是指定图片的大小,单位是字节(byte),只有<=limit大小的图片才会被转为base64格式的图片

  6. 打包处理js文件中的高级语法需要借助babel-loader进行打包处理

    npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D
    

    配置如下:

    module: {
    	rules: [
    		{ test: /\.js$/,use: 'babel-loader', exclude: '/node_modules/'}
    	]
    }
    

    在项目根目录下,创建名为babel.config.js的文件,配置如下:

    	module.exports = {
    				plugins: [['@babel/plugin-proposal-decorators',{ legacy: true}]]
    			}
    

七、webpack打包发布

  1. 在package.json文件的scripts节点下,新增build命令如下:

    scripts": {
    	"dev": "webpack serve"
    	,"build": "webpack --mode production"
    }
    

    –model 是一个参数项,用来指定webpack的运行模式,会覆盖webpack.config.js的model选项

  2. 把js文件统一生成到js目录中,在webpack.config.js配置文件的output节点中,进行如下配置:

    output: {
    			path: path.join(__dirname,'dist'),
    			filename: "js/main.js"
    		}
    
  3. 把图片文件统一生成到image目录中,修改webpack.config.js中的url-loader配置项,新增outputPath选项即可可指定图片文件的输出路径:

    {test: /\.jpg|png|gif$/, use: 'url-loader?limit=400&outputPath=image'}
    
  4. 自动清理dist目录下的旧文件,安装并配置clean-webpack-plugin插件:
    (1)安装清理dist目录的webpack插件

    		npm install clean-webpack-plugin@3.0.0 -D
    

    (2)在webpack.config.js文件中导入并创建插件的实例对象,挂载到plugins节点中

    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    const cleanWebpackPlugin = new CleanWebpackPlugin();
    plugins: [htmlPlugin,cleanWebpackPlugin]
    

八、Source Map

  1. Source Map就是一个信息文件,里面存储着位置信息。也就是说,Source
    Map文件中存储着压缩混淆后的代码所对应的转换前的位置。出错的时候,可以直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试

  2. 开发环境下,默认是生成后的代码的位置,需要在webpack.config.js中moudle.exports中添加如下配置:

    devtool: 'eval-source-map'
    
  3. 生产环境下省略devtool选项,则最终生成的文件中不包含Source Map。这能够防止原始代码通过与Source Map的形式暴露。

  4. 设置devtool的值设置为nosources-source-map可以只显示报错行号而不暴露源码

九、其他配置

  1. @代表src目录:
    在webpack.config.js文件中moudle.exports中添加配置如下
    resolve: {
    	alias: {
    			'@':path.join(__dirname, './src')
    	}
    }
    

Webpack是一个强大的模块打包工具,它主要用于现代JavaScript应用的静态资源管理和优化。学习Webpack可以按照以下思维导图进行: 1. **基础概念** - 安装与配置:理解Webpack的基本安装过程,如npm安装、配置文件(webpack.config.js)的结构。 - 工作原理:模块解析、加载器(loader)、插件系统等核心组件。 2. **模块管理** - 输入与输出:Webpack如何处理模块的输入路径和输出路径。 - CommonJS & ES6模块化:熟悉CommonJS和ES6模块的区别及Webpack对它们的支持。 3. **打包流程** - 静态分析:了解Webpack是如何构建依赖树的。 - 缓存机制:认识Webpack的缓存策略,提高构建速度。 4. ** loader 技术** - 转换器:解释如何使用loaders转换各种文件类型,如CSS预处理器、图片压缩等。 - 自定义loader:如果需要,学习如何创建自定义loader来处理特定需求。 5. **优化与性能** - UglifyJS、terser:学习如何压缩代码以减小体积。 - SplitChunksPlugin:理解代码分割和懒加载的优化技术。 6. **常见插件** - HtmlWebpackPlugin:生成HTML模板并自动注入打包后的JS和CSS。 - MiniCssExtractPlugin:分离CSS到单独文件。 7. **高级主题** - HMR(热更新):实时刷新模块变化。 - tree-shaking:移除未使用的代码。 8. **实践项目**:通过实际搭建项目来巩固所学知识,例如React、Vue等框架的前端项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值