MacOS下Node16环境gulp-imagemin运行报错如何解决
问题根因
gulp-imagemin v8及以上版本已改为纯ESM模块,不再支持CommonJS规范的require()导入方式,你之前的修改错误将动态import()返回的Promise对象直接当作imagemin函数使用,才会触发后续类型错误。
解决方案
你可以任选以下两种方案之一修复问题:
方案1:降级到支持CommonJS的v7版本(操作最简单,无需改代码)
直接运行如下命令安装v7版本的gulp-imagemin:
npm install --save-dev gulp-imagemin@7
安装完成后回退你之前对compress.js的修改,恢复const imagemin = require('gulp-imagemin');的写法即可正常运行。
方案2:适配新版ESM动态导入
保持使用最新版gulp-imagemin,修改compress.js里的compressAssets为异步函数,等待动态导入完成后再调用imagemin,修改后完整代码如下:
'use strict'; // Include gulp const { src, dest } = require('gulp'); // Include Our Plugins const rename = require('gulp-rename'); // Export our tasks. module.exports = { // Compress svg/png/jpg files. compressAssets: async function() { // 等待ESM模块加载完成,取default属性为实际的imagemin函数 const imagemin = (await import('gulp-imagemin')).default; return src([ './source/patterns/{global,layout,components}/**/*{.png,.jpg,.svg}' ]) .pipe(imagemin()) .pipe( rename(function(path) { path.dirname = ''; return path; }) ) .pipe(dest('./dist/images')); } };
内容的提问来源于stack exchange,提问作者Søren Sjøstrøm
相关产品推荐
相关产品推荐

