项目构建node-sass源码报错 SyntaxError:Unexpectedtoken"?"
背景
vue2项目,之前一直构建正常。今天改了代码,构建时报错,报错原因显示编译node-sass源码时出错。
报错信息:
Modulebuild failed:/node_modules/node-sass/sass.dart.js:19
self.exports=_cliPkgExportParam??exports;
SyntaxError:Unexpectedtoken '?'
报错图:

问题分析
1、此次更改的代码,是在页面里加了段html,非常简短,排除新改代码导致。
2、package.json文件近半年没有改动过,排除手动更改依赖版本导致。
3、package.json中,大部分依赖都是用的^号,即在编译时会自动拉取符合主版本的最新版,怀疑是node-sass有新版本发布,项目构建时安装了最新版导致。
排查
按照思路去排查,不看不知道,一看吓一跳。package.json文件中,node-sass 依赖是这样写的:

翻看提交记录,之前是node-sass:"^a.b.c"这种写法,半年前被改成了上面的写法。但改的原因是什么?查阅资料说:
在安装node-sass失败时,可将 "node-sass": "^a.b.c" 改成 "node-sass": "npm:sass" 或者 "npm:sass@^x.y.z"。
此时 npm 会自己用 sass 代替不好安装的 node-sass。
那么相当于:此时项目中用的 node-sass 其实是 sass@^1.55.0,报错的也基本是它。
那么去排查sass。文章一开头提到过,package.json文件近半年没有动过,所以直接去npm官网定位。

果然,在3天前,sass发布了新版 1.59.2。版本号符合项目中要的 ^1.55.0。发布日期是3天前,上一次构建时间是5天前,说明上一次构建拉取的不是这一版,而且上一次构建是成功的。
所以问题基本确定:此次构建,安装了最新版本的sass。但由于项目比较旧,对其中的一些语法不兼容,导致报错。
解决办法
1、如果仍然使用"node-sass":"npm:sass@^1.55.0"这种写法,那么需要暂时固定版本,至少目前的1.59.2不适配。
2、放弃使用该方式,改回"node-sass": "^a.b.c" 方式。
最后使用了方法2,项目构建成功。
结论
1、如果项目中node-sass安装失败,上文提到的办法可参考,但要做验证。
2、如果项目比较旧,要么验证出可行的版本后,固定版本号。要么不用此方式,因为无法保证项目可兼容后续不断更新的最新版本。
项目构建node-sass源码报错 SyntaxError:Unexpectedtoken"?"的更多相关文章
- django 源码报错
启动django ,一直提示一个 AttributeError: 'str' object has no attribute 'decode' 哥,查了一下午google,就怕是自己判断错了,最后在一 ...
- linux 编译源码报错,找不到libXrender.so.1
1.通过xshell连接到服务器编译hadoop源码得时候遇到问题, 2.使用Xshell的时候登陆后的环境变量中会比SecureCRT登陆后的环境变量多出一条 DISPLAY=localhost:1 ...
- Node.js启动服务报错SyntaxError: Unexpected token import
启动服务报错如下: Last login: Wed Nov :: on ttys000 localhost:~ sipeng$ cd /Users/sipeng/Desktop/彭思/2017年学习/ ...
- ABP 下载源码报错
ASP.NET Boilerplate 下载地址应该是这个:https://github.com/aspnetboilerplate/aspnetboilerplate/tree/v1.5.2 下载的 ...
- win10将mongodb加入系统服务,官方源码报错问题记录
进入C:\Program Files\MongoDB\Server\3.6目录下 1.编写配置文件mongodb.cfg: dbpath=D:\MongoDB\data\db #数据库路径 logpa ...
- Linux 安装node.js ---- 源码编译的方式
一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...
- vue项目初始化时npm run dev报错webpack-dev-server解决方法
vue项目初始化时npm run dev报错webpack-dev-server解决方法 原因:这是新版webpack存在的BUG,卸载现有的新版本webpack,装老版本就好webpack-dev- ...
- node.js创建服务器报错
创建nodeTest.js如下: var http = require('http'); http.createServer(function (request, response){ respons ...
- maven项目引用时,导入类报错,选择两个项目同时执行Maven update
maven项目引用时,导入类报错,选择两个项目同时执行Maven update springboot引入第三方jar,需要扫描时加@ComponentScan("第三方的包名") ...
- 在CentOS上安装node.js的时候报错:No acceptable C compiler found!解决办法
在CentOS上安装node.js的时候报错:No acceptable C compiler found! 原因:没有c编译器. 解决办法:安装GCC 命令如下: #yum install gcc ...
随机推荐
- Flink akka AskTimeoutException问题排查
最近遇到一个很奇怪的问题,Flink任务正常启动正常运行一段时间后就会报错,,错误详情如下 2019-12-11 17:20:57.757 flink [flink-scheduler-1] ERRO ...
- 学PHP的第二天!
这是我学PHP的第二天,我改了一些代码,终于把我喜欢的OJ网站的默认模板给改掉了,竟然能用!!!我从来都没有这么的欣喜过,看来PHP果真是一门非常好用的编程语言,但这个OJ有些用的是python的模块 ...
- 20211306 2021-2022-2 《Python程序设计》第二次实验报告
20211306 2021-2022-2 <Python程序设计>第二次实验报告 课程:<Python程序设计> 班级:2113 姓名:丁文博 学号:20211306 实验教师 ...
- MySQL备份管理
MySQL备份管理 目录 MySQL备份管理 一.MySQL备份管理 1.1.1 MySQL备份管理介绍 1.1.2 基于mysqldump的备份恢复 1.1.3 基于xtrabackup软件的物理备 ...
- UE5农场项目小功能(1)-砍树
砍树功能效果的实现 在UE中想做一个砍树的功能,B站上没找到什么教程,最后在油管上找到个视频并跟着实现了,一共设计到三个蓝图和一个什么也没写的蓝图接口,下面介绍下步骤. 1.角色蓝图的部分 人物这 ...
- 实验1 Python开发环境使用和编程初体验
# print输出的几种用法 # 用法1:用于输出单个字符串或单个变量 print('hey, u') # 用法2: 用于输出多个数据项,用逗号分隔 print('hey', ' u') x,y,z ...
- tp 获取器的使用中应该怎么append 自定义数据
$data = model('organization_area')->getListByNoPage($where, 'create_time asc');foreach ($data as ...
- 更多Linux实用命令
更多实用命令 进程相关 当程序运行在系统上时,我们称之为进程(process).想监测这些进程,需要熟悉 ps/top 等命令的用法.ps 命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许 ...
- 使用React脚手架初始化项目
1.npx create-react-app my-app------>是项目名 2.cd my-app 3.npm start
- 5、什么是MIME
MIME 类型 媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档.文件或字节流的性质和格式.它在IETF ...