webpack打包踩坑之TypeError: Cannot read property 'bindings' of null

2024-05-09 11:32

本文主要是介绍webpack打包踩坑之TypeError: Cannot read property 'bindings' of null,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

file loader介绍:https://www.webpackjs.com/loaders/file-loader/

babel loader介绍:https://webpack.js.org/loaders/babel-loader/

 webpack-dev-server介绍:https://www.webpackjs.com/configuration/dev-server/  ,https://www.jianshu.com/p/73d74445e5c5

今日在学习百度前端学院的一个小餐厅demo,学习用webpack打包遇到了一些问题

首先是根据这篇入门教学文章一步一步安装https://segmentfault.com/a/1190000006178770#articleHeader6

 

1、报错:TypeError: Cannot read property 'bindings' of null

原因:可能没装babel cli,看了网友写的才发现,加上之后就好了

第二个是babel版本问题

教学文章有点旧,是这样安装的

而官方的说明是

在webpack 4.2以上使用

npm install -D babel-loader @babel/core @babel/preset-env

重新安装后,再更改老的配置

原来是“env”而已,由网友提供的答案顺利解决了问题。

 

 

 

webpack - babel配置

babel是一个javascript编译器,是前端开发中的一个利器。它突破了浏览器实现es标准的限制,使我们在开发中可以使用最新的javascript语法。

通过构建和babel,可以使用最新js语法进行开发,最后自动编译成用于浏览器或node环境的代码。

webpack中使用babel

配合webpack使用babel前,需要首先使用npm init初始化一个项目,npm install -g webpack安装webpack(全局安装是为了在命令行使用webpack命令)。

  • 安装babel-loader, babel-core, babel-preset-env。

npm install --save-dev babel-loader babel-core babel-preset-env
其中,babel-preset-env插件是为了告诉babel只编译批准的内容,相当于babel-preset-es2015, es2016, es2017及最新版本。通过它可以使用最新的js语法。

  • 配置webpack.config.js

在webpack配置文件中配置bable-loader

复制代码

