webpack打包学习
从上图我们可以看出,webpack 可以将多种静态资源 js、css、sass文件等转换成一个静态文件,以此可以减少页面的请求,从而提高浏览器响应速度
1.安装开发依赖包
npm install webpack webpack-cli -D
2.添加打包配置文件
webpack.config.js(执行打包命令时会默认执行)
const path = require('path');
module.exports = {
//development:开发模式,production:生产(上线)模式
mode: 'development',
//打包文件的入口
//单个文件
entry: './src/index.js',
//多个文件
// entry: {
// index: './src/index.js',
// //other: './src/other.js'
// },
//打包文件的出口
output: {
//打包后的文件
//单个文件
filename: 'js/bundle.js',
//多个文件
//filename: 'js/[name].bundle.js',
//打包后的文件所在目录,对于webpack命令有效;
//而对于webpack-dev-server命令无效,其打包后存储在devServer开发服务器内存根目录下('/'),所以我们无法查看
path: path.join(__dirname, './dist')
},
};
3.打包命令
开发打包命令
npx webpack --watch(监听程序是否修改,若程序修改,自动重新打包)
或者
npm run dev (先在package.json文件的scripts选项添加 "dev":"webpack" 配置)
打包成功后,html文件就可以手动导入打包后所需的目标文件;
当然我们也可以事先安装好html-webpack-plugin插件,然后在webpack.config.js配置文件中设置相关配置,就不需要我们手动导入打包后的文件了,该插件可以帮助我们把打包后的文件自动注入到配置好的html文件中,该html文件也会在导出目录中自动创建。
生产(上线)打包命令
npx webpack -p(或者--production)
或者
npm run build (先在package.json文件的scripts选项添加 "build":"webpack -p" 配置)
4.devServer开发服务器(webpack自动打包工具)
安装开发依赖包:
npm install webpack-dev-server -D
打包命令:
npx webpack-dev-server
(1)打包后的文件默认会存放在devServer开发服务器内存的根目录下('/'),在电脑硬盘上是无法查看的,不过当我们用浏览器访问开发服务器时,可在浏览器调试窗口下的源代码选项查看
(2)打包成功后devServer开发服务器默认地址为:http://localhost:8080,当浏览器访问该地址时,默认会加载devSer开发服务器目录下的index.html文件,当然我们还应当安装html-webpack-plugin插件设置相关配置,才能自动生成index.html
或者
npm run start (先在package.json文件的scripts选项添加 "start":"webpack-dev-server --open --host 127.0.0.1 --port 8888" 配置)
相关参数
--open:自动打开浏览器
--host:指定主机名
--port:指定端口号
也可以在webpack.config.js文件设置devServer相关配置
const path = require('path');
module.exports = {
devServer: {
open: true,
host: '127.0.0.1',
port: 8888
//设置devServer开发服务器静态资源目录
//默认为项目的根目录(与package.json同路径)
contentBase: path.join(__dirname, './')
}
}
5.html页面预览插件(html-webpack-plugin)
npm i html-webpack-plugin -D
webpack.config.js文件相关配置
//html webpack打包成功后预览页面插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
const htmlPlugin = new HtmlWebpackPlugin({
//设置打包成功后预览页面的模板
template: './src/index.html',
//打包成功后,打包过后的文件会自动注入到模板文件中,设置最终生成的预览文件名
filename: 'index.html',
});
module.exports = {
plugins: [htmlPlugin]
}
6.打包css相关文件
打包css文件
npm i css-loader style-loader postcss-loader autoprefixer -D
webpack.config.js文件相关配置
module.exports = {
module: {
//配置规则
rules: [
//加载css样式配置
{
//匹配的文件类型,以.css后缀
test: /\.css$/,
//加载器从右往左处理
use: ['style-loader', 'css-loader', 'postcss-loader'] //postcss-loader用于自动添加前缀
}
]
}
}
postcss.config.js文件相关配置
//自动添加css前缀插件,配合postcss-loader使用
const autoprefixer = require('autoprefixer');
module.exports = {
plugins: [
autoprefixer
]
}
打包less文件
npm i css-loader style-loader less-loader less -D
webpack.config.js文件相关配置
module.exports = {
module: {
//配置规则
rules: [
//加载less样式配置
{
test: /\.less$/,
use: ['style-loader', 'css-loader', 'less-loader'] //less-loader依赖less核心包
}
]
}
}
打包scss文件
scss是sass基于css3规范的一种。
npm i css-loader style-loader sass-loader node-sass -D
webpack.config.js文件相关配置
module.exports = {
module: {
//配置规则
rules: [
//加载scss样式配置
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'] //sass-loader依赖node-sass核心包
}
]
}
}
7.打包图片/音频文件
npm i url-loader file-loader -D
webpack.config.js文件相关配置
module.exports = {
module: {
//配置规则
rules: [
//加载图片/字体配置
{
test: /\.(jpg|png|gif|bmp|eot|svg|woff|woff2)$/,
//url-loader依赖file-loader核心包,图片小于16940字节,会转化成base64格式,超过则不会转化,name参数为图片打包路径
//use: 'url-loader?limit=16940&name=images/[name].[ext]&esModule=false'
// 或者
loader: 'url-loader',
options: {
limit: 16940, //文件大小小于这个值,转为base64格式,超过保持原有格式
name: 'images/[name].[ext]', //文件大小超过限制时的存储路径,以及文件命名格式
esModule: false //src路径默认会解析成[object Module],因此设置不解析成Module
}
},
//加载音频文件配置
{
test: /\.(mp3)(\?.*)?$/,
use: 'url-loader?name=audio/[name].[ext]&esModule=false'
}
]
}
}
8.打包js文件(高级语法)
安装babel转换器相关包
npm i babel-loader @babel/core @babel/runtime -D
安装babel语法插件相关包
npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
webpack.config.js文件相关配置
module.exports = {
module: {
//配置规则
rules: [
//加载高级js语法文件配置
{
test: /\.js$/,
use: 'babel-loader',
exclude: [/node_modules/] //排除node_modules文件夹
}
]
}
}
babel.config.js文件相关配置
const presets = [
["@babel/preset-env",
{ //配置兼容的浏览器版本
targets: {
edge: "17",
firefox: "60",
chrome: "67",
safari: "11.1"
},
//配合@bable/polyfill(可以模拟完整的ES6+环境)
//假如参数值为"usage",babel将检查你的所有代码,查找目标环境中缺失的功能,然后只把必须的polyfill包含进来
//假如参数不是"usage",将会把完整的polyfill包含进来
useBuiltIns: "usage"
}
]
];
module.exports = {
//presets,
presets: ['@babel/preset-env'], //不配置targets,将转换所有ES6+代码为ES5兼容,一般不这样做
plugins: ['@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties']
}
9.打包vue文件
npm i vue-loader vue-template-compiler -D
webpack.config.js文件相关配置
const { VueLoaderPlugin } = require('vue-loader');
module.exports = {
plugins:[new VueLoaderPlugin()],
module: {
//配置规则
rules: [
//加载vue单文件组件配置
{
test: /\.vue$/,
loader: 'vue-loader'
}
]
}
}
10.清理dist目录插件
每次打包构建项目时,会先清理dist目录,再打包构建项目
npm i clean-webpack-plugin -D
webpack.config.js文件相关配置
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports = {
plugins:[new CleanWebpackPlugin()],
}
webpack打包学习的更多相关文章
- Webpack 打包学习
前段时间项目主管让测试组长研究webpack打包方式,闲暇时自己想学习一下,留着备用,本周日学习一下. https://www.jianshu.com/p/42e11515c10f
- 零基础学习webpack打包管理
这些天在项目之余的时间学习了webpack打包项目的东西,非常荣幸的找到一些大神的文章来学习,死劲嚼了几天,终于略知一二.在以后的工作上还需继续学习,下面我将分享我这几天学到的一点东西,希望能让我一个 ...
- Webpack打包工具学习使用
Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载.通过 ...
- webpack学习--创建一个webpack打包流程
创建一个webpack打包流程 首先安装webpack插件 mkdir webpack-demo && cd webpack-demo npm init -y npm install ...
- WebPack 简明学习教程
WebPack 简明学习教程 字数1291 阅读22812 评论11 喜欢35 WebPack是什么 一个打包工具 一个模块加载工具 各种资源都可以当成模块来处理 网站 http://webpack. ...
- Webpack入门——使用Webpack打包Angular项目的一个例子
2016.1.22,对大多数人来说,这是一个非常平常的日子,但这却是我决定在博客园写博客的日子.虽然注册博客园的博客已有4年8个月,却一直没有动手写过一篇博客,原因是觉得自己水平不行,写不出好东西,所 ...
- webpack打包The 'mode' option has not been set,错误提示
学习到webpack打包这个工具的时候,总是报错.在这里记录一下...... 我是window系统 当使用npm安装好webpack后,你去查看如果出现一下问题. 出现以上问题,我的做法是 先将web ...
- webpack打包和gulp打包工具详细教程
30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...
- webpack打包踩坑之TypeError: Cannot read property 'bindings' of null
file loader介绍:https://www.webpackjs.com/loaders/file-loader/ babel loader介绍:https://webpack.js.org/l ...
随机推荐
- docker学习笔记(3)- 镜像
简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...
- 逆置单链表(基于c语言)
直接插入全部代码:(reverseLinklist函数是逆置操作) #include <stdio.h> #include <stdlib.h> #include <as ...
- 关于OAuth2.0 Authorization Code + PKCE flow在原生客户端(Native App)下集成的一点思考
写在前面 前几天看了园友的一篇文章被广泛使用的OAuth2.0的密码模式已经废了,放弃吧 被再次提起: Implicit Flow Password Grant,均已被标记为Legacy,且OAuth ...
- 自定义函数实现atoi功能
思路: 列如char a[ ] ="123" "1" "2" "3' "\0" 首先遍历这个字符串 知道这个字 ...
- pip安装使用国内源的两种方法
pip安装后使用pip安装第三方库默认是国外源,一般安装慢连接不稳定,等得花儿都谢了,结果还告诉你安装失败..../(ㄒoㄒ)/~~ 这时我们就要想想其它办法啦,毕竟不能强求 国外不行,就只有国内了赛 ...
- 一文读懂蓝绿发布、A/B 测试和金丝雀发布的优缺点
作者 | 扬少 背景 目前,业界已经总结出了几种常见的服务发布策略来解决版本升级过程中带来的流量有损问题.本文首先会对这些普遍的发布策略进行简单的原理解析,最后结合阿里云的云原生网关对这些发布策略进行 ...
- 不想业务被中断?快来解锁华为云RDS for MySQL新特性
摘要:新特性上线!华为云RDS for MySQL又添新技能,实力保障业务连续性. 本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:Gauss ...
- 羽夏看Win系统内核—— x64 番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- Android中的Coroutine协程原理详解
前言 协程是一个并发方案.也是一种思想. 传统意义上的协程是单线程的,面对io密集型任务他的内存消耗更少,进而效率高.但是面对计算密集型的任务不如多线程并行运算效率高. 不同的语言对于协程都有不同的实 ...
- Mybatis框架基础入门(四)--SqlMapConfig.xml配置文件简介
SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器) o ...