首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让webpack只为特定的构建导入polyfills?

为了让Webpack只为特定的构建导入polyfills,可以使用Webpack的条件加载功能。条件加载允许根据不同的条件,只为特定的构建加载不同的代码块。

以下是一个示例配置,说明如何只为特定的构建导入polyfills:

  1. 首先,安装所需的依赖:
代码语言:txt
复制
npm install @babel/preset-env --save-dev
  1. 在Webpack的配置文件中,添加一个新的entry点,用于导入polyfills。假设我们要为IE浏览器导入polyfills,我们可以在entry中添加一个文件polyfills.js
代码语言:txt
复制
module.exports = {
  entry: {
    app: './src/index.js',
    polyfills: './src/polyfills.js'
  },
  output: {
    // 输出配置
  },
  module: {
    // 模块加载配置
  },
  // 其他配置项
};
  1. polyfills.js文件中,根据浏览器的特性和版本号,动态导入所需的polyfills。这可以使用@babel/preset-env来实现,它可以根据目标环境自动选择和加载polyfills。
代码语言:txt
复制
// polyfills.js

// 导入核心的polyfills
import 'core-js/stable';
import 'regenerator-runtime/runtime';

// 导入其他需要的polyfills
if (shouldLoadPromisePolyfill()) {
  import('core-js/features/promise');
}

// 根据浏览器的特性和版本号,判断是否需要加载Promise的polyfill
function shouldLoadPromisePolyfill() {
  return (
    !window.Promise || 
    (typeof window.Promise !== 'function') ||
    !window.Promise.prototype.finally
  );
}

在这个示例中,我们首先导入了必要的核心polyfills(例如core-js和regenerator-runtime)。然后,根据浏览器的特性和版本号,我们使用shouldLoadPromisePolyfill()函数判断是否需要加载Promise的polyfill。

  1. 使用@babel/preset-env配置Babel,以确保正确地转译和加载polyfills。在项目的根目录中,创建一个.babelrc文件,并添加以下内容:
代码语言:txt
复制
{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "corejs": 3
    }]
  ]
}

在这个示例中,我们使用了useBuiltIns: 'usage'配置,它会根据代码中的实际使用情况,自动导入所需的polyfills。corejs: 3指定了使用core-js版本3。

这样配置之后,Webpack会根据我们的入口文件配置,只为特定的构建导入相应的polyfills。

在实际开发中,可以根据目标浏览器的需求和项目的特定要求,进一步调整和优化polyfills的加载方式。

注意:上述示例中的代码只是一个简化的示例,实际应用中可能需要根据项目的具体需求进行更多的配置和定制化开发。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

webpack配置优化,构建速度飞起

前言越来越多项目使用webpack5来构建项目了,今天给大家带来最前沿webpack5配置,让我们代码在编译/运行时性能更好~我们会从以下角度来进行优化:提升打包构建速度减少代码体积优化代码运行性能提升打包构建速度在进行打包速度优化之前...通过以下命令安装插件:yarn add speed-measure-webpack-plugin -Dbuild就能看到各个部分打包耗时缩小构建范围 构建过程是默认全局查找,这非常耗时。...持久化缓存 cache: filesystem,来缓存生成 webpack 模块和 chunk,改善构建速度。...简单来说,通过 cache: filesystem 可以将构建过程 webpack 模板进行缓存,大幅提升二次构建速度、打包速度,当构建突然中断,二次进行构建时,可以直接从缓存中拉取,可提速 90%...如何获取 CPU 核数,因为每个电脑都不一样。

