Docker环境Sass构建报错求助:TypeError无法读取undefined的indexOf属性
解决Sass构建报错:TypeError: Cannot read properties of undefined (reading 'indexOf')
问题背景
- 运行4年的Sass构建流程突发失败,核心报错:
TypeError: Cannot read properties of undefined (reading 'indexOf') at /Users/me/myCode/node_modules/sass/sass.dart.js:116832:12 at Object.applyHooksTransformer (/Users/me/myCode/node_modules/sass/sass.dart.js:1863:14) at Object.initHooks (/Users/me/myCode/node_modules/sass/sass.dart.js:1843:251) at Object.initNativeDispatchContinue (/Users/me/myCode/node_modules/sass/sass.dart.js:1809:9) at Object.initNativeDispatch (/Users/me/myCode/node_modules/sass/sass.dart.js:1803:9) at Object.getNativeInterceptor (/Users/me/myCode/node_modules/sass/sass.dart.js:29308:13) at Object.getInterceptor$x (/Users/me/myCode/node_modules/sass/sass.dart.js:29569:16) at Object.set$compile$x (/Users/me/myCode/node_modules/sass/sass.dart.js:29636:16) at Object.main (/Users/me/myCode/node_modules/sass/sass.dart.js:24401:9) at main2 (/Users/me/myCode/node_modules/sass/sass.dart.js:26210:9) - 构建基于Docker环境,推测因官方Node镜像4天前更新导致npm版本升级;本地升级Node/npm后可复现问题。
- 构建内容:编译Bootstrap及单个
custom.scss文件,近期未改动前端代码,上次成功构建为10月18日。
已尝试无效方案
- 升级sass、gulp-sass至多个大版本(含最新版)
- 清理npm缓存并重装相关依赖包
解决方案
1. 锁定Node Docker镜像版本
Docker使用latest标签会自动拉取最新镜像,导致环境变更。需指定上次成功构建时的具体Node版本:
- 从服务器构建日志或Docker镜像历史中查找10月18日使用的Node版本(如
node:18.17.1) - 修改Dockerfile,将基础镜像改为指定版本:
FROM node:18.17.1 - 清理Docker构建缓存并重新构建:
docker build --no-cache .
2. 对齐gulp-sass、sass与gulp的版本兼容性
新版本Node可能与旧版构建工具不兼容,需确保三者版本匹配:
- 查看
gulp-sass的peer依赖要求,安装对应版本的sass - 若使用gulp 3.x,需降级
gulp-sass至4.x版本,搭配兼容的sass版本(如^1.32.13) - 示例依赖配置(package.json):
{ "devDependencies": { "gulp": "^4.0.2", "gulp-sass": "^5.1.0", "sass": "^1.69.5" } }
3. 排除gulp干扰,直接测试Sass编译
若上述方案无效,先排除gulp的影响:
- 直接使用
sass命令编译custom.scss:sass custom.scss custom.css - 若直接编译成功,说明问题出在
gulp-sass的适配或gulp配置上,需检查gulpfile.js中是否有与新版本Node冲突的逻辑(如路径处理、钩子函数)
4. 彻底清理依赖环境
在容器内执行以下命令,确保依赖完全重装:
rm -rf node_modules package-lock.json npm cache clean --force npm install
内容的提问来源于stack exchange,提问作者Luke Puplett
相关产品推荐
相关产品推荐