module: module: {{     rules: rules: [[         {{             test: test: /\.js$/,/\.js$/,             use: use: {{                 loader: loader: 'babel-loader','babel-loader',             options: {presets: [['env',{targets: {browsers: ['> 1%', 'last 2 versions']}}]]}},exclude: '/node_modules/'}]
}

复制代码

 

其中,exclude是定义不希望babel处理的文件。targets是presets的一些预设选项,这里表示将js用于浏览器,只确保占比大于1%的浏览器的特性,主流浏览器的最新两个主版本。
更多与配置有关的信息,可以参考:
babel env preset设置,
browserlist预设置.

  • 在命令行中运行相应webpack命令即可。
  • 由于babel-preset配置选项较多,我们一般可以在根目录下建立.babelrc文件,专门用来放置babel preset配置,这是一个json文件。可以将上述配置修改如下:

复制代码

//.bablerc文件
{"presets": [['env',{"targets": {"browsers": ['> 1%', 'last 2 versions']}}]]
}

复制代码

 

复制代码

//原webpack.config.js文件
module: {rules: [{test: /\.js$/,use: {loader: 'babel-loader'},exclude: '/node_modules/'}]
}

复制代码

 

 

babel-polifill插件

在上面的babel配置中,babel只是将一些es6,es7-8的语法转换成符合目标的js代码,但是如果我们使用一些特性或方法,比如Generator, Set, 或者一些方法。babel并不能转换为低版本浏览器识别的代码。这时就需要babel-polifill。

简单的说,polifill就是一个垫片,提供了一些低版本es标准对高级特性的实现。使用polifill的方法如下:

npm install --save babel-polifill

然后在应用入口引入polifill,要确保它在任何其他代码/依赖声明前被调用。

//CommonJS module
require('babel-polyfill');//es module
import 'babel-polifill';

 

在webpack.config.js中,将babel-polifill加入entry数组中:

entry: ["babel-polifill", "./app.js"]

 

相比于runtime-transform,polifill用于应用开发中。会添加相应变量到全局,所以会污染全局变量。

更多细节参考babel-polifill。

runtime-transform插件

runtime transform也是一个插件,它与polifill有些类似,但它不污染全局变量,所以经常用于框架开发。

安装:

npm install --save-dev babel-plugin-transform-runtimenpm install --save babel-runtime

 

用法:
将下面内容添加到.bablerc文件中

{"plugins": ["transform-runtime"]
}

 

更多细节参考bable-runtime-transform插件。

这篇关于webpack打包踩坑之TypeError: Cannot read property 'bindings' of null的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973291

相关文章

mysql升序排序使null结果排最后

1.现象mysql升序排序的null结果排最前面   select * FROM payment ORDER BY serial ASC; -- null值最前面  结果: 2.现象mysql降序序排序的null结果排最后面 select * FROM payment ORDER BY serial DESC; -- NULL 值最后 结果:  3.使mysql升序排序的n

java学习—null和isEmpty 区别

String fly1 = new String(); String fly2 = ""; String fly3 = null; 解释如下: 此时fly1是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已) 此时fly2是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串) 此时fly3是未分配内存空间,无值,是一种无值(

Could not retrieve transation read-only status server

背景 最近在部署一套完整的项目,部署过程中遇到很多的问题,在来总结一些如标题的这个错误! 环境说明: 使用分布式数据库,使用的是mysql! ### Cause: java.sql.SQLException: Could not retrieve transation read-only status server; SQL []; Could not retrieve transatio

PHP中isset、empty、is_null实验测试

#$abc = "abc";     $def;     #var_dump(isset($abc));     //var_dump(empty($def));     //var_dump(false);     //var_dump(empty(''));     var_dump(isset($def));     var_dump(is_null($def));     #

docker之mysql连接 Authentication plugin ‘caching_sha2_password‘ cannot be loaded

1  1.docker exec -it mysql01(镜像别名) bash  3 // 进入mysql命令行  4   5  2.mysql -uroot -p 密码       6   7   // 修改加密规则 设置新密码  8   9  3.ALTER USER '账号'@'用户域' IDENTIFIED WITH mysql_native_password BY '新密码';   10

maven package 打包test出错导致打包失败

今天用maven给项目打包,clean package之后跑了一连串异常,搞的一脸懵逼;仔细看了下报错发现: -------------------------------------------------------T E S T S-------------------------------------------------------Running com.icinfo.tzmi

webpack优化构建体积示例-压缩图片:

不同的图片格式有不同的特点和用途,它们也需要不同的压缩算法和技术,也为了保证能在各个浏览器环境下能正常加载显示,所以需要用到多个插件 在使用imagemin-webpack-plugin来配置图片压缩时,你需要确保已经安装了该插件以及它可能依赖的imagemin插件(如imagemin-mozjpeg、imagemin-pngquant等)。 下载imagemin-webpack-

IDEA打包部署jar文件

刚刚转移到idea的阵营,还有很多东西需要学习。今天使用了IDEA的打包功能,总结一下。 1.项目需要先编译一下。 2. file→project structure  3.artifacts→jar→from modules with dependences  4.依次填写自己需要打包的项目,启动类和manifest.mf的存放路径,点击OK  5.设置生成jar文件的存放

关于AS混淆,签名打包参考

记录一下,为了以后直接拿干货: http://www.jianshu.com/p/44e3b127393e http://www.jianshu.com/p/0fcf6a1a13fe http://blog.csdn.net/yy1300326388/article/details/48344411

SQL之特殊操作view,date,null,isnull()

文章目录 viewdatenullisnull() view 视图是基于 SQL 语句的结果集的可视化的表。 CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition 这个我暂时理解为查询数据后,通过view view_name as的方式创建了一个视图表,内容是查询的字段,