gulp 错误集锦

2023-09-19 11:56:02

为了打包构建之前的layui写的项目,用到了gulp,但是遇到的坑还挺多,记录一下。

1、运行gulp时报错

ReferenceError: primordials is not defined

解决办法:

ReferenceError: primordials is not defined 意思是primordials这个没被定义,是因为项目中gulp版本和node版本不兼容,先看下本地的版本:

方法1,降级node和升级gulp,不建议。

方法2,使用npm shrinkwrap锁定依赖版本。

1、项目根目录新建npm-shrinkwrap.json,删掉node_modules
2、npm-shrinkwrap.json内容修改如下:

{
  "dependencies": {
    "graceful-fs": {
        "version": "4.2.2"
     }
  }
}

 
然后重新执行npm install,这时候再去执行gulp相关操作就不会报错了。
注意:这个文件在执行过一次npm install以后,里边内容就变了,下次再想重新执行,要再复制一遍。

注意package.json 中"gulp-babel": "^8.0.0",  这个版本不报错,7.0报错。

{
  "name": "OnePic",
  "version": "3.0.0",
  "description": "",
  "license": "LPPL",
  "author": [
    "xianxin <xianxin@layui-inc.com>"
  ],
  "homepage": "http://www.layui.com/admin/",
  "devDependencies": {
    "@babel/core": "^7.22.20",
    "@babel/plugin-proposal-class-properties": "^7.18.6",
    "@babel/plugin-transform-runtime": "^7.22.15",
    "@babel/preset-env": "^7.22.20",
    "@babel/runtime": "^7.22.15",
    "babel-loader": "^8.3.0",
    "chai": "^4.1.1",
    "del": "^2.2.2",
    "gulp": "^3.9.1",
    "gulp-babel": "^8.0.0",
    "gulp-concat": "^2.6.0 ",
    "gulp-header": "^1.8.8",
    "gulp-if": "^2.0.1",
    "gulp-minify-css": "^1.2.4",
    "gulp-rename": "^1.2.2",
    "gulp-replace": "^0.6.1",
    "gulp-uglify": "^1.5.4",
    "minimist": "^1.2.0",
    "mocha": "^3.2.0",
    "sinon": "^3.2.1",
    "sinon-chai": "^2.13.0"
  }
}

参考链接:

gulp项目中ReferenceError: primordials is not defined报错解决方法_萧&萧的博客-CSDN博客

