webpack之babel配置和HMR

简介: webpack 是前端开发最常用的模块打包器之一,我们可能是使用github上提供的脚手架如react-boilerplate,也有可能根据自己的项目来写webpack配置。无论你是属于哪一种情况,你还是要熟悉webpack的相关配置才能更好的使用它。

webpack 是前端开发最常用的模块打包器之一,我们可能是使用github上提供的脚手架如react-boilerplate,也有可能根据自己的项目来写webpack配置。无论你是属于哪一种情况,你还是要熟悉webpack的相关配置才能更好的使用它。

接下来主要介绍webpack中的babel配置和HMR两块内容。

babel

Babel 是一个 JavaScript 编译器。 通过编译转换允许你立刻使用新语法,无需等待浏览器支持。

现在babel的版本是6.x,下面提到的知识点都是基于这个版本的。

.babelrc

.babelrc 是用来配置转码的规则和插件的。

{
  // 倒序编译
  "presets": [
    "env",
    "react"
    "stage-2",
  ],
  "plugins": ["transform-runtime"],
}
复制代码

presets是一堆plugins的预设,起到方便的作用。

plugins是编码转化工具,babel会根据你配置的插件对代码进行相应的转化。

除了presets和plguins配置,babel还支持对应的环境下相关配置。

"env": {
    "production": {
      "plugins": ["transform-react-constant-elements"]
    }
  }
复制代码

babel-preset-env

babel-preset-env 默认情况下是等于 ES2015 + ES2016 + ES2017,也就是说它对这三个版本的ES语法进行转化。

这个preset提供了一些配置,如下面通过配置针对各个浏览器的最新的两个版本,以及safari的版本7及以上进行转码

{
  "presets": [
    ["env", {
      "targets": {
        "browsers": ["last 2 versions", "safari >= 7"]
      }
    }]
  ]
}
复制代码

babel-preset-stage-n

ECMAScript标准的制定流程包含下面几个阶段。

  • Stage 0 - Strawman(展示阶段)
  • Stage 1 - Proposal(征求意见阶段)
  • Stage 2 - Draft(草案阶段)
  • Stage 3 - Candidate(候选人阶段)
  • Stage 4 - Finished(定案阶段)

babel-preset-stage-n 包括了 babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2, babel-preset-stage-3。

那么为什么没有babel-preset-stage-4呢?第四阶段属于定案完成阶段了,相关的内容就在上边的babel-preset-env中。

各个stage之间是包含关系,stage-0会包含stage-1, stage-2, stage-3, 如此类推。

每个stage都包含相应的插件,个人常用的是stage-2,包含插件有类属性语法、装饰器语法、对象展开操作、async/await等。

babel-preset-react

这个预设就是包含了react开发所需的相关插件,支持react开发相关语法。

babel-polyfill

Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API ,比如 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign)都不会转码。

如上述所说,对于新的API,你可能需要引入babel-polyfill来进行兼容

安装和使用:

npm install --save babel-polyfill
+ import "babel-polyfill"
+ module.exports = { entry: ['babel-polyfill', './app/js'] }
复制代码

关键点:

  • babel-polyfill 是为了模拟一个完整的ES2015+环境,旨在用于应用程序而不是库/工具。
  • babel-polyfill 会污染全局作用域

babel-runtime 和 transform-runtime

babel-runtime的作用:

  • 提取辅助函数。ES6转码时,babel 会需要一些辅助函数,例如 _extend。babel 默认会将这些辅助函数内联到每一个 js 文件里, babel 提供了 transform-runtime 来将这些辅助函数“搬”到一个单独的模块 babel-runtime 中,这样做能减小项目文件的大小。
  • 提供polyfill:不会污染全局作用域,但是不支持实例方法如Array.includes

安装:

npm install --save-dev babel-plugin-transform-runtime
npm install --save babel-runtime
复制代码

babel-runtime 更像是分散的 polyfill 模块,需要在各自的模块里单独引入,借助 transform-runtime 插件来自动化处理这一切,也就是说你不要在文件开头import相关的polyfill,你只需使用,transform-runtime会帮你引入。

