由于网上大多数的博文已经比较久,参考性不大

版本

  • gulp

    PS D:\XXX\github\hexo> gulp -v
    CLI version: 2.3.0
    Local version: 4.0.2
  • gulp-imagemin

    9.0.0
  • node

    PS D:\XXX\github\hexo> node -v
    v20.10.0
    PS D:\XXX\github\hexo> npm -v
    10.2.3
    PS D:\XXX\github\hexo>

gulpfile.js

import gulp from 'gulp';
import imagemin from 'gulp-imagemin';
let imgSrc = 'source/images/*.*'
let imgDist = 'source/images2'
// 压缩图片
export default (cb) => {
return gulp.src([imgSrc])
.pipe(imagemin())
.pipe(gulp.dest(imgDist));
}

如果需要对某种类型进行配置

import gulp from 'gulp';
import imagemin, {optipng} from 'gulp-imagemin';
let imgSrc = 'source/images/*.*'
let imgDist = 'source/images2'
// 压缩图片
export default (cb) => {
return gulp.src([imgSrc])
.pipe(imagemin(optipng({optimizationLevel: 5})))
.pipe(gulp.dest(imgDist));
}

如果希望已经压缩过的图片不再次压缩,可以结合gulp-cache

import gulp from 'gulp';
import imagemin from 'gulp-imagemin';
import cache from 'gulp-cache';
let imgSrc = 'source/images3/*.*'
let imgDist = 'source/images2'
// 压缩图片
export default (cb) => {
return gulp.src([imgSrc])
.pipe(cache(imagemin()))
.pipe(gulp.dest(imgDist));
}

输出对比结果

// 第一次执行
PS D:\XXX\github\hexo> gulp
[16:55:41] Using gulpfile D:\XXX\github\hexo\gulpfile.js
[16:55:41] Starting 'default'...
gulp-imagemin: Minified 1 image (saved 116 kB - 8.7%)
[16:55:48] Finished 'default' after 7.23 s // 再次执行命令
PS D:\XXX\github\hexo> gulp
[16:55:55] Using gulpfile D:\XXX\github\hexo\gulpfile.js
[16:55:55] Starting 'default'...
gulp-imagemin: Minified 0 images
[16:55:55] Finished 'default' after 98 ms

新增一个图片测试

PS D:\XXX\github\hexo> gulp
[16:58:15] Using gulpfile D:\XXX\github\hexo\gulpfile.js
[16:58:15] Starting 'default'...
gulp-imagemin: Minified 1 image (saved 208 kB - 40.4%)
[16:58:20] Finished 'default' after 5 s

这里发现一个问题是,有些压缩效果并不明显

gulp-imagemin: Minified 1 image (saved 116 kB - 8.7%)
[16:55:48] Finished 'default' after 7.23 s

但如果你上传到tinypng, 压缩了差不多一半

