You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
//useESModules: falseexports.__esModule=true;exports.default=function(instance,Constructor){if(!(instanceinstanceofConstructor)){thrownewTypeError("Cannot call a class as a function");}};//useESModules: trueexportdefaultfunction(instance,Constructor){if(!(instanceinstanceofConstructor)){thrownewTypeError("Cannot call a class as a function");}}
🐬 Babel编译转码的范围
Babel默认只转换新的JavaScript语法,而不转换新的API。 例如,Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign)都不会转译。 如果想使用这些新的对象和方法,则需要为当前环境提供一个垫片(polyfill)。
🐟 Babel的工作流:
输入字符串 -> @babel/parser parser -> AST -> transformer[s] -> AST -> @babel/generator -> 输出字符串
其中在 transformer[s] 阶段,就是使用plugins来转换代码的阶段。不同的plugin转换特定的代码,而preset是一组完成特定转换的plugins,比如babel-preset-es2017即包含syntax-trailing-function-commas | transform-async-to-generator两个plugin,用于支持ES2017的新特性。
🍥 主要的测试方法
🐠 babel编译代码的几种方式
Node中另一种直接执行ES6代码的方式是使用 babel-register,该库引入后会重写你的require加载器,让你的Node代码中require模块时自动进行ES6转码。例如在你的 index.js 中使用 babel-register:
babel-loader 是无法独立存在运行的。在babel-loader的package.json里你会发现有个 peerDependencies,其中就定义了一个依赖项是webpack。peerDependencies依赖表示了一个模块所依赖的宿主运行环境(一般各种插件的包内会使用 peerDependencies 来表明自己的宿主依赖)。
🐡 @babel/polyfill
babel-polyfill通过向全局对象和内置对象的prototype上添加方法来模拟完整的 ES2015+ 环境。
🦈 babel-runtime
babel转译代码的时候需要一些工具方法,这些方法默认都会加到用到他们的文件的开头,有时这些方法会很长。babel-runtime就是为了优化这种情况的,将这些工具方法抽离出来,不用每个文件都引入。
babel-plugin-transform-runtime的作用是分析我们的 ast,通过映射关系插入 babel-rumtime 中的垫片, runtime 编译器插件做了以下三件事:
🦐 补丁方案
方案一: corejs2, @babel/preset-env + useBuiltins: entry + targets
方案二: corejs3
关于使用了@babel/preset-env后,是否还需要使用transform-runtime的问题
基本是不需要的,参考creeperyang/blog#25 里的评论。
🎏 bable7 理解
core-js
和regenerator-runtime
regenerator-runtime
, 它的devDependencies引用@babel-helpers
core-js
和regenerator-runtime
, devDependencies引用@babel/helpers
["@babel/plugin-transform-runtime", {"corejs": 2}]
🎣 如何为 Babel 创建插件
有用的资源
Babel中文文档
各个平台对ES6,ES7等的支持情况
Babel 手册
babel-polyfill VS babel-runtime VS babel-preset-env
Polyfill 方案的过去、现在和未来
强悍的Babel
了解 Babel 6 & 7 生态
@babel/polyfill 还是 @babel/plugin-transform-runtime
corejs3 的更新
The text was updated successfully, but these errors were encountered: