gulp-sass执行报错(已解决):TypeError: sass.sync is not a function

838 阅读1分钟

一、报错信息

在学习element-ui过程中,运行npm run build:theme出现问题:

TypeError: sass.sync is not a function

'compile' errored after 26 ms
TypeError: sass.sync is not a function
at compile (/Users/suda/Documents/work/study/element/packages/theme-chalk/gulpfile.js:10:16)
at bound (domain.js:425:14)
at runBound (domain.js:438:12)
at asyncRunner (/Users/suda/Documents/work/study/element/node_modules/async-done/index.js:55:18)
at processTicksAndRejections (internal/process/task_queues.js:79:9)

此时我的本地gulp-sass是最新版:

"gulp-autoprefixer": "^6.0.0",
"gulp-cssmin": "^0.2.0",
"gulp-sass": "^5.1.0",

二、报错原因

发现该问题在github被提了一个bug,并在最新版被解决,详情见github.com/uswds/uswds…

三、解决办法

从版本 5 开始,gulp-sass 不再包含默认的 Sass 编译器,因此必须附加下载node-sasssass

(1)配合sass

// gulpfile.js
- const sass = require('gulp-sass')); //删掉
- const compiler = require('sass'); //删掉
- sass.compiler = compiler; //删掉
+ const sass = require('gulp-sass')(require('sass')); //添加

随后报错:

Error: Cannot find module 'sass'

注意,这里要下载另外的sass包。

$ npm install sass -D

(2)配合使用node-sass

// gulpfile.js
const sass = require('gulp-sass')(require('node-sass')); //添加

随后下载node-sass

$ npm install node-sass -D

重新打包验证:

$gulp build --gulpfile packages/theme-chalk/gulpfile.js

没问题了~