babel-runtime一般用在库的开发

HMR

两种方式都可以实现热加载。

CLI方式

  1. package.json 增加 --hot
"dev": "webpack-dev-server --color --progress --hot"
复制代码
  1. src/index.js 增加module.hot.accept(),如下。当模块更新的时候,通知index.js
if (module.hot) {
    module.hot.accept();
}

console.log('hot module replacement work')
复制代码

Node.js API方式

  1. webpack.config.js
const webpack = require('webpack');

devServer: {
    hot: true
}

plugins:[
     new webpack.HotModuleReplacementPlugin()
]
复制代码
  1. src/index.js 增加module.hot.accept(),如下。当模块更新的时候,通知index.js

相关参考



原文发布时间为:2018年07月01日

原文作者:Skandar-Ln


本文来源:掘金 如需转载请联系原作者

相关文章
|
20天前
|
JavaScript 前端开发 UED
如何配置 Webpack 进行代码分离?
通过以上方法,可以有效地配置Webpack进行代码分离,根据项目的具体需求和场景选择合适的方式,能够显著提高应用的性能和用户体验。在实际应用中,还可以结合其他优化技术,进一步优化Webpack的打包结果和应用的加载速度。
37 5
|
20天前
|
前端开发 JavaScript
webpack相关配置
以上只是Webpack配置的一些常见部分,实际应用中还可以根据具体的项目需求和场景进行更复杂和细致的配置,以满足不同的构建和优化要求。
36 2
|
20天前
|
缓存 JavaScript 前端开发
配置 Webpack 进行代码分离的常见方法有哪些?
通过以上常见方法,可以根据项目的具体需求和场景,灵活地配置Webpack进行代码分离,从而提高应用的性能和加载速度,优化用户体验。
23 3
|
27天前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
42 6
|
29天前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
63 7
|
1月前
|
前端开发
配置 Webpack 实现热更新
【10月更文挑战第23天】还可以进一步深入探讨热更新的具体实现细节、不同场景下的应用案例,以及如何针对特定需求进行优化等方面的内容。通过全面、系统地了解 Webpack 热更新的配置方法,能够更好地利用这一功能,提升项目的开发效率和性能表现。同时,要不断关注 Webpack 及相关技术的发展动态,以便及时掌握最新的热更新技术和最佳实践。
|
28天前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
35 2
|
1月前
|
监控 前端开发 JavaScript
Webpack 中 HMR 插件的工作原理
【10月更文挑战第23天】可以进一步深入探讨 HMR 工作原理的具体细节、不同场景下的应用案例,以及与其他相关技术的结合应用等方面的内容。通过全面、系统地了解 HMR 插件的工作原理,能够更好地利用这一功能,为项目的成功开发提供有力保障。同时,要不断关注技术的发展动态,以便及时掌握最新的 HMR 技术和最佳实践。
|
1月前
|
存储 缓存 监控
配置 Webpack 5 持久化缓存时需要注意哪些安全问题?
【10月更文挑战第23天】通过全面、系统地分析和应对安全问题,能够更好地保障 Webpack 5 持久化缓存的安全,为项目的成功构建和运行提供坚实的安全基础。同时,要保持对安全技术的关注和学习,不断提升安全防范能力,以应对日益复杂的安全挑战。
|
2月前
|
前端开发 UED
Webpack 中处理 CSS 和图片资源的多 Loader 配置
【10月更文挑战第12天】 处理 CSS 和图片资源是 Webpack 配置中的重要部分。通过合理选择和配置多个 Loader,可以实现对这些资源的精细处理和优化,提升项目的性能和用户体验。在实际应用中,需要不断探索和实践,根据项目的具体情况进行灵活调整和优化,以达到最佳的处理效果。通过对 Webpack 中多 Loader 处理 CSS 和图片资源的深入了解和掌握,你将能够更好地应对各种复杂的资源处理需求,为项目的成功构建和运行提供坚实的基础。
61 1