webpack前端应用之基础打包

news/2024/10/30 11:31:37/

目录

前言:初识 Webpack 5

一、前端工程化

1、webpack

​ (2)主要功能:

2、webpack的使用:配置文件所需要的信息(五大配置属性)

3、示例

        强调:

4、webpack中使用的loader

二、webpack配置详解


前言:初识 Webpack 5

        webpack 是一个静态资源的打包工具,会以一个或多个文件为入口,将这一个或多个文件直接或间接使用到的所有文件,组合成一个或多个文件输出。输出的文件就是编译好的文件,通常称其为 bundle,可以在浏览器上运行。Webpack 本身能力有限,在不添加 loader、plugin等扩展时能力有限。

        Webpack 能让前端具有 模块化 和 工程化。

一、前端工程化

1、webpack

(1)定义:是一个前端的构建工具。前端代码格式多(html、css、js、图片),前端构建工具的作用是将各种格式不同文件打包到一起,方便项目的上线运行。(将开发环境的代码转换成运行环境的代码)

开发环境的代码:便于阅读

运行环境的代码:能够更快的执行(通常会对代码进行压缩)

​ (2)主要功能:

​ A、代码压缩:将js代码、css代码、静态的资源文件(图标、图像)等进行混合压缩,使代码的体积变小、加载速度更快

B、统一编译语法:css、less、sass,ES6语法、TypeScript语法等,语法要求不同在不同浏览器上运行时会出现问题,就需 要使用构建工具进行统一编译

C、模块化处理:css、js都有自己的模块化处理方式,对于这些模块化的语法在不同浏览器上的兼容性很差,需要使用构建工具统一模块化的形式,提高兼容性

2、webpack的使用:配置文件所需要的信息(五大配置属性)

(1)entry(入口配置):配置打包的入口文件(即从项目的哪个文件开始打包)

(2)output(输出配置):配置打包后的文件,名称是什么、存储路径是什么

         path:指明存储路径

         filename:指定打包后的文件名

         clean:指定打包前是否清空打包的输出目录

(3)Loaders(加载器):webpack只能处理js、json等文件,若需要打包处理其他格式的文件(css、less、sass、vue、图片)时需要使用不同的loader(插件)辅助完成。若安装了不同的loader,需要在webpack的配置中通过module.rules进行配置

(4)plugins (插件):扩展webpack的功能。如html插件

(5)mode(打包的模式): webpack 有两种打包模式:生产模式 production 和 开发模式 development。两种模式都只能编译ES6中的模块(Module)语法。

3、示例

(1)创建文件夹(根目录): webpack-study

(2)进入该文件夹,打开cmd窗口(vs code终端)

​(3)将该文件夹初始化为npm项目:npm init

(4)安装 webpack 开发依赖:npm install webpack webpack-cli -D

        或 npm install  webpack  -D

            npm install  webpack-cli  -D

        强调:

​         A、使用npm安装包时,若没有指定版本号,默认安装最新版本

         B、package.json文件中dependencies键的含义是发布后还依赖的,devDependencies键的

                含义是开发时的依赖

​         C、npm install —save:将依赖包安装到dependencies键下;npm install —save-dev将依赖

                包安装到devDependencies键下

         D、i 是 install 的缩写,-D 是 —save-dev 的缩写(即在开发时的依赖)

​ (5)项目的目录结构:

 (6)写代码

​ (7)在项目的根目录下创建webpack的配置文件:webpack.config.js

/*** webpack的基本打包配置有: entry、output、mode 三项即可*/
const path = require('path');
module.exports = {entry:'./src/main.js',//配置打包入口文件output:{//输出配置path: path.join(__dirname,'dist'),//配置输出文件的保存位置filename:'js/bundle.js',//打包后的文件名clean: true,//打包前是否将打包的输出目录清空},mode:'development'//以开发模式打包
}

(8)在package.json文件中配置打包指令

  1. "scripts": {
  2. "build": "webpack"
  3. }

​ (9)运行打包指令进行打包

​ (10)将打包后的js文件导入页面文件(index.html)中

4、webpack中使用的loader

​ (1)url-loader用来打包图像文件

(2)’style-loader’, ‘css-loader’, ‘less-loader’:用来打包样式文件

(3)babel-loader:打包js文件

(4)vue-loader:打包.vue文件

 此处附加 webpack官网

二、webpack配置详解

