草庐IT

前端工程化 Webpack基础

fanguangfe 2023-03-28 原文

前端工程化

  • 模块化 (js模块化,css模块化,其他资源模块化)
  • 组件化 (复用现有的UI结构、样式、行为)
  • 规范化 (目录结构的划分、编码规范化、接口规范化、文档规范化、Git分支管理)
  • 自动化 (自动化构建、自动部署、自动化测试)

webpack

  • 前端项目工程化的具体解决方案
  • 提供友好的前端模块化开发支持,以及代码压缩混淆、处理js兼容性、性能优化等强大功能

安装

  • 初始化项目
    npm init -y
  • 安装
    npm install webpack webpack-cli --save-dev
  • 根目录创建webpack配置文件 webpack.config.js
// webpack.config.js
module.exports = {
    ...
}

webpack.config.js 配置

1.mode模式

  • development
    • 开发环境
    • 不会对打包生成的文件进行代码压缩和性能优化
    • 打包速度快
  • production
    • 生产环境
    • 会对打包生成的文件进行代码压缩和性能优化
    • 打包速度慢
module.exports = {
    mode: 'development'
}

2.出入口文件

  • entry 打包文件入口,默认为:src/index.js
  • output 打包文件输出,默认为: dist/main.js
const path = require('path')
module.exports = {
    entry: path.join(__dirname, './src/index.js'),   // 入口文件
    output: {
        path: path.join(__dirname, './dist'),        // 输出目录
        filename: 'bundle.js'                        // 输出文件
    }
}

3.loader加载器

webpack文件加载器,webpack默认只能打包处理.js文件,其他非.js后缀文件需要loader加载器处理完成后才能进行打包

3-1. less, css等样式文件处理

  • 依赖安装 npm install style-loader css-loader less-loader --save-dev
  • rules配置添加规则: test表示匹配文件类型,use表示要调用的loader,调用顺序为从后往前
module.exports = {
    rules: [
        { test: /\.css$/, use: ['style-loader', 'css-loader'] },    // css文件处理
        { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },    // less文件处理
    ]
}

3-2. url路径相关文件处理,如图片、字体文件、csv、xml文件等

  • 依赖安装 npm install url-loader file-loader csv-loader xml-loader --save-dev
  • url-loader参数:limit指定图片大小,单位为Byte,<=limit大小图片,才会被转为base64格式图片
  • 参数配置为url参数与与options对象两种形式
module.exports = {
    rules: [
        // url参数形式配置
        { test: /\.jpg|png|gif$/, use: 'url-loader?limit=10000' },
        // url参数options形式配置
        {
            test: /\.jpg|png|gif$/,
            use: {
                loader: 'url-loader',
                options: { 
                    limit: 10000,
                    outputPath: 'image'       // 明确指定打包生成的图片文件存放到dist目录下的image文件夹中
                }
            }
        },
        // 字体文件
        {
            test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
            use: {
                loader: 'url-loader',
                options: { limit: 10000 }
            }
        },
        // csv文件
        {
            test: /\.(csv|tsv)$/i,
            use: {
                loader: 'csv-loader'
            }
        },
        // xml文件
        {
            test: /\.xml$/i,
            use: {
                loader: 'xml-loader'
            }
        }
    ]
}

3-3. js高级语法处理

  • 依赖安装 npm install ... --save-dev
名称 描述
@babel/core babel核心工具
@babel/preset-env babel预定义环境
babel-loader babel加载器,编译js文件用
core-js 使老版本浏览器兼容新版ES语法
module.exports = {
    rules: [
        {
            test: /\.js$/,
            use: {
                loader: 'babel-loader',
                options: {
                    // 设置预定义环境
                    presets: [
                        [
                            '@babel/preset-env',    // 指定环境的插件
                            // 配置信息
                            {
                                // 兼容的浏览器目标版本
                                targets: {
                                    'chrome': '58',
                                    'ie': '11'
                                },
                                // 指定core.js版本
                                'corejs': '3',
                                // 使用corejs方式 'usage':按需加载
                                'useBuiltIns': 'usage'
                            }
                        ]
                    ]
                }
            }
        }
    ]
}

4.webpack-dev-server

  • webpack 开发环境http服务器
  • 安装 npm install webpack-dev-server --save-dev
  • package.json配置scripts
"scripts": {
    "dev": "webpack serve"
}
  • 启动 npm run dev
  • webpack配置文件devServer节点
module.exports = {
    devServer: {
        open: true,             // npm run dev后,自动打开浏览器
        host: '127.0.0.1',      // 主机地址
        port: 8080              // 端口号,默认为8080
    }
}

