前端工程化 webpack
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相关推荐
- 走近前端工程化-WebPack之loader的入门级知识
背景 最近自己在学习一些视频剪辑相关的工具,像爱剪辑,剪映这些软件.然后就想自己是不是也可以实现一个类似的,轻量级的在线剪辑工具.最后发现这个款node端的工具库FFCreator,接下来简单介绍一下 ...
- vue全套笔记,前端工程化+vue指令+脚手架
文章目录 一. 前端工程化 webpack 的基本使用 webpack 中的插件 webpack 中的 loader 打包发布 Source Map的使用 注意,实际开发不需要自己配置webpack ...
- 仿掘金社区全栈项目开发(二)-前端工程化
前端工程化 webpack 核心概念 看官方文档:https://webpack.docschina.org/concepts/ 小demo 参考博客:https://juejin.cn/post/6 ...
- 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML
基于webpack的前端工程化开发解决方案探索(一):动态生成HTML 参考文章: (1)基于webpack的前端工程化开发解决方案探索(一):动态生成HTML (2)https://www.cnbl ...
- 透视前端工程化之 Webpack 基本介绍【文末有彩蛋~】
1 Webpack 的特点 图片来源于网络 Webpack 是一款强大的打包工具.在 Webpack 中一切皆模块.Webpack 官网的 Banner 图完美地诠释了这一理念.Webpack 从一个 ...
- 江在川上曰:webpack前端工程化
前端工程化 1.模块化相关规范 1.1浏览器端模块化规范 名称 文件 AMD Require.js CMD Sea.js 1.2 服务器端模块规范 common.js 1.3 大一统的模块化规范(ES ...
- 【webpack】前端工程化与webpack
一.什么是前端工程化? 在现阶段的开发工作中,前端开发遵循4个现代化 模块化(js 的模块化.css 的模块化.其它资源的模块化) 组件化(复用现有的 UI 结构.样式.行为) 规范化(目录结构的划分 ...
- 前端工程化与WebPack
前端工程化 前端开发: 模块化:js的模块化.css的模块化.其他资源的模块化 组件化:复用现有UI结构.样式.行为 规范化:目录结构划分.编码规范化.接口规范化.文档规范化.Git分支管理 自动化: ...
- (一)前端工程化与Webpack
Vue2.0之前端工程化与Webpack 1. 前端工程化 1.1 小白眼中的前端开发 会写HTML+ CSS +JavaScript就会前端开发 需要美化页面样式,就拽一个bootstrap过来 需 ...
最新文章
- unity项目build成webgl时选择生成目录(解决方法)
- 面试官:你都工作3年了,连选择排序法都不会,我怎么能选择你
- Bellman-Ford 单源最短路径算法
- 如何查看自己的ubutu系统是32位的还是64位的
- java lambda sorted_Java8:Lambda表达式增强版Comparator和排序
- flutter 输入框限制输入 数字、小数
- 人工智能行业有哪些岗位_建筑行业“七大员”是哪些岗位?职责是什么?
- php 清除浮动,清除浮动的几种方法
- Silverlight 4 全屏
- java聊天室课程报告_java课程设计报告(java聊天室).doc
- Windows无法启动 VMware Workstation server错误1068依赖服务或组无法启动
- 通过js实现文字合成语音并播报
- Win10客户端 ssh 远程连接 win server 2008 R2服务器
- ML之SHAP:机器学习可解释性之SHAP值之理解单样本单特征预测
- 百度前端技术体系——百度EFE(Excellent FrontEnd)技术体系
- TCP三次握手四次挥手简介
- html5多屏互动游戏,2017TFC深度盘点:未来H5游戏的发展趋势 重度化强社交多屏互动...
- 「水花投资」投的是什么?
- 兼具高效与易用,融云 IM 即时通讯长连接协议设计思路
- SAP物料主数据所用标准表
热门文章
- 基于C++的自动驾驶公交车调度系统
- kotlin android 4,Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04)
- vue导出excel功能实现
- iphone怎么找出来计算机纪录,通话清单怎么查出来(通话记录清单怎么查)
- 有关计算机基础的论文,有关计算机基础论文范文
- php用while循环求偶数和,算法之求1到100(奇数、偶数)的和(for和while循环)
- SAP批次双单位CWM的系统实现
- 月薪60K技术专家,在阿里巴巴是什么水平?
- ELF文件——动态链接
- C# 内嵌 浏览器 CEF 、FireFox、Miniblink