问题描述
在使用 Babel 编译 ES6+ 代码为 ES5 时,有时会出现 ‘_typeof is not defined’ 错误,如下:
Uncaught ReferenceError: _typeof is not defined at Object../src/index.js (index.js:6) at __webpack_require__ (bootstrap:19) at Object.0 (main.js:11) at __webpack_require__ (bootstrap:19) at bootstrap:83 at bootstrap:83
解决方案
这是由于被编译的代码中使用了 ES6+ 的语法,但 Babel 编译时未正确转换,导致在运行时出现了错误。
解决方案是在 Babel 项目中添加 @babel/plugin-transform-typeof-symbol 插件,它可以将 _typeof 转换为 typeof。
基本用法
安装 @babel/plugin-transform-typeof-symbol:
npm install --save-dev @babel/plugin-transform-typeof-symbol
在 .babelrc 中添加插件配置:
{ "plugins": ["@babel/plugin-transform-typeof-symbol"] }
示例代码
下面是一个使用了 Symbol 类型的例子,在未添加 @babel/plugin-transform-typeof-symbol 插件时,它会出现 ‘_typeof is not defined’ 错误:
-- -------------------- ---- ------- -- ---- -- ----- --- - --------------- -------------------------- -- ----------- -- --- -------- -- ----- ------ ---- -------- --- --- - --------------- -------------------------- -- ----------- -- --- --------
添加 @babel/plugin-transform-typeof-symbol 插件后,编译后的代码中 _typeof 被正确转换为 typeof,不再出现错误:
-- -------------------- ---- ------- -- ---- -- ----- --- - --------------- -------------------------- -- ----- ------ ---- -------- --- --- - --------------- ------------------ --- --- ----------- - ----------- - --------------
总结
由于大多数现代浏览器已经完全支持 ES6+ 的语法,因此在实际项目中使用 Babel 处理代码时,可能会遇到一些问题。本文介绍了如何解决 Babel 编译后代码运行出现 ‘_typeof is not defined’ 错误的问题,希望对前端开发者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f9ad76f6b2d6eab31201f9