关于babel7:如何添加-babel-polyfill

因为 Babel 7.4 之后不再举荐应用 @babel/polyfill,而 @babel/preset-env 和 plugin-transform-runtime 二者都能够设置 corejs 来解决 polyfill。 @babel/polyfill废除的次要起因有: 此包仅仅是引入了 stable core-js 和 regenerator-runtime/runtime,其中后者能够应用插件 @babel/plugin-transform-regenerator 代替。此包不能从core-js@2 平滑过渡到 core-js@3。Babel 简介简略来说,Babel 是一个编译器,次要用于将采纳 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便可能运行在新旧版本的浏览器等各个环境中。而 Babel 代码转换性能以 plugin 的形式实现,plugin 就是小型的 JavaScript 程序。 preset能够被看作是一组 Babel 插件或 options 配置的可共享模块。 plugins 在 presets 前运行;plugins 从前往后程序执行;presets 依据排列程序倒序执行;babel 次要实现的两个性能:转换新语法。将新版 js 语法用旧版语法实现,从而在对应环境中运行,比方箭头函数;转换新 API。为旧版运行时打补丁(也被称为polyfill),从而应用在新版 js 中定义但在旧版运行时提供的性能,包含三类: 新定义的内置对象,例如 Promise原有内置对象新增加的静态方法,例如 Array.from原有内置对象新增加的实例办法,例如 Array.prototype.includespreset-envpreset-env 既能够转换新语法,也能够通过配置转换新的 API。preset-env 的 polyfill 会净化全局环境。 target这个字段能够填写 browserslist 的查问字符串,官网举荐应用 .browserslistrc 文件去指明编译的 target,这个配置文件还能够和autoprefixer、stylelint等工具一起共享配置。所以不举荐在.babelrc的preset-env配置中间接应用targets进行配置。 如果须要独自在这里配置targets的话,preset-env中指明ignoreBrowserslistConfig为true则疏忽.browserslistrc的配置项。useBuiltIns是否应用其polyfill性能(全局环境的core-js)。有三个值: ...

March 29, 2022 · 2 min · jiezi

关于babel7:工程化篇JS兼容方案

