背景

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"?"的更多相关文章

  1. django 源码报错

    启动django ,一直提示一个 AttributeError: 'str' object has no attribute 'decode' 哥,查了一下午google,就怕是自己判断错了,最后在一 ...

  2. linux 编译源码报错,找不到libXrender.so.1

    1.通过xshell连接到服务器编译hadoop源码得时候遇到问题, 2.使用Xshell的时候登陆后的环境变量中会比SecureCRT登陆后的环境变量多出一条 DISPLAY=localhost:1 ...

  3. Node.js启动服务报错SyntaxError: Unexpected token import

    启动服务报错如下: Last login: Wed Nov :: on ttys000 localhost:~ sipeng$ cd /Users/sipeng/Desktop/彭思/2017年学习/ ...

  4. ABP 下载源码报错

    ASP.NET Boilerplate 下载地址应该是这个:https://github.com/aspnetboilerplate/aspnetboilerplate/tree/v1.5.2 下载的 ...

  5. win10将mongodb加入系统服务,官方源码报错问题记录

    进入C:\Program Files\MongoDB\Server\3.6目录下 1.编写配置文件mongodb.cfg: dbpath=D:\MongoDB\data\db #数据库路径 logpa ...

  6. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

  7. vue项目初始化时npm run dev报错webpack-dev-server解决方法

    vue项目初始化时npm run dev报错webpack-dev-server解决方法 原因:这是新版webpack存在的BUG,卸载现有的新版本webpack,装老版本就好webpack-dev- ...

  8. node.js创建服务器报错

    创建nodeTest.js如下: var http = require('http'); http.createServer(function (request, response){ respons ...

  9. maven项目引用时,导入类报错,选择两个项目同时执行Maven update

    maven项目引用时,导入类报错,选择两个项目同时执行Maven update springboot引入第三方jar,需要扫描时加@ComponentScan("第三方的包名") ...

  10. 在CentOS上安装node.js的时候报错:No acceptable C compiler found!解决办法

    在CentOS上安装node.js的时候报错:No acceptable C compiler found! 原因:没有c编译器. 解决办法:安装GCC 命令如下: #yum install gcc ...

随机推荐

  1. Linux下找不到SO的解决方法

    Linux下找不到so文件的解决办法 1)将.so文件路径的目录添加到/etc/ld.so.conf sudo vim /etc/ld.so.conf 将你的SO文件存放路径的根目录写进去(不带so本 ...

  2. 夜神模拟器连接不上adb的解决办法

    1.夜神模拟器连接不上adb的解决办法 转自 (https://www.jianshu.com/p/6041e64518a8) 最近给模拟器升级了版本,用了一段时间后,突然发现通过adb device ...

  3. NX 二次开发,线性移动uf5943

    #include <uf.h> #include <uf_modl.h> #include <uf_part.h> #include <uf_modl_pri ...

  4. python菜鸟学习: 8. 集合基础知识

    # -*- coding: utf-8 -*-# 列表的特性:1,去重:2.关系测试list1 = [1, 4, 6, 8, 7, 8, 9]# 集合去重list2 = set(list1)print ...

  5. Flutter 新建项目

    一.打开VSCode,点击侧边栏扩展按钮,搜索flutter,安装Flutter和Dart 二.按command+shift+P,输入flutter,选择Flutter:New project,新建项 ...

  6. 系统U盘安装Windows无法打开install.wim的问题

    我们在使用UltraISO工具制作Windows操作系统安装U盘,使用U盘启动,在安装Windows操作系统的过程中,出现类似"Windows无法打开所需的文件X:\sources\inst ...

  7. MATLAB 多行注释

    自用的两种方法 1: %{ 若干语句 } % 2.快捷键CTRL+R,取消注释CTRL+T

  8. nginx日志分析--可视化

    1. 安装依赖 yum install glib2 glib2-devel GeoIP-devel ncurses-devel zlib zlib-devel -y wget https://gith ...

  9. 跨域获取iframe页面的url

    一:跨域获取iframe页面的url 1.在使用iframe页面的js添加以下内容 <script> var host = window.location.href; var histor ...

  10. 接口自动化-requests环境安装(import requests模块引用失败问题)

    命名规范,可以避免低级问题 1. 命名最好是英文字符.下划线.数字三个组成. 2.项目(工程)名称.文件包名.模块名称等都应该是用英文开头,不能纯数字,(下划线开头的一般有特殊含义,不懂的话别乱用) ...