遇到问题

  • Cannot use import statement outside a module

    D:\XXX\github\hexo\gulpfile.js:17
    import gulp from 'gulp';
    ^^^^^^ SyntaxError: Cannot use import statement outside a module
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1033:15)
    at Module._compile (node:internal/modules/cjs/loader:1069:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)

    需要在package.json加上"type": "module"

    {
    "name": "hexo-site",
    "version": "0.0.0",
    "private": true,
    "type": "module",
    "devDependencies": {
    "gulp": "^4.0.2",
    "gulp-imagemin": "^9.0.0"
    }
    }
  • 一、Cannot find module 'optipng-bin'

    er Error: Cannot find module 'optipng-bin'
    Require stack:
    - D:\XXX\github\hexo\node_modules\imagemin-optipng\index.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
    at Module._load (node:internal/modules/cjs/loader:985:27)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (D:\XXX\github\hexo\node_modules\imagemin-optipng\index.js:4:17)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at cjsLoader (node:internal/modules/esm/translators:345:17) {
    code: 'MODULE_NOT_FOUND',
    requireStack: [
    'D:\\XXX\\github\\hexo\\node_modules\\imagemin-optipng\\index.js'
    ]
    }
  • 二、gulp-imagemin: Could not load default plugin ***

    [11:32:18] Using gulpfile D:\XXX\github\hexo\gulpfile.js
    [11:32:18] Starting 'default'...
    er Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'mozjpeg' imported from D:\XXX\github\hexo\node_modules\imagemin-mozjpeg\index.js
    at packageResolve (node:internal/modules/esm/resolve:844:9)
    at moduleResolve (node:internal/modules/esm/resolve:901:20)
    at defaultResolve (node:internal/modules/esm/resolve:1121:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:396:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:365:25)
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:240:38)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:85:39)
    at link (node:internal/modules/esm/module_job:84:36) {
    code: 'ERR_MODULE_NOT_FOUND'
    }
    gulp-imagemin: Could not load default plugin `mozjpeg`
    er Error: Cannot find module 'gifsicle'
    Require stack:
    - D:\XXX\github\hexo\node_modules\imagemin-gifsicle\index.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
    at Module._load (node:internal/modules/cjs/loader:985:27)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (D:\XXX\github\hexo\node_modules\imagemin-gifsicle\index.js:3:18)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at cjsLoader (node:internal/modules/esm/translators:345:17) {
    code: 'MODULE_NOT_FOUND',
    requireStack: [
    'D:\\XXX\\github\\hexo\\node_modules\\imagemin-gifsicle\\index.js'
    ]
    }
    gulp-imagemin: Could not load default plugin `gifsicle`
    er Error [ERR_REQUIRE_ESM]: require() of ES Module D:\XXX\github\hexo\node_modules\optipng-bin\index.js from D:\XXX\github\hexo\node_modules\imagemin-optipng\index.js not supported.
    Instead change the require of D:\XXX\github\hexo\node_modules\optipng-bin\index.js in D:\XXX\github\hexo\node_modules\imagemin-optipng\index.js to a dynamic import() which is available in all CommonJS modules.
    at Object.<anonymous> (D:\XXX\github\hexo\node_modules\imagemin-optipng\index.js:4:17) {
    code: 'ERR_REQUIRE_ESM'
    }
    gulp-imagemin: Could not load default plugin `optipng`
    [11:32:22] 'default' errored after 3.81 s
    [11:32:22] Error in plugin "gulp-imagemin"
    TypeError: function_ is not a function
    at file:///D:/XXX/github/hexo/node_modules/p-pipe/index.js:10:25
    at imagemin.buffer (file:///D:/XXX/github/hexo/node_modules/imagemin/index.js:75:26)
    at gulpPlugin.onFinish (file:///D:/XXX/github/hexo/node_modules/gulp-imagemin/index.js:59:31)
    at async file:///D:/XXX/github/hexo/node_modules/gulp-plugin-extras/index.js:19:12
    at async file:///D:/XXX/github/hexo/node_modules/easy-transform-stream/index.js:14:20
  • 三、Error in plugin "gulp-imagemin"

    [19:04:18] Using gulpfile D:\XXX\github\hexo\gulpfile.js
    [19:04:18] Starting 'default'...
    [19:04:22] 'default' errored after 3.61 s
    [19:04:22] Error in plugin "gulp-imagemin"
    Error: spawn D:\XXX\github\hexo\node_modules\.pnpm\optipng-bin@7.0.1\node_modules\optipng-bin\vendor\optipng.exe ENOENT
    at notFoundError (D:\XXX\github\hexo\node_modules\.pnpm\cross-spawn@5.1.0\node_modules\cross-spawn\lib\enoent.js:11:11)
    at verifyENOENT (D:\XXX\github\hexo\node_modules\.pnpm\cross-spawn@5.1.0\node_modules\cross-spawn\lib\enoent.js:46:16)
    at cp.emit (D:\XXX\github\hexo\node_modules\.pnpm\cross-spawn@5.1.0\node_modules\cross-spawn\lib\enoent.js:33:19)
    at ChildProcess._handle.onexit (node:internal/child_process:294:12)
    at Process.callbackTrampoline (node:internal/async_hooks:130:17)

    一、二、三同种问题,由于使用npm/yarn/pnpm install安装的时候并没有完全安装成功

    // pnpm失败跳出
    node_modules/.pnpm/optipng-bin@7.0.1/node_modules/optipng-bin: Running postinstall script, failed in 7.3s (skipped as optional)dules/.pnpm/mozjpeg@8.0.0/node_modules/mozjpeg: Running postinstall script, failed in 4.6s (skipped as optional)
    node_modules/.pnpm/gifsicle@5.3.0/node_modules/gifsicle: Running postinstall script, failed in 3s (skipped as optional) // yarn失败跳出
    [4/4] Building fresh packages...
    [-/9] ⢀ waiting...
    [2/9] ⢀ hexo-util
    [8/9] ⢀ optipng-bin
    [7/9] ⠠ mozjpeg
    warning Error running install script for optional dependency: "D:\\XXX\\github\\hexo\\node_modules\\gifsicle: Command failed.
    Exit code: 1
    Command: node lib/install.js
    Arguments:
    Directory: D:\\XXX\\github\\hexo\\node_modules\\gifsicle
    Output:
    unable to verify the first certificate
    gifsicle pre-build test failed
    compiling from source
    Error: Command failed: C:\\Windows\\system32\\cmd.exe /s /c \"autoreconf -ivf\"
    'autoreconf' �����ڲ����ⲿ���Ҳ���ǿ����еij���
    ���������ļ��� [-/9] ⠈ waiting...
    [-/9] ⠈ waiting...
    [8/9] ⠈ optipng-bin
    [7/9] ⠁ mozjpeg
    warning Error running install script for optional dependency: "D:\\XXX\\github\\hexo\\node_modules\\mozjpeg: Command failed.
    Exit code: 1
    Command: node lib/install.js
    Arguments:
    Directory: D:\\XXX\\github\\hexo\\node_modules\\mozjpeg
    Output:
    unable to verify the first certificate
    mozjpeg pre-build test failed
    compiling from source
    Error: Command failed: C:\\Windows\\system32\\cmd.exe /s /c \"autoreconf -fiv\"
    'autoreconf' �����ڲ����ⲿ���Ҳ���ǿ����еij���
    ���������ļ��� [-/9] ⡀ waiting...
    [-/9] ⡀ waiting...
    [8/9] ⡀ optipng-bin
    [-/9] ⢀ waiting...
    warning Error running install script for optional dependency: "D:\\XXX\\github\\hexo\\node_modules\\optipng-bin: Command failed.
    Exit code: 1
    Command: node lib/install.js
    Arguments:
    Directory: D:\\XXX\\github\\hexo\\node_modules\\optipng-bin
    Output:
    unable to verify the first certificate
    optipng pre-build test failed
    compiling from source

    解决方案:重新安装

    // 如果曾经安装过gulp-imagemin,有时需要删除才可以
    rm -rf node_modules
    // !!!记住顺序
    cnpm i optipng-bin -D
    cnpm i gulp-imagemin -D
  • EPERM: operation not permitted(npm install出现)

    npm WARN cleanup Failed to remove some directories [
    npm WARN cleanup [
    npm WARN cleanup 'D:\\XXX\\github\\hexo\\node_modules',
    npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'D:\XXX\github\hexo\node_modules\readable-web-to-node-stream\node_modules\readable-stream\lib\internal'] {
    npm WARN cleanup errno: -4048,
    npm WARN cleanup code: 'EPERM',
    npm WARN cleanup syscall: 'rmdir',
    npm WARN cleanup path: 'D:\\XXX\\github\\hexo\\node_modules\\readable-web-to-node-stream\\node_modules\\readable-stream\\lib\\internal'
    npm WARN cleanup }
    npm WARN cleanup ],
    npm WARN cleanup [
    npm WARN cleanup 'D:\\XXX\\github\\hexo\\node_modules\\htmlparser2',
    npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'D:\XXX\github\hexo\node_modules\htmlparser2\node_modules'] {
    npm WARN cleanup errno: -4048,
    npm WARN cleanup code: 'EPERM',
    npm WARN cleanup syscall: 'rmdir',
    npm WARN cleanup path: 'D:\\XXX\\github\\hexo\\node_modules\\htmlparser2\\node_modules'
    npm WARN cleanup }
    npm WARN cleanup ],
    npm WARN cleanup [
    npm WARN cleanup 'D:\\XXX\\github\\hexo\\node_modules\\jsdom',
    npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'D:\XXX\github\hexo\node_modules\jsdom'] {
    npm WARN cleanup errno: -4048,
    npm WARN cleanup code: 'EPERM',
    npm WARN cleanup syscall: 'rmdir',
    npm WARN cleanup path: 'D:\\XXX\\github\\hexo\\node_modules\\jsdom'
    npm WARN cleanup }
    npm WARN cleanup ],
    npm WARN cleanup [
    npm WARN cleanup 'D:\\XXX\\github\\hexo\\node_modules\\gulp-imagemin',
    npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'D:\XXX\github\hexo\node_modules\gulp-imagemin\node_modules'] {
    npm WARN cleanup errno: -4048,
    npm WARN cleanup code: 'EPERM',
    npm WARN cleanup syscall: 'rmdir',
    npm WARN cleanup path: 'D:\\XXX\\github\\hexo\\node_modules\\gulp-imagemin\\node_modules'
    npm WARN cleanup }
    npm WARN cleanup ]
    npm WARN cleanup ]
    npm ERR! code 1
    npm ERR! path D:\XXX\github\hexo\node_modules\optipng-bin
    npm ERR! command failed
    npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node lib/install.js
    npm ERR! compiling from source
    npm ERR! unable to verify the first certificate
    npm ERR! optipng pre-build test failed
    npm ERR! Error: Command failed: C:\Windows\system32\cmd.exe /s /c "./configure --with-system-zlib --prefix="D:\XXX\github\hexo\node_modules\optipng-bin\vendor" --bindir="D:\XXX\github\hexo\node_modules\optipng-bin\vendor""

    package.json中先删除gulp-imagemin和optipng-bin

    {
    "devDependencies": {
    "gulp": "^4.0.2",
    "gulp-imagemin": "^9.0.0",
    "optipng-bin": "^9.0.0"
    }
    }

    再重新安装

    rm -rf node_modules
    yarn install
    cnpm i optipng-bin -D
    cnpm i gulp-imagemin -D