兼容计划的背景面临的问题尽管JS很多语法曾经到了正式公布的阶段,然而因为浏览器的反对水平不同导致咱们无奈释怀的应用。有些曾经到了 stage3 的语法咱们也想尝试应用,如何失常运行?现实的场景咱们能够释怀的编写js代码,不必思考其余问题。 如何实现在编译的时候通过一种办法让浏览器不反对的语法转换成浏览器反对的语法,这样代码就能够失常运行。 通过语法转换实现代码兼容前端我的项目通常采纳 babel 来转换 js 代码,写这篇文章的时候最新的版本是 babel v7, 上面的计划也会只介绍在这个版本下的。 明确指标在实现计划之前咱们须要想分明几个问题: 须要兼容哪些语法: 依据 TC39,你用到了 stage-x(x: 1-4) 的语法不同浏览器对语法反对水平不同, 你要解决哪些浏览器的兼容代码兼容的解决形式是按需引入还是全副引入(各有优劣,接下来会介绍)思考 3 min ... 计划实现简略介绍 babel 相干常识polyfill 计划计划@babel/preset-env + corejs@3 特点 通过 useBuiltIns配置,能够采纳按需加载和全副加载的形式实现兼容会净化全局:在全局和实例上增加api反对指标浏览器设置: 通过 targets 或 browserslist, 可是实现特定浏览器下的兼容,缩小代码体积介绍core-js:Javascript 规范语法实现库@babel/preset-env: 一系列语法转换 plugin 的汇合,它反对的 plugin 能够参考这里。通过这些plugin 能够实现语法兼容。能够通过 browserslist 实现针对特定浏览器下的 api 兼容: 简略来说就是 browserslist 会依据 caniuse 上的数据和指标浏览器比照得出须要兼容哪些api。具体的能够深刻了解 browserslist注意事项 @babel/preset-env 兼容到 stage4也就是正式版。如果要应用 stage3这种语法,须要在 bablerc plugins外面再引入对应 plugin你须要配置 targets 或 browserslist 能力实现特定浏览器语法兼容形式一: 全副引入.babelrc 文件内容: { "presets": [ [ "@babel/preset-env", { "useBuiltIns": "entry", "targets":"> 1%, not dead", // 依据状况本人设置 "corejs": { "version": 3, "proposals": true } } ] ], "plugins": [ [ "@babel/plugin-transform-runtime", { "corejs": false } ] ]}入口文件 index.js: ...

February 7, 2022 · 2 min · jiezi

关于SegmentFault:babel7知识

平时在开发的过程中,咱们可能并不太须要非常理解babel的内容,仅仅晓得它可能将新个性的代码转换成可能在旧版本浏览器中运行的代码。然而这一次想要趁着本人搭建脚手架的机会去进一步的理解babel的常识,所以写了这篇文章。以下内容是babel 7.4之后的版本,也就是@babel/polyfill被废除须要独立装置core-js 和 regenerator-runtime 模块的版本。 babel命令行工具 @babel/cli@babel/cli是babel的命令行工具,次要提供babel命令。另外还须要装置@babel/core能力应用babel去编译。 npm install --save-dev @babel/core @babel/cli将命令配置在 package.json 文件的 scripts 字段中: // package.json"scripts": { "compiler": "babel src --out-dir lib --watch"}这样就可能通过npm run compiler来执行编译,然而babel自身什么都不做,须要增加插件来帮忙babel实现工作。 pluginbabel所有性能都建设在各种的plugin上,应用形式是装置相应的plugin再去配置文件中去应用。例如箭头函数转换插件,装置@babel/plugin-transform-arrow-functions,而后在.babelrc配置文件中去指定对应的插件 //.babelrc{ plugins: ["@babel/plugin-transform-arrow-functions"],};而后执行npm run compiler,能够看到箭头函数曾经被编译实现 然而如果咱们每个性能都去一个个增加对应的plugin会很麻烦,多以咱们就须要preset预设去间接增加一组插件。 presetpreset就是一组插件的汇合,最罕用的preset就是@babel/preset-env。 @babel/preset-env它的作用是依据指标环境去进行语法转换和导入对应的polyfill。 须要留神的是,@babel/preset-env会依据你配置的指标环境,生成插件列表来编译。默认状况下,如果你没有在 Babel 配置文件中(如 .babelrc)设置 targets 或 ignoreBrowserslistConfig,@babel/preset-env 会应用 package.json的browserslist 配置源。 咱们能够模仿生产环境和开发环境的浏览器版本 const product = ["ie >= 9"];const development = ["last 2 Chrome versions"];通过设置不同浏览器环境应用@babel/preset-env去编译雷同代码,能够看到最终的后果也会不同。 module.exports = { presets: [ [ "@babel/preset-env", { // targets: product, targets: development, }, ], ],};babel 只负责对语法进行编译,比方当咱们写箭头函数,babel 会帮你把它编译成一般函数。然而对一些新的扩大办法,新的类来说babel就不能转换了。这时就须要去引入polyfill,polyfill的中文意思是垫片,所谓垫片就是垫平不同浏览器或者不同环境下的差别,让新的内置函数、实例办法等在低版本浏览器中也能够应用。 ...

January 19, 2021 · 2 min · jiezi

关于babel7:使用babel把es6语法转换成es5

Babel 是什么Babel 是一个工具链,次要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便可能运行在以后和旧版本的浏览器或其余环境中。 Babel能用在哪里NodeJs应用 npm 初始化我的项目$ mkdir es6-to-es5$ npm init -y装置Babel$ npm install --save-dev @babel/core @babel/cli装置实现之后, 你的 package.json 会退出这些代码 "devDependencies": { + "@babel/cli": "^7.12.8", + "@babel/core": "^7.12.9" }当初把 Babel 的运行命令放入到 npm 脚本中, 也是在 package.json 中 "scripts": {+ "build": "babel src -d lib" }创立.babelrc配置文件$ npm install @babel/preset-env --save-dev创立babel.config.json文件,写入以下内容 { "presets": ["@babel/preset-env"]}环境都配置实现, 上面开始正式写代码了 写一段ES6代码创立 /src/index.js $ mkdir src$ touch src/index.js写入一个简略的箭头函数 let sayHello = () => { console.log('hello xiaotaideng')}sayHello()当初运行刚刚写好的启动脚本 ...

November 30, 2020 · 1 min · jiezi