webpack

webpack 是前端项目工程化的具体解决方案
主要功能:他提供了友好的前端模块化的支持代码压缩处理浏览器兼容性,性能优化等功能

npm init -y
npm install jquery -S

安装webpack

 npm install webpack webpack-cli -D

-S --save
-D --save-dev

通过npmjs.com查看安装时选择-S还是-D

index.js 配置基础语句 以隔行变色为例

// es6导入语法
import $ from 'jquery'// 定义jquery入口函数
$(function(){$('li:odd').css('background-color','red')$('li:even').css('background-color','pink')
})

项目中配置webpack

1.创建webpack.config.js配置文件并初始化

module.exports = {// 代表webpack运行模式,可选值 development  productionmode:'development'
}

2.在package.json的stript节点,新增dev脚本

  "scripts": {"dev":"webpack"},

3.在终端中运行npm run dev命令,启动webpack项目的打包构建

npm run dev

4.生成dest文件

5.修改index.html下 js引入路径

<!-- <script src="index.js"></script> -->
<script src="../dist/main.js"></script>

webpack可选值应用场景

module.exports = {// 代表webpack运行模式,可选值 development  productionmode:'production'
}

开发时使用development 因为追求的是打包的速度,而不是体积
反过来 发布时使用production 因为上线需要的是体积小

webpack的默认约定

  • webpack4.x和5.x的版本中

    • 默认打包入口文件 src --> index.js
    • 默认输出文件 dist --> main.js

导入node文件模块

const path = require("path/posix");
    // entry:指定要处理哪个文件entry:path.join(__dirname,'./src/index.js'),output:{// 存放目录path:path.join(__dirname,'dist'),// 生成的文件名filename:'bundle.js'}

webpack插件

webpack-dev-server
自动打包和构建
html-webpack-plugin
webpack中的HTML插件,可以定制index.html页面内容

npm install webpack-cli -D

2.修改package.json

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

3.浏览器访问
http://localhost:8080/

webpack在根目录中写入了一个bundle.js文件
但这个文件是保存在内存中的,所以看不见
更改html引用路径

<script src="/bundle.js"></script>

html-webpack-plugin

npm install html-webpack-plugin -D

1、导入HTML插件,得到一个构造函数

const HtmlPlugin = require('html-webpack-plugin')

2、创建HTML插件的实例对象

