Webpack学习笔记

Webpack 学习笔记

前端开发工程化:模块化、组件化、规范化、自动化

在这里插入图片描述

目前主流的前端工程化解决方案:webpack

它能够提供友好地开端模块化开发支持,以及代码压缩混淆处理浏览器端 JavaScript 的兼容性性能优先等强大功能。

好处:让程序员把工作重心放到具体功能的实现上,提高前端开发的效率项目的可维护性

一、Webpack基本使用
1、新建目录步骤

1.1、新建项目空白目录,并运行以下命令,初始化包管理配置文件 package.json

npm init -y

1.2、新建 src 源代码目录

1.3、新建src -> index.html 首页和 src -> index.js 脚本文件

1.4、运行以下命令,安装jQuery

npm install jquery -S
// --save

1.5、通过 ES6 模块化的方式导入 JQuery

在 index.js 文件夹内:

// 使用 ES6 语法导入 JQuery
import $ from 'jquery'
// 这里如果不使用 webpack 会出现兼容性问题

// 定义jQuery的入口函数
$(function() {
  
})
2、安装和配置 webpack

2.1 在终端运行以下命令

npm install webpack@5.42.1 webpack-cli@4.7.2 -D
// -D 是 --save-dev

在这里插入图片描述

devDependencies:开发需要用、部署不需要用到的包放这

2.2 在项目中配置webpack

1、在项目根目录中,创建名为 webpack.config.js 的webpack配置文件,并初始化如下基本配置:

// 使用 Node.js 中的导出语法,向外导出一个 webpack 配置对象
module.exports = {
	mode:'development'  //mode 用来指定构建模式,可选值有 development 和 production   生产和发布
}

2、在package.json 的script 节点下,新增 dev 脚本如下:

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

3、在终端中运行如下命令,启动webpack 进行项目的打包构建

npm run dev 

4、然后把编译生成的 dist -> man.js 文件引入 index.html 中即可解除浏览器兼容性问题

在这里插入图片描述

二、webpack基本认识
1、webpack 中的默认约定

在这里插入图片描述

2、自定义打包的入口与出口
//entry : '指定要处理哪个文件'
  emtry: path.join(__dirname, './src/index1.js'),
  output: {
    // 存放到目录
    path: path.join(__dirname, './dist'),
    filename: 'bundle.js'
  }

在这里插入图片描述

因为每次改动代码,页面样式并不会变,要重新run 一下生成新的main.js 文件才可以,太麻烦,要怎么办呢?

3、webpack 中的插件

在这里插入图片描述

命令:

npm install webpack-dev-server -D
3.1 配置 webpack-dev-server

作用:自动打包,不用每次都 run 一下

1、修改 package.json -> 中的 dev 命令如下:

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

2、再次运行npm run dev 命令,重新进行项目打包

3、在浏览器中访问 http://localhost:8080/,查看自动打包效果

3.2 安装 html-webpack-plugin

作用:将页面复制到根目录,然后输入地址,相当于直接进入到了主页

npm install html-webpack-plugin -D

1、配置

// 1、导入 html-webpack-plugin 这个插件,得到插件的构造函数
const HtmlPlugin = require('html-webpack-plugin')
// 2、new 构造函数 ,创建插件的实例对象
const htmlPlugin = new HtmlPlugin({
  // template 指定要复制哪个页面
  template: './src/index.html',
  // filename 指定复制出来的文件名和存放路径
  filename: './index.html'
})

// 使用 Node.js 中的导出语法,向外导出一个 webpack 配置对象
module.exports = {
  //mode 用来指定构建模式,可选值有 development 和 production   生产和发布
  mode: 'development', 
  
  // 3、插件的数组,将来 webpack 在运行时,会加载并调用这些插件
  Plugin: [htmlPlugin]

}
3.3 devServer 节点

作用:运行完直接打开浏览器,不用每次都输入地址

devServer: {
    open: true,      // 首次打包成功后自动打开浏览器
    host: '127.0.0.1',
    port: 80,
}
4、loader 加载器

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

loader 加载器的作用:协助 webpack 打包处理特定的文件模块,例如:

css-loader

less-loader

babel-loader

1、运行 命令,安装处理 css 文件的 loader

npm i style-loader css-loader -D

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

module: {
    rules: [
      // 定义了不同模块对应的 loader
      {test:/\.css$/,use:['style-loader','css-loader']}
    ]
  }

安装处理 less 文件的loader 也是类似的

npm i less-loader less -D
module: {
    rules: [
      // 定义了不同模块对应的 loader
      { test: /\.css$/, use: ['style-loader', 'css-loader'] },
      { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }
    ]
  }
5、logo 转化为 base64 格式

防止频繁的发起网络请求,但是转成 base64 字符串后体积会变大一点,所以不建议将大图片转化成 base64 格式

6、打包处理样式表中 与 url 路径相关的文件

1、运行以下命令

npm i url-loader file-loader -D

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

 // 处理图片文件的 loader
{ test: /\.jpg|png|gif$/, use: 'url-loader?limit = 222229' }

limit 参数的作用:用来指定图片的大小,单位是字节。只有小于等于这个数的,才能被 转为 base64 格式的图片

7、打包处理 js 文件中的高级语法

webpack 只能打包处理一部分高级的 JavaScript 语法,对于那些 webpack 不能处理的高级语法,需要借助于 babel-loader 进行打包处理

解决方法:安装 babel-loader 相关的包

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

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

// 使用 babel-loader 处理高级的 JS 语法,exclude 意思是排除项,排除第三方包,它的兼容性不需要程序员关心
{ test:/.\js$/,use: 'babel-loader',exclude: /node_modules/}

配置 babel-loader

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

module.exports = {
  // 声明 babel 可用的插件
  // 将来 webpack 在调用 babel-loader 的时候,会先加载 plugins 插件来使用
  plugins: [['@babel/plugin-proposal-decorators', { legacy: true }]]
}
8、配置 webpack 的打包发布

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

在这里插入图片描述

–mode 的优先级更高,要高于配置文件的 mode

在这里插入图片描述

在开发阶段运行 dev 命令,发布阶段运行 build 命令

9、自动清理日志文件

1、输入以下命令,或者在 npm 官网中找到其使用方法,复制代码即可

npm install --save-dev clean-webpack-plugin

2、在 webpack.config.js 中配置该插件

在这里插入图片描述
在这里插入图片描述

10、Source Map

什么是 Source Map ?

它是一个信息文件,里面储存着位置信息。也就是说,里面存的压缩混淆后的代码,所对应的转换前的位置

有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大地方便后期的调试

开发环境下默认生成的 Source Map,记录的是生成后的代码位置。会导致运行时报错的行数源代码的行数不一致的问题。

在这里插入图片描述

注意::在发布的时候要关闭 Source Map ,这是为了安全性考虑

只定位行数,不暴露源码。在实际发布的时候可以这么做,或者直接关闭 Source Map

可以将 devtool 的值设置为 ‘nosources-source-map’

在这里插入图片描述

11、用 @ 表示 src 源代码目录

在 webpack.config.js 配置文件中的 module.exports 属性里添加下列属性:
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值