2、gulp-uglify压缩js文件时报错之 punc(()

报错内容: SyntaxError: Unexpected token: punc (()
问题分析: 这种大多是js代码中包含ES6语法的函数声明方式,或者函数声明写的有问题。报错提供的行号不一定准确,只能自己找到使用ES6语法的位置,改成ES5。或者把语法错的地方改好。
解决方法: 把ES6代码替换成ES5代码;把错误的函数声明改对。

(今天遇到的7千行代码报一个不准确的错误,最后把文件拆分成了好几个逐个排查,总算定位了错误。函数声明没写对,多了个逗号,/(ㄒoㄒ)/~~)

3. gulp-uglify压缩js文件时报错之 Unexpected token name

报错内容: _Unexpected token name «p», expected punc «
问题分析: 问题原因同上,也是ES6语法引起的。不过这个是声明变量let的原因。
解决方法:let改成var

4. gulp-uglify压缩js文件时报错之 Unexpected token name

报错内容: _Unexpected token name «p», expected punc «
问题分析: 问题原因同上,也是ES6语法引起的。不过这个是声明变量let的原因。
解决方法:let改成var

5、gulp-uglify不识别箭头函数,要改成普通的函数

6. gulp-htmlmin

报错内容: throw er; // Unhandled 'error' event ^ Error: Parse Error: <= 95% </spa<div
问题分析: 遇到html压缩时的解析错误,此处是因为小于号<引起的。
解决方法: 小于号<改用编码方式&lt;
 参考链接:gulp 错误集锦 - 简书

更多推荐

2023华为杯研究生数学建模D题思路代码分析

完整的分析查看文末名片获取!问题一:区域碳排放量以及经济、人口、能源消费量的现状分析(1)建立指标与指标体系要求1:指标能够描述某区域经济、人口、能源消费量和碳排放量的状况;要求2:指标能够描述各部门(能源供应部门、工业消费部门、建筑消费部门、交通消费部门、居民生活消费、农林消费部门)的碳排放状况;要求3:指标体系能够

命令模式简介

概念:命令模式是一种行为设计模式,它将请求封装成一个对象,从而允许您将不同的请求参数化、队列化,并且能够在不同的时间点执行。通过引入命令对象(Command)来解耦发送者(Invoker)和接收者(Receiver),使得发送者无需知道具体的接收者或操作细节。命令对象封装了一系列操作,并提供了一个统一的方法(如exec

Delaunay三角剖分算法

目录一.简介1.1三角剖分1.2Delaunay三角剖分二.Delaunay三角剖分的相关理论2.1Delaunay三角形和(局部)Delaunay边的概念2.2Delaunay引理2.3翻转边算法(flipalgorithm)2.4Delaunay三角剖分的最优性质三.Delaunay三角剖分的构造算法3.1Laws

什么是JavaScript中的IIFE(Immediately Invoked Function Expression)?它的作用是什么?

聚沙成塔·每天进步一点点⭐专栏简介⭐JavaScript中的IIFE⭐示例⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

【Linux从入门到精通】多线程 | 线程介绍&线程控制

本篇文章主要对线程的概念和线程的控制进行了讲解。其中我们再次对进程概念理解。同时对比了进程和线程的区别。希望本篇文章会对你有所帮助。文章目录一、线程概念1、1什么是线程1、2再次理解进程概念1、3轻量级进程二、进程控制2、1创建线程pthread_create2、2线程与进程资源2、3线程id2、4获得线程idpthr

小米华为,化干戈为玉帛!

近日来,手机圈又掀起了各大厂家推出新品的高潮。首先是华为Mate60的推出,其自研的麒麟9000S芯片瞬间点燃了国内手机市场,得到了国内甚至国外业界人士的认可和好评。而近日网上盛传的小米创始人雷军的“愿意加入华为技术生态圈”的邀请,引起了网友们的高度关注。截图自今日头条@刘哥抖料大家都知道,小米采用的是高通芯片和谷歌操

代码签名证书品牌哪家好?选微软推荐机构

代码签名证书是保护软件代码完整性及来源可信的重要方式,软件程序要在操作系统中运行,就需要使用权威合规的代码签名证书,对软件代码进行数字签名,确保软件来源可信、未被非法篡改,消除操作系统“未知发布者”警告,让软件能够顺畅运行。众多代码签名证书厂商中,哪些厂商提供的代码签名证书才是获得操作系统信任的呢?本文将为大家介绍,如

【JVM】类加载器

类与类加载器类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远超类加载阶段。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通俗一些:比较两个类是否“相等”,只有在这两个类是由同一个类加载器加

springboot实战(七)之jackson配置前后端交互下划线转驼峰&对象序列化与反序列化

目录环境:1.驼峰转下划线配置1.1单个字段命名转化使用@JsonProperty注解1.2单个类进行命名转化使用@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)注解3.全局命名策略配置2.序列化以及反序列化2.1序列化2.2反序列化3.自定义序

ref和reactive区别

使用区别reactive定义引用数据类型,ref定义基本类型reactive定义的变量直接使用,ref定义的变量使用时需要.value模板中均可直接使用,vue帮我们判断了是reactive还是ref定义的(通过__v_isRef属性),从而自动添加了.value。//定义letcount=ref(0);letobj=

好用的记笔记app选哪个?

当你在日常生活中突然获得了一个灵感,或者需要记录会议的重要内容,或者是学校课堂上的笔记,你通常会拿出手机,因为它总是在你身边,随时可用。这时候,一款好的记笔记App可以让你事半功倍。敬业签是一款全面的云端备忘记事软件,支持在Windows/Web/Android/iOS/Mac/HarmonyOS等端口同步和编辑记事内

热文推荐