2.4K10
  • Webpack5 我头疼!

    Webpack 不再提供自动引用 polyfills。这是一个非常大突破性变化,也引起了很多争议,下面就是一位 NPM 包维护者对 Webpack5 吐槽。...虽然我意识到 Webpack 是 JavaScript 社区中一个重要工具,但我个人对它感觉是复杂,因为作为一个包维护者我感觉非常痛苦。...用户会认为每个 Webpack 工具/配置问题都是某个特定问题,要求对该软件包(而非Webpack)提供支持。仅在过去一年里,我就不得不处理数以百计 Webpack 问题。...我不打算在包中添加 polyfillsPolyfills包变大并且带来 bug ,我不想 Node.js 用户因此而感到不方便。 我不会做 Webpack 支持。...如何手动添加 polyfills 这是 Webpack 博客文章所说: 迁移:resolve.alias 和 ProvidePlugin ,错误会给出提示。

    74320

    ES5 在 Web 上现状

    最后一个支持 ES5 浏览器 IE 11 在 2022 年被微软停止支持,那么今天 Web 上 ES5 现状如何?在构建生产代码时,Web 开发者最佳实践是什么?...流行 JavaScript 库 除了查看流行构建工具外,还查看了一些当今最流行库(同样基于State of JS 调查,按受欢迎程度大致排序): 为了测试这些库中每一个,我创建了一个仅导入特定打包入口点...除非他们对构建管道各个部分如何相互作用有深刻理解,并且知道如何正确配置每一个部分,否则他们可能会在不知不觉中将 ES6+代码与 ES5 代码一起打包。...如果某个网站需要支持比Baseline Widely Available覆盖更多浏览器,这完全没问题。该网站可以始终配置其构建系统以进一步转译任何导入库。...主要观点 ES5 不再是构建工具或 JavaScript 库应该默认针对目标。 如果工具仍然希望提供 ES5 支持,这应该是有特定支持需求单个网站可以选择

    11910

    webpack配置优化,构建速度飞起_2023-02-28

    前言 越来越多项目使用webpack5来构建项目了,今天给大家带来最前沿webpack5配置,让我们代码在编译/运行时性能更好~ 我们会从以下角度来进行优化: 提升打包构建速度 减少代码体积 优化代码运行性能...通过以下命令安装插件: yarn add speed-measure-webpack-plugin -D build就能看到各个部分打包耗时 缩小构建范围 构建过程是默认全局查找,这非常耗时。...持久化缓存 cache: filesystem,来缓存生成 webpack 模块和 chunk,改善构建速度。...简单来说,通过 cache: filesystem 可以将构建过程 webpack 模板进行缓存,大幅提升二次构建速度、打包速度,当构建突然中断,二次进行构建时,可以直接从缓存中拉取,可提速 90%...如何获取 CPU 核数,因为每个电脑都不一样。

    2.2K10

    Webpack 5 正式发布

    1.2 不再为Node.js 模块自动引用PolyfillsWebpack 4 或之前版本中,任何项目引用 Node.js 内置模块都会自动添加 PolyfillsPolyfills是一个语法检查模版工具...不过,Webpack 5不再为 Node.js 内置模块自动添加 PolyfillsWebpack 5会投入更多精力到前端模块兼容性工作中。...从开发者角度来看,模块可以从指定远程构建导入,并以最小限制来使用。 4....10.8 排序与ID Webpack 曾经在编译阶段以特定方式对模块和代码块进行排序,以递增方式分配 ID。现在不再是这样了。...这些 dependencies 只在代码生成阶段使用,但在模块图构建过程中未使用。所以它们永远不能引用模块或影响导出/导入。这些依赖关系处理成本较低,Webpack 会尽可能地使用它们。

    1.2K10

    如何不基于构建工具优雅实现模块导入

    import dayjs from 'dayjs'; // webpack 在这些系统里,模块导入语句通过 Node.js 运行时或相关构建工具映射到特定(版本)文件。...由于开发人员已经熟悉了这种从 npm 导入方式,因此必须要先经过一个构建步骤才能确保以这种方式编写代码可以在浏览器中运行。...Import maps 就可以解决这个问题,它可以将模块说明符(包名)自动映射到它相对或绝对路径。从而让我们不使用构建工具也能使用简洁模块导入语法。...如何使用 Import maps 我们可以通过 HTML 中 标签来指定一个 Import maps。...: "/node_modules/lodash-es/" } } 这种编写方式可以你直接导入指定路径中任何模块,相应,浏览器也会把所有组件模块下载下来。

    1.3K20

    一日一技:在 Jupyter 中如何自动重新导入特定 模块?

    直接把这个模块代码与 Jupyter Notebook .ipynb 文件放在一起,然后在 Jupyter 里面像导入普通模块那样导入即可,如下图所示: ?...这是因为,一个 Jupyter Notebook 中所有代码,都是在同一个运行时中运行代码,当你多次导入同一个模块时,Python 包管理机制会自动忽略后面的导入,始终只使用第一次导入结果(所以使用这种方式也可以实现单例模式...那么如果我在修改了被导入包以后,想重新导入它怎么办呢?有3种方案: 重启整个 Notebook。但这样会导致当前运行时里面的所有变量全部丢失。 使用importlib: ?...它们作用是:第1行启动autoreload机制。第2行,设置自动加载通过%aimport导入模块。第3行使用%aimport导入analyze模块。...这样写以后,任意一个 Cell 运行,所有被%aimport导入模块都会被重新加载一次。从而你每次都使用最新代码。

    6.3K30

    如何自己实现一个简单webpack构建工具 【精读】

    webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要每个模块,然后将所有这些模块打包成一个或多个 bundle。...转换代码,编译代码,输出代码 4.最终形成打包后代码 webpack打包原理 1.先逐级递归识别依赖,构建依赖图谱 2.将代码转化成AST抽象语法树 下图是一个抽象语法树: ] 3.在AST阶段中去处理代码...4.把AST抽象语法树变成浏览器可以识别的代码, 然后输出 准备工作 在编写自己构建工具前,需要下载四个包。...yarn下载: $ yarn init -y $ yarn add @babel/parser @babel/traverse @babel/core @babel/preset-env 首先查看如何将最简单一个文件转换成...我理解: 这是一个发布-订阅模式 webpack运行时广播出事件,之前订阅这些事件订阅者们(其实就是插件)都触发对应事件,并且拿到全局webpack实例对象,再做一系列处理,就可以完成很复杂功能

    1K30

    一张图教你快速玩转vue-cli3

    前言 本文系统梳理了vue-cli3搭建项目的常见用法,目的在于你快速掌握独立搭建vue项目的能力。...vue.config.js定制自己webpack vue项目部署 说明 本文末尾会给出一个以上提到所有功能一个配置文件,可供大家学习参考。...,变量名因以 VUE_APP_开头,如下可获取定义环境变量: console.log(process.env.VUE_APP_SECRET) 7.如何在vue.config.js定制自己webpack.../usr/bin/env sh # 当发生错误时中止脚本 set -e # 构建 npm run build # cd 到构建输出目录 cd dist git init git add -A...使用Angular8和百度地图api开发《旅游清单》 js基本搜索算法实现与170万条数据下性能测试 《前端算法系列》如何前端代码速度提高60倍 《前端算法系列》数组去重 如何把控css方向感

    2K10

    2020前端性能优化清单(三)

    tree-shaking[9] 是一种清理构建产物方法,它构建结果只包含在生产中实际使用代码,并消除 Webpack 中未使用引入。...一旦在代码中定义了分割点,Webpack 就可以处理依赖关系和输出文件。它可以浏览器保持较小初始下载量,并在应用程序请求时按需请求代码。...这个想法是编译并提供两个单独 JavaScript 包:“常规”构建构建方式是,一个包含 Babel 转换和 polyfills,仅提供给实际需要它们旧版浏览器,另一个包(相同功能)不包含 Babel...Jeremy Wagne 发表了一篇关于差分服务以及如何在你构建流中设置它综合性文章[60],从 “Babel 设置”到“需要在 Webpack 中进行哪些调整”,以及“完成所有这些工作好处”文章中都有涉及...为了避免以上问题,请考虑使用 webpack-libs-optimizations[78] 在构建过程中删除未使用方法和 polyfills。 也将包审核添加到你日常工作流程中。

    2.2K20

    一张图教你快速玩转vue-cli3

    前言 本文系统梳理了vue-cli3搭建项目的常见用法,目的在于你快速掌握独立搭建vue项目的能力。...你将会了解如下知识点: 如何安装项目插件 添加浏览器支持 如何配置scss/stylus共享全局变量 如何整合elementUI等第三方框架并实现按需引入 配置单/多页面 如何配置自定义环境变量 如何在...vue.config.js定制自己webpack vue项目部署 说明 本文末尾会给出一个以上提到所有功能一个配置文件,可供大家学习参考。...,变量名因以 VUEAPP开头,如下可获取定义环境变量: console.log(process.env.VUE_APP_SECRET) 7.如何在vue.config.js定制自己webpack.../usr/bin/env sh # 当发生错误时中止脚本 set -e # 构建 npm run build # cd 到构建输出目录 cd dist git init git add -A

    3.1K80

    2020前端性能优化清单(三)

    tree-shaking[9] 是一种清理构建产物方法,它构建结果只包含在生产中实际使用代码,并消除 Webpack 中未使用引入。...一旦在代码中定义了分割点,Webpack 就可以处理依赖关系和输出文件。它可以浏览器保持较小初始下载量,并在应用程序请求时按需请求代码。...这个想法是编译并提供两个单独 JavaScript 包:“常规”构建构建方式是,一个包含 Babel 转换和 polyfills,仅提供给实际需要它们旧版浏览器,另一个包(相同功能)不包含 Babel...Jeremy Wagne 发表了一篇关于差分服务以及如何在你构建流中设置它综合性文章[60],从 “Babel 设置”到“需要在 Webpack 中进行哪些调整”,以及“完成所有这些工作好处”文章中都有涉及...为了避免以上问题,请考虑使用 webpack-libs-optimizations[78] 在构建过程中删除未使用方法和 polyfills。 也将包审核添加到你日常工作流程中。

    2.1K10

    Vue项目兼容IE11

    下述主要阐述如何使用 vue-cli3 脚手架搭建工程支持 IE11。 现象 IE11 打开 Vue 工程(Vue CLI)构建而来出现空白页,控制台告警、报错。...如果该依赖交付了 ES5 代码并显式地列出了需要 polyfill: 你可以使用 @vue/babel-preset-app polyfills 选项预包含所需要 polyfill。....promise', 'es6.symbol' ] }] ] } 提示: 我们推荐以这种方式添加 polyfill 而不是在源代码中直接导入它们,因为如果这里列出...这会根据 browserslist 目标导入所有 polyfill,这样你就不用再担心依赖 polyfill 问题了,但是因为包含了一些没有用到 polyfill 所以最终包大小可能会增加。...总结 总之,所有的处理都是围绕转换成 IE11 可以兼容方式去处理。对于 JavaScript 语法,即是对 babel 控制;对于 CSS 语法,需要特定分析。

    7.1K41

    阔别两年,webpack 5 正式发布了!

    不再为 Node.js 模块 自动引用 Polyfills 不再为 Node.js 内置模块自动添加 Polyfills。...任何项目中有引用 Node.js 内置模块,在 webpack 4 或之前版本中会自动添加 Polyfills。...如果你代码中有引用这些 Node.js 模块,要升级到 webpack 5, 将尽量使用前端模块,或者自行手动添加适合 Polyfills。...从开发者角度来看,模块可以从指定远程构建导入,并以最小限制来使用。 支持崭新 Web 平台功能 对于 Web 平台一些支持 ,Webpack 5 也做了更好完善更新。...排序与 ID webpack 曾经在编译阶段以特定方式对模块和代码块进行排序,以递增方式分配 ID。现在不再是这样了。顺序将不再用于 ID 生成,取而代之是,ID 生成完全控制在插件中。

    1.7K32

    阔别两年,webpack 5 正式发布了!

    不再为 Node.js 模块 自动引用 Polyfills 不再为 Node.js 内置模块自动添加 Polyfills。...任何项目中有引用 Node.js 内置模块,在 webpack 4 或之前版本中会自动添加 Polyfills。...如果你代码中有引用这些 Node.js 模块,要升级到 webpack 5, 将尽量使用前端模块,或者自行手动添加适合 Polyfills。...从开发者角度来看,模块可以从指定远程构建导入,并以最小限制来使用。 支持崭新 Web 平台功能 对于 Web 平台一些支持 ,Webpack 5 也做了更好完善更新。...排序与 ID webpack 曾经在编译阶段以特定方式对模块和代码块进行排序,以递增方式分配 ID。现在不再是这样了。顺序将不再用于 ID 生成,取而代之是,ID 生成完全控制在插件中。

    1K31
    领券