const { resolve } = require('path'); // node 内置核心模块,用来处理路径问题。
module.exports = { mode: 'development' //开发环境   production  //生产环境entry: './src/js/index.js', //  单入口文件// entry: {                     //多入口  会打包双方重复文件//   index: './src/index.js',//   another: './src/another-module.js'// },// entry: {                     //多入口   lodash不会重复打包//   index: { import: './src/index.js', dependOn: 'shared' },//   another: { import: './src/another-module.js', dependOn: 'shared' },//   shared: 'lodash' //不会重复打包// },output: { // 输出配置//filename: './built.js', // 输出文件名 path: resolve(__dirname, 'dist'),  //打包后的输出位置 webpack当前目录下的  dist//contenthash根据内容变化生成文件名 不变不修改名字会用缓存filename: 'scripts/[name].[contenthash].js', //'bundle.js',      //打包后的文件名  多个入口不能写固定一个名字clean: true,   //打包后清除上次内容assetModuleFilename: 'images/[contenthash][ext]', //静态文件打包地址/文件名publicPath: ''},// devtool: 'inline-source-map',  //打包后找到真实源代码位置devServer: {            //实时更新static: './dist', hot: true,   //开启热更新compress: true, // 启动gzip压缩port: 3000, // 端口号open: true // 自动打开浏览器proxy: {   //代理'/api': {target: 'http://localhost:4000',changeOrigin: true,ws: true,pathRewrite: {'^/api': ''}}}},module: {rules: [// 详细loader配置// 不同文件必须配置不同loader处理{test: /\.(jpg|gif|png)/,use: 'url-loader',option: {// 图片大小小于8kb,就会被base64处理// 优点: 减少请求数量(减轻服务器压力)// 缺点:图片体积会更大(文件请求速度更慢)esModule: true,limint: 5 * 1024,    //图片是否转base64name: '[hash: 10].[ext]'  //图片命名}},{test: /\.(css|less)$/,// use: ['style-loader', 'css-loader', 'less-loader']  //从后往前编译 先解析在编译  行内样式use: ['MinCssExtractPlugin.loader', 'css-loader', 'less-loader'], //把css文件打包到一个css 用link引入到html中},{test: /\.js$/,exclude: /node_modules/, // 不打包指定路径下的js文件use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env'],plugins: [['@babel/plugin-transform-runtime'  //为promise解决]]}}},]},plugins: [
webpack.HotModuleReplacementPlugin(), //热更新new HtmlWebpackPlugin({template: './index.html', //要打包的htmlfilename: 'app.html',  //html打包后的名字inject: 'body',   //script 标签生成地址collapseWhitespace: true,  //压缩移除空格removeComments: true,  //压缩移除注释}),new MinCssExtractPlugin({   //把css文件打包到一个新css 用link引入到html中 可修改地址/文件名filename: 'styles/[contenthash].css'})],optimization: {minimizer: [new CssMinimizerWebpackPlugin()  //还需将mode改为production  会压缩css代码],splitChunks: {// chunks: 'all',// 公共文件 lodash不会重复打包cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chuns: 'all'}}}}
};

http://www.ppmy.cn/news/21439.html

相关文章

Linux常用命令——pvscan命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) pvscan 扫描系统中所有硬盘的物理卷列表 补充说明 pvscan命令会扫描系统中连接的所有硬盘,列出找到的物理卷列表。使用pvscan命令的-n选项可以显示硬盘中的不属于任何卷组的物理卷,这些…

java.lang.IllegalStateException: unread block data

Spark 通过HIVE ON HBASE表读取数据源,报错:unread block data 具体错误信息示例如下: 18/03/19 20:46:54 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0) java.lang.IllegalStateException: unread block dataat java.io.Obj…

【JavaSE】ArrayList的扩容机制源码分析

文章目录1. ArrayList概述2. ArrayList构造方法源码分析3. ArrayList.add()源码分析4. ArrayList.addAll()源码分析5. 总结1. ArrayList概述 ArrayList是Java集合框架中比较常用的一个数据结构了,它底层是基于数组实现的。数组是固定大小的,但是ArrayLi…

C++入门:变量类型

变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的类型间是可以互相转换的,转换又分为自动转换和强制转换。…

C++基础知识点整理笔记(五)

14. 类中 private,protect,public 三种访问限制类型的区别 (一) private 是私有类型,只有本类中的成员函数访问;(二) protect 是保护型的,本类和继承类可以访问;(三) public 是公有类型,任何类都可以访问. 15. struct…

消息队列简介

提高系统性能首先考虑的是数据库的优化,之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中,针对数据库需要注意的事项。但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所有我们一般会尽量把流量都挡在数据库…

spring中的JSR-303统一校验

1.在前后端的传输参数的过程中数据在何处校验? 在前后端都需要进行校验,只是分工不同. 2.各个层的校验内容: 1.Controller层主要负责校验残水的合法性,包括: 必填的参数字段,数据格式的校验 2.Service层的业务校验是审核业务中的规则的相关内容,比如:课程已经审核通过所以提…

SpringCloud_Alibaba Sentinel实现熔断与限流

目录一、Sentinel介绍1.官网2.是什么3.能干嘛4.去哪下5.怎么玩二、安装Sentinel控制台1.sentinel组件由2部分组成2.安装步骤三、初始化演示工程1.启动Nacos8848成功2.案例3.启动Sentinel80804.启动微服务84015.启动8401微服务后查看sentienl控制台四、流控规则1.基本介绍2.流控…