5.插件

  • html-webpack-plugin 自定义输出index.html内容,会将打包好的bundle.js自动注入index.html的底部
    • 安装 npm install html-webpack-plugin --save-dev
    • plugins节点引入
const HtmlWebpackPlugin = require('html-webpack-plugin') 
module.exports = {
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'   // 指定入口自定义的html文件
        })
    ]
}
  • clean-webpack-plugin 打包时自动清理dist目录旧文件插件
    • 安装 npm install clean-webpack-plugin --save-dev
    • 引入
const CleanWebpackPlugin = require('clean-webpack-plugin')
module.exports = {
    plugins: [
        new CleanWebpackPlugin()
    ]
}

6.SourceMap

  • 存储代码压缩混淆前后的对应关系文件
  • 代码出错时,可以通过对应关系,直接显示原始代码出错位置,方便后期调试
  • sourceMap选项很多,具体可参考webpack devtool sourcemap
  • 常用选项为: source-map inline-source-map eval-source-map
module.exports = {
    // eval-source-map 使"运行报错的行数"与”源代码行数“保持一致,但性能较低
    devtool: 'eval-source-map'
}
  • 实践建议
    • 开发环境建议设置为 eval-source-map,可以精准定位到具体的错误行
    • 生成环境建议关闭sourceMap,或者设置值为 nosources-source-map,防止源码泄露,提高安全性

打包发布

  • package.json配置scripts
"scripts": {
    "build": "webpack --mode production"
}
  • 打包 npm run build

摘要

更多配置可查看官方文档

有关前端工程化 Webpack基础的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  3. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  4. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  5. ruby-on-rails - 在 Rails 应用程序的前端获取实时日志 - 2

    在Rails3.x应用程序中,我正在使用net::ssh并向远程pc运行一些命令。我想向用户的浏览器显示实时日志。比如,如果两个命令在net中运行::ssh执行即echo"Hello",echo"Bye"被传递然后"Hello"应该在执行后立即显示在浏览器中。这是代码我在ruby​​onrails应用程序中使用ssh连接和运行命令Net::SSH.start(@servers['local'],@machine_name,:password=>@machine_pwd,:timeout=>30)do|ssh|ssh.open_channeldo|channel|channel.requ

  6. ruby - 如何在转换器插件中访问页面属性(YAML 前端) - 2

    我正在为Jekyll编写一个转换器插件,需要访问一些页眉(YAML前端)属性。只有内容被传递给主要的转换器方法,似乎无法访问上下文。例子:moduleJekyllclassUpcaseConverter关于如何在转换器插件中访问页眉数据有什么想法吗? 最佳答案 基于Jekyll源代码,无法在转换器中检索YAML前端内容。根据您的情况,我看到了两种可行的解决方案。您的文件扩展名可以具有足够的描述性,以提供您本应包含在前言中的信息。看起来Converter插件的设计就是这么基本的。如果修改Jekyll是一个选项,您可以更改Convert

  7. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  8. c++基础-运算符 - 2

    目录1关系运算符2运算符优先级3关系表达式的书写代码实例:下面是面试中可能遇到的问题:1关系运算符C++中有6个关系运算符,用于比较两个值的大小关系,它们分别是:运算符描述==等于!=不等于小于>大于小于等于>=大于等于这些运算符返回一个布尔值,即true或false。例如,当x等于y时,x==y的结果为true,否则结果为false。2运算符优先级在C++中,关系运算符的优先级高于赋值运算符,但低于算术运算符。以下是关系运算符的优先级,从高到低排列:运算符描述>,,>=,关系运算符==,!=相等性运算符&&逻辑与`如果在表达式中有多个运算符,则按照优先级顺序依次进行运算。3关系表达式的书写在

  9. 计算机必读基础书籍 - 2

    一.计算机组成原理    这本书利用组合逻辑、同步时序逻辑电路设计的相关知识,从逻辑门开始逐步构建运算器、存储器、数据通路和控制器,最终集成为完整的CU原型系统,使读者从设计者的角度理解计算机部件构成及运行的基本原理,掌握软硬件协同的概念。    全书共9章,主要内容包括计算机系统概述、数据信息的表示、运算方法与运算器、存储系统、指令系统、中央处理器、指令流水线、总线系统、输入输出系统。1.计算机系统概述1.1计算机发展历程    计算机是一种能够按照事先存储的程序,自动、高速、准确地对相关信息进行处理的电子设备。1946年2月,世界上第一台电子数字计算机ENIAC(ElectronicNum

  10. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

随机推荐