【前端】webpack模块打包

简介: webpack模块打包

正文


重要知识点


1、将一个 JavaScript 文件直接通过 script 标签插入页面中与封装成 CommonJS 模块最大的不同在于,前者的顶层作用域是全局作用域,在进行变量及函数声明时会污染全局环境,而后者会形成一个属于模块自身的作用域,所有的变量及函数只有自己能访问。

2、CommonJS 与 ES6 Module 最本质的区别在于前者对模块依赖的解决是“动态的”,而后者是“静态的”。在这里“动态”的含义是,模块依赖关系的建立发生在代码运行阶段;而“静态”则是模块依赖关系的建立发生在代码编译阶段。在导入一个模块时,对于 CommonJS 来说获取的是一份导出值的拷贝;而在 ES6 Module 中则是值的动态映射,并且这个映射是只读的。

3、webpack.config.js 配置中,path 与 publicPath 的区别在于 path 指定的是资源的输出位置,而 publicPath指定的是间接资源的请求位置。


常用 loader


loader 的字面意思是装载器,在 Webpack 中它的实际功能则更像是预处理器。Webpack 本身只认识 JavaScript,对于其他类型的资源必须预先定义一个或多个 loader 对其进行转译,输出为 Webpack 能够接收的形式再继续进行,因此 loader 实际上是一个预处理的工作。

npm install css-loader style-loader --save

css-loader 的作用是处理 CSS 的各种加载语法(@import 和 url() 函数等),如果要使样式起作用还需要 style-loader 来把样式插入页面。

npm install babel-loader @babel/core @babel/preset-env --save

babel-loader 用来处理 ES6+ 并将其编译为 ES5 ,它是我们能够在工程中使用最新的语言特性(甚至还在提案中),同时不必特别关注这些特性在不同平台的兼容问题。

npm install ts-loader typescript core-js --save

ts-loader 与 babel-loader 的性质类似,它是用于连接 Webpack 与 Typescript 的模块。

npm install html-loader --save

html-loader 用于将 HTML 文件转化为字符串并进行格式化,这使得我们可以把一个 HTML 片段通过 JS 加载进来。

npm install file-loader --save

[webpack 5 已弃用] file-loader 用于打包文件类型的资源,并返回其 publicPath。

npm install url-loader --save

[webpack 5 已弃用] url-loader 与 file-loader 作用类似,唯一的不同在于用户可以设置一个文件大小的阈值,当大于阈值时与 file-loader 一样返回 publicPath,而小于该阈值时则返回文件 base64 形式编码。


备注


在配置 loader 时,实际上定义的是模块规则(module.rules),它主要关注两件事:该规则对哪些模块生效(test、exclude、include 配置),使用哪些 loader(use 配置)。loader 可以使链式的,并且每一个都允许拥有自己的配置项。


url-loader 和 file-loader 在 webpack 5 里的新方案


直接上代码

// {
            //     test: /\.(png|jpg|gif)$/,
            //     use: [
            //         {
            //             loader: 'file-loader',
            //             options: {
            //                 name: '[sha512:hash:base64:7].[ext]'
            //             }
            //         }
            //     ]
            // } // by 七镜 2021-12-06
            {
                test: /\.(png|jpg|gif)$/,
                type: 'asset/resource',
                generator: {
                    filename: 'static/[hash][ext][query]'
                }
            },
            {
                test: /\.svg/,
                type: 'asset/inline'
            }

可以看到,把之前的 *-loader 注释掉,添加新的 webpack 5 的 asset 配置就可以了,这里解释如下:

1.asset/resource 发送一个单独的文件并导出 URL。之前通过使用 file-loader 实现。

2.asset/inline 导出一个资源的 data URI。之前通过使用 url-loader 实现。

目录
相关文章
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
1690 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
678 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
587 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
1352 3
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
466 7
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
432 6
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
348 2
|
存储 JavaScript 前端开发
全栈开发实战|Vue进阶——使用静态模块打包工具webpack
全栈开发实战|Vue进阶——使用静态模块打包工具webpack
732 0
全栈开发实战|Vue进阶——使用静态模块打包工具webpack
|
JavaScript 前端开发
模块打包工具 webpack
webpack 支持 AMD 和 CommonJS 类型,通过 loader 机制也可以使用 ES6 的模块格式,通过一个 conf 文件,还能提供更加丰富的功能,支持多种静态文件,还有强大的 code spliting(代码拆分和异步加载) 对 conf 文件的解释:可以配置不同profile,如:可以实现一个webpack.
849 0
|
缓存 前端开发 JavaScript
Webpack 打包的基本原理
【10月更文挑战第5天】

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1257
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    570
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    434
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    434
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    548
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    724
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1413
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    315
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1168
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    509