const htmlPlugin = new HtmlPlugin({template:'./src/index.html', // 指定要复制哪个页面filename:'./index.html'//指定复制出来的文件名和存放路径});})

3、插件的数组,将来webpack在运行时,会加载并调用这些插件
在module.exports里添加

plugins:[htmlPlugin]

复制后的页面会自动添加上内存里的js

devServer节点

    devServer:{open:true,//是否自动打开浏览器port:80,//指定端口号host:'127.0.0.1',//指定主机地址}
const path = require('path');const HtmlPlugin = require('html-webpack-plugin'); //导入HTML插件const htmlPlugin = new HtmlPlugin({   //创建实例对象template:'./src/index.html', // 指定要复制哪个页面filename:'./index.html'//指定复制出来的文件名和存放路径});module.exports = {mode:'development',entry:path.join(__dirname,'./src/index.js'),output:{filename:'bundle.js'},plugins:[htmlPlugin],devServer:{open:true,//是否自动打开浏览器port:80,//指定端口号host:'127.0.0.1',//指定主机地址}
}

loader概述

webpack处理不了非.js后缀的模块
需要调用loader加载器才可以正常打包

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

  • css-loader 处理css
  • less-loader 处理.less
  • babel-loader 处理webpack无法处理的高级JS语法

现在在src文件下创建css文件下index.css
在index.js中导入样式

import './css/index.css'

打包处理css文件

1.安装依赖

npm i style-loader css-loader -D

2.在webpack.config.js 的module->rules数组中,添加loader

    module:{//所有第三方文件模块的匹配机制rules:[{test:/\.css$/,user:['style-loader','css-loader']}]}

test标识匹配的文件类型
user标识要调用的loader

  • user数组中指定的loader顺序是固定的
  • 多个loader的调用顺序是从后往前调

打包处理less文件

1、运行安装命令

npm i less-loader less -D

2、在webpack.config.js 的module->rules数组中,添加loader

    module:{//所有第三方文件模块的匹配机制rules:[{test:/\.css$/,use:['style-loader','css-loader']},{test:/\.less$/,use:['style-loader','css-loader','less-loader']}]}

处理url路径相关的文件

npm i url-loader file-loader

index.html

    <!-- 需求把/src/images/bg.jpg设置给src属性 --><img src="" alt="" class="box">

index.js

// 导入图片,得到图片文件
// 导入图片,得到图片文件
import bg from './images/bg.jpg'
$('.box').attr('src',bg)

webpack.config.js

    module:{//所有第三方文件模块的匹配机制rules:[{test:/\.css$/,use:['style-loader','css-loader']},{test:/\.less$/,use:['style-loader','css-loader','less-loader']},{test:/.jpg|png|gif$/,use:['url-loader?limit-22229']}]}

limit用来指定图片的大小,单位是字节
只有≤limit大小的图片,才会被转为base64格式的图片

处理js文件的高级语法babel-loader

index.js

// 定义装饰器函数
function info(target){target.info = 'Person info'
}// 定义一个普通的类
@info
class Person{}console.log(Person.info)

1.安装babel-loader相关包

npm install -D babel-loader @babel/core @babel/preset-env @babel/plugin-proposal-decorators

2.在webpack.config.js添加规则

{test: /\.m?js$/,exclude: /(node_modules|bower_components)/, // 排除不需要打包的目录use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env']}}
}

3.在根目录创建babel.config.js

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

注:babel插件文档
webpack安装babel-loader文档

打包发布

1.开发环境下,打包生成的文件存放在内存中
2.开发环境下,打包生成的文件不会进行代码压缩和性能化

配置webpack打包发布

在package.json在scripts节点下,新增build命令

"build":"webpack --mode production"

–mode是用来指定webpack的运行模式
production代表生产环境,会对代码进行代码压缩和性能优化

注意:–model指定的参数项会覆盖webpack.config.js中的model选项

优化图片和文件的存放目录

在webpack.config.js中output模块下指定js存放目录

    output:{filename:'js/bundle.js'}

在webpack.config.js中module模块rules下指图片存放目录

 {test:/.jpg|png|gif$/,use:{loader:'url-loader',options:{limit:22228,// 明确指定打包生成的图片文件存储到dist目录下的images文件夹outputPath:'image'}}

自动清理dist目录下的旧文件

1.安装clean-webpack-plugin

npm install clean-webpack-plugin -D

2.在webpack.config.js中按需导入插件,得到插件的构造函数之后,创建插件的实例对象

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

3.把创建的cleanPlugin的插件实例对象,挂载到plugins节点上

plugins: [htmlPlugin,new CleanWebpackPlugin()]

4.webpack5.x之后,需要在output中配置path路径

output: {filename: 'js/bundle.js',path: path.resolve(process.cwd(), 'dist')
}

source Map

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

出错的时候,除错工具将直接显示原始代码,而不是转换后的代码

在开发调试的时候,建议将值设为eval-source-map

开发环境下,webpack默认启动了Source Map功能,当程序运行出错的时候,可以直接通过控制台提示错误行位置定位到具体的源代码,开发环境下添加以下代码,能保证报错代码与源代码行数保持一致

在webpack.config.js中添加

devtool:'eval-source-map'

在生产环境下,如果省略了devtool选项,则最终生成的未见不包含Source Map 这能防止源码泄露
在生产环境下,如果想定位报错的具体行数,而不暴露源代码,可以将devtool的值设置为nosources-source-map

实际开发中,我们不需要自己配置webpack
会使用CLI 一键生成带有webpack的项目
开箱即用,我们只需知道webpack的基本概念即可

总结

1.能够掌握webpack的基本使用
安装、webpack。config.js 修改打包入口
2.了解常用的plugin的基本使用
webpack-dev-server html-webpack-plugin
3.了解常用的loader的基本使用
loader的作用 loader的调用过程
4.能够说出Source Map的作用
精准定位到错误行并显示对应的源码
方便开发者调试源码中的错误

补充 webpack 路径别名

webpack.config.js添加与module同级模块resolve

    resolve: {   //路径起别名alias: {'@': path.resolve(__dirname, './src/'),},},

使用@表示 src目录

前端工程化 webpack相关推荐

  1. 走近前端工程化-WebPack之loader的入门级知识

    背景 最近自己在学习一些视频剪辑相关的工具,像爱剪辑,剪映这些软件.然后就想自己是不是也可以实现一个类似的,轻量级的在线剪辑工具.最后发现这个款node端的工具库FFCreator,接下来简单介绍一下 ...

  2. vue全套笔记,前端工程化+vue指令+脚手架

    文章目录 一. 前端工程化 webpack 的基本使用 webpack 中的插件 webpack 中的 loader 打包发布 Source Map的使用 注意,实际开发不需要自己配置webpack ...

  3. 仿掘金社区全栈项目开发(二)-前端工程化

    前端工程化 webpack 核心概念 看官方文档:https://webpack.docschina.org/concepts/ 小demo 参考博客:https://juejin.cn/post/6 ...

  4. 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML

    基于webpack的前端工程化开发解决方案探索(一):动态生成HTML 参考文章: (1)基于webpack的前端工程化开发解决方案探索(一):动态生成HTML (2)https://www.cnbl ...

  5. 透视前端工程化之 Webpack 基本介绍【文末有彩蛋~】

    1 Webpack 的特点 图片来源于网络 Webpack 是一款强大的打包工具.在 Webpack 中一切皆模块.Webpack 官网的 Banner 图完美地诠释了这一理念.Webpack 从一个 ...

  6. 江在川上曰:webpack前端工程化

    前端工程化 1.模块化相关规范 1.1浏览器端模块化规范 名称 文件 AMD Require.js CMD Sea.js 1.2 服务器端模块规范 common.js 1.3 大一统的模块化规范(ES ...

  7. 【webpack】前端工程化与webpack

    一.什么是前端工程化? 在现阶段的开发工作中,前端开发遵循4个现代化 模块化(js 的模块化.css 的模块化.其它资源的模块化) 组件化(复用现有的 UI 结构.样式.行为) 规范化(目录结构的划分 ...

  8. 前端工程化与WebPack

    前端工程化 前端开发: 模块化:js的模块化.css的模块化.其他资源的模块化 组件化:复用现有UI结构.样式.行为 规范化:目录结构划分.编码规范化.接口规范化.文档规范化.Git分支管理 自动化: ...

  9. (一)前端工程化与Webpack

    Vue2.0之前端工程化与Webpack 1. 前端工程化 1.1 小白眼中的前端开发 会写HTML+ CSS +JavaScript就会前端开发 需要美化页面样式,就拽一个bootstrap过来 需 ...

最新文章

  1. unity项目build成webgl时选择生成目录(解决方法)
  2. 面试官:你都工作3年了,连选择排序法都不会,我怎么能选择你
  3. Bellman-Ford 单源最短路径算法
  4. 如何查看自己的ubutu系统是32位的还是64位的
  5. java lambda sorted_Java8:Lambda表达式增强版Comparator和排序
  6. flutter 输入框限制输入 数字、小数
  7. 人工智能行业有哪些岗位_建筑行业“七大员”是哪些岗位?职责是什么?
  8. php 清除浮动,清除浮动的几种方法
  9. Silverlight 4 全屏
  10. java聊天室课程报告_java课程设计报告(java聊天室).doc
  11. Windows无法启动 VMware Workstation server错误1068依赖服务或组无法启动
  12. 通过js实现文字合成语音并播报
  13. Win10客户端 ssh 远程连接 win server 2008 R2服务器
  14. ML之SHAP:机器学习可解释性之SHAP值之理解单样本单特征预测
  15. 百度前端技术体系——百度EFE(Excellent FrontEnd)技术体系
  16. TCP三次握手四次挥手简介
  17. html5多屏互动游戏,2017TFC深度盘点:未来H5游戏的发展趋势 重度化强社交多屏互动...
  18. 「水花投资」投的是什么?
  19. 兼具高效与易用,融云 IM 即时通讯长连接协议设计思路
  20. SAP物料主数据所用标准表

热门文章

  1. 基于C++的自动驾驶公交车调度系统
  2. kotlin android 4,Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04)
  3. vue导出excel功能实现
  4. iphone怎么找出来计算机纪录,通话清单怎么查出来(通话记录清单怎么查)
  5. 有关计算机基础的论文,有关计算机基础论文范文
  6. php用while循环求偶数和,算法之求1到100(奇数、偶数)的和(for和while循环)
  7. SAP批次双单位CWM的系统实现
  8. 月薪60K技术专家,在阿里巴巴是什么水平?
  9. ELF文件——动态链接
  10. C# 内嵌 浏览器 CEF 、FireFox、Miniblink