gulp-imagemin版本9图片压缩的更多相关文章

  1. Gulp自动化工具之图片压缩

    一.安装node https://nodejs.org/download/ 根据需要选择对应的版本 安装好了之后可以通过node -v参看一下版本 node -v 二.安装gulp npm insta ...

  2. 前端构建工具之gulp(一)「图片压缩」

    前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...

  3. gulp图片压缩

    gulp图片压缩 网页性能优化,通常要处理图片,尤其图片量大的时候,更需要工具来批量处理,这里使用gulp,做个简单总结 image-resize压缩尺寸 var gulp = require('gu ...

  4. gulp-imagemin图片压缩----gulp系列(三)

    本节实现图片压缩,在实现压缩前,先配置images任务,设置源目录和输出目录. 在系列(二)代码的基础上,再进行扩展. 1.找到gulp->config.js,对images进行源目录(src- ...

  5. 续Gulp使用入门三步压缩图片

    gulp 压缩图片 压缩 图片文件可降低文件大小,提高图片加载速度. 找到规律转换为 gulp 代码 规律 找到 images/ 目录下的所有文件,压缩它们,将压缩后的文件存放在 dist/image ...

  6. Gulp 之图片压缩合并

    同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作. 其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/ ...

  7. gulp静态资源构建、压缩、版本号添加

    公司移动端商城使用前后分离方案,前台nginx静态文件,js使用requirejs模式,使用gulp压缩添加版本号时发现问题, 问题1.在公共的js配置中,引用的路径是写死的,缓存会一直存在. 解决方 ...

  8. 一篇迟到的gulp文章,代码合并压缩,less编译

    前言 这篇文章本应该在去年17年写的,但因为种种原因没有写,其实主要是因为懒(捂脸).gulp出来的时间已经很早了,16年的时候还很流行,到17年就被webpack 碾压下去了,不过由于本人接触gul ...

  9. 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)

    涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...

  10. Html5+asp.net mvc 图片压缩上传

    在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法 ...

随机推荐

  1. navicat破解(15以前的版本)

    navicat破解各种不成功,很耽误事.所以,再次整理一个相对省事有效的办法.内容如下: 一:下载此激活工具 二:按下图生成激活码 1. 2. 点击手动激活 3. 将请求码按图粘贴,按图点击操作便可激 ...

  2. SSD寻址单元IU对寿命的影响——古猫先生存储随笔转载

    SSD寻址单元IU对寿命的影响有多大? 原创 古猫先生 存储随笔 2024-01-30 08:30 发表于浙江 [转载]SSD寻址单元IU对寿命的影响有多大? (qq.com) 随着存储技术的不断进步 ...

  3. 2024年,提升Windows开发和使用体验的实践经验 - RIME输入法

    前言 上一篇文章介绍了 Windows 下的包管理器,本文继续介绍输入法. 事实上 Windows 的输入法生态比 Linux/Mac 丰富很多,不过很多国产输入法存在窃取隐私.植入广告.乱安装流氓软 ...

  4. QT - Day 6

    跟着视频教程创建了翻金币的项目,花了好几个晚上才学习完. 视频地址:最新QT从入门到实战 感谢视频的教学,真是受益匪浅. 后面的代码参考了老师的模板以及文档的抒写格式. 发布到随笔中的目的一方面为了完 ...

  5. win32-UI Automation

    使用UI Automation遍历窗口的所有控件标题和类 #include <Windows.h> #include <stdio.h> #include <UIAuto ...

  6. virtualapp启动流程源码分析

    virtualapp启动流程分析 1. 首先是启动本身,执行Vpp 的attachBaseContext @Override protected void attachBaseContext(Cont ...

  7. 【笔记】css —— BFC 原理

    一.什么是 BFC BFC 即 Block Formatting Contexts (块级格式化上下文),具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素 ...

  8. 项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)

    需求   开发基于osg的三维点云引擎模块.  1.基于x,y,z坐标轴.  2.可设置原点,设置缩放比例.  3.可设置y轴和z轴单位.  4.三轴中,XY为2D图的水平.竖直方向:Z轴,对应高度图 ...

  9. day02---虚拟机上网模式

    修改虚拟网络编辑器 虚拟软件网络模式介绍 NAT网络模式 特点:虚拟主机和宿主机网络信息 可以不一致 优点:不容易出现局域网中IP地址冲突 缺点:其它宿主机不能直接访问虚拟机 桥接网络模式 特点:虚拟 ...

  10. CXP2.0的相机是否可以使用CXP1.1的Grabber

    可以 答案是肯定的. 目前CXP共有2个发布版本: 2011年发布CXP1.1 2021年发布CXP2.1,向后兼容,新标准增加了同步功能.数据率放大了一倍. 只要是符合CXP标准.接插件匹配,那么C ...