gulp打包报错 events.js:183 Unhandled ‘error‘ event

本文介绍了一种在使用Gulp进行前端资源打包时遇到的Uglify-js压缩JS文件失败的问题,并详细分析了错误产生的原因及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现场景:

使用gulp开发web页面的,在打包的时候,控制台报了events.js:183, Unhandled ‘error’ event等错误。记录之。


问题描述:

在控制台中出入gulp,会运行写好的task任务,报错信息如下
macdeMac-mini:job_admin mac$ gulp 
[18:49:57] Using gulpfile ~/project/debug/job_admin/gulpfile.js
[18:49:57] Starting 'clear'...
[18:49:57] Starting 'src'...
[18:49:57] Finished 'src' after 18 ms
[18:49:57] Finished 'clear' after 39 ms
[18:49:57] Starting 'default'...
[18:49:57] Finished 'default' after 11 ms

events.js:183
      throw er; // Unhandled 'error' event
      ^
Error
    at new JS_Parse_Error (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:1534:18)
    at js_error (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:1542:11)
    at croak (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2089:9)
    at token_error (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2097:9)
    at unexpected (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2103:9)
    at semicolon (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2123:56)
    at simple_statement (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2314:73)
    at eval (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2183:19)
    at eval (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2136:24)
    at block_ (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:2429:20)

原因分析:

我们在报错信息中看到如下路径
at new JS_Parse_Error (eval at <anonymous> (/Users/mac/project/debug/job_admin/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:1534:18)

其中最终是在 node_modules/uglify-js/tools/node.js 中抛出错误的,我在gulp的task任务中,用到了uglify-js 来压缩js文件。

猜想:
1、uglify-js 这个包是从npm上面下载,不大可能是这个包出现了问题。
2、不是这个包出问题,那就是这个包在干活的时候,遇到了问题并抛出了问题。
3、这个包是压缩js的,很有可能是在压缩项目的js文件时遇到了问题,得去看看是不是哪个js文件里面写的有问题。


解决方案:

在task任务中查看uglify-js压缩了如下目录的js代码
//压缩 JS
  minjs: function(){
    var src = [
      './src/**/*.js'
      ,'!./src/config.js'
      ,'!./src/lib/extend/echarts.js'
    ];
    
    return gulp.src(src).pipe(uglify())
     .pipe(header.apply(null, note))
    .pipe(gulp.dest(destDir));
  }

这个task压缩了src所有后代目录下的js文件,这样js文件范围有点大。只能去靠猜是哪个js文件了。
经过一段时间对目标 js 文件注释,终于找到了罪魁祸首,是它是它就是它

options.data = options.data || {};
    options.headers = options.headers || {};
    
    if(request.tokenName){
      let obj = [] // 就是这一行
      obj[request.tokenName] = (layui.sessionData(setter.tableName)[request.tokenName] || '')
      options.headers = options.headers || obj;

原因就是 let是es6的语法,而 uglify-js 居然无法处理 let。
要么先用babel把es6转成es5,要么直接写成var。这样 uglify-js 就可以正常工作了


长尾流量优化

小伙子我看你骨骼清奇
来跟我一起学习写bug吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值