Svgo: Cannot read property 'path' of undefined (svgo v1.1.0) when using it with gulp-imagemin

Created on 17 Sep 2018  路  6Comments  路  Source: svg/svgo

Hi

My boilerplate depends on gulp-imagemin ^4.1.0. when I run the task to minify svg, it throws an error

events.js:183 throw er; // Unhandled 'error' event ^ TypeError: Cannot read property 'path' of undefined at optimizeOnceCallback (d:\dev\test\node_modules\svgo\lib\svgo.js:48:29) at d:\dev\test\node_modules\svgo\lib\svgo.js:70:9 at SAXParser.sax.onend (d:\dev\test\node_modules\svgo\lib\svgo\svg2js.js:169:13) at emit (d:\dev\test\node_modules\sax\lib\sax.js:624:35) at end (d:\dev\test\node_modules\sax\lib\sax.js:667:5) at SAXParser.write (d:\dev\test\node_modules\sax\lib\sax.js:975:14) at SAXParser.close (d:\dev\test\node_modules\sax\lib\sax.js:157:38) at module.exports (d:\dev\test\node_modules\svgo\lib\svgo\svg2js.js:182:28) at SVGO._optimizeOnce (d:\dev\test\node_modules\svgo\lib\svgo.js:62:5) at optimizeOnceCallback (d:\dev\test\node_modules\svgo\lib\svgo.js:43:26) at d:\dev\test\node_modules\svgo\lib\svgo.js:70:9 at SAXParser.sax.onend (d:\dev\test\node_modules\svgo\lib\svgo\svg2js.js:169:13) at emit (d:\dev\test\node_modules\sax\lib\sax.js:624:35) at end (d:\dev\test\node_modules\sax\lib\sax.js:667:5) at SAXParser.write (d:\dev\test\node_modules\sax\lib\sax.js:975:14) at SAXParser.close (d:\dev\test\node_modules\sax\lib\sax.js:157:38)

To replicate (using my boilerplate)

  1. install yeoman, gulp, yarn (npm i -g yo gulp yarn)
  2. install generator-boilerplatev (npm i -g [email protected])
  3. choose default settings when prompted
  4. run gulp (gulp imagemin)

Notes:
use gulp-imagemin v4.1.0
gulp-imagemin optional dependency is imagemin-svgo ^6.0.0
imagemin-svgo 6.0.0 dependecy is svgo ^1.0.0
which installs svgo ^1.0.0 (at the time of writing it install 1.1.0)

it breaks on svgo version 1.1.0. It's ok for version 1.0.5

Most helpful comment

Should be fixed in v1.1.1.

All 6 comments

I'm having the same issue.

Here's a temporary fix:
open svgo.js, comment out line 48-50, if (info.path) { svgjs.path = info.path}

Is it possible to check the info variable before calling info.path? If it's undefined, info.path may throw an error

This error occurs whenever svgo.optimize is called like this:

svgo.optimize(svgData)

instead of like this:

svgo.optimize(svgData, {path: svgFilepath})

Same issue +1

TypeError: Cannot read property 'path' of undefined
    at optimizeOnceCallback (/home/chenzhuo/repos/activityengine/node_modules/svgo/lib/svgo.js:48:29)
    at /home/chenzhuo/repos/activityengine/node_modules/svgo/lib/svgo.js:70:9
    at SAXParser.sax.onend (/home/chenzhuo/repos/activityengine/node_modules/svgo/lib/svgo/svg2js.js:169:13)
    at emit (/home/chenzhuo/repos/activityengine/node_modules/sax/lib/sax.js:624:35)
    at end (/home/chenzhuo/repos/activityengine/node_modules/sax/lib/sax.js:667:5)
    at SAXParser.write (/home/chenzhuo/repos/activityengine/node_modules/sax/lib/sax.js:975:14)
    at SAXParser.close (/home/chenzhuo/repos/activityengine/node_modules/sax/lib/sax.js:157:38)
    at module.exports (/home/chenzhuo/repos/activityengine/node_modules/svgo/lib/svgo/svg2js.js:182:28)
    at SVGO._optimizeOnce (/home/chenzhuo/repos/activityengine/node_modules/svgo/lib/svgo.js:62:5)
    at Promise (/home/chenzhuo/repos/activityengine/node_modules/svgo/lib/svgo.js:55:14)
    at new Promise (<anonymous>)
    at SVGO.optimize (/home/chenzhuo/repos/activityengine/node_modules/svgo/lib/svgo.js:25:12)
    at decl.value.walk.node (/home/chenzhuo/repos/activityengine/node_modules/postcss-svgo/dist/index.js:69:28)
    at walk (/home/chenzhuo/repos/activityengine/node_modules/postcss-value-parser/lib/walk.js:7:22)
    at ValueParser.walk (/home/chenzhuo/repos/activityengine/node_modules/postcss-value-parser/lib/index.js:18:5)
    at minifyPromise (/home/chenzhuo/repos/activityengine/node_modules/postcss-svgo/dist/index.js:34:64)
    at css.walkDecls.decl (/home/chenzhuo/repos/activityengine/node_modules/postcss-svgo/dist/index.js:109:35)
    at /home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:151:28
    at /home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:109:26
    at AtRule.each (/home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:77:22)
    at AtRule.walk (/home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:108:21)
    at /home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:111:32
    at Root.each (/home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:77:22)
    at Root.walk (/home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:108:21)
    at Root.walkDecls (/home/chenzhuo/repos/activityengine/node_modules/postcss/lib/container.es6:149:25)
    at Promise (/home/chenzhuo/repos/activityengine/node_modules/postcss-svgo/dist/index.js:107:17)
    at new Promise (<anonymous>)
    at css (/home/chenzhuo/repos/activityengine/node_modules/postcss-svgo/dist/index.js:105:16)
    at initializePlugin (/home/chenzhuo/repos/activityengine/node_modules/cssnano/dist/index.js:35:51)
    at <anonymous>

Breaking build is a perfect choice to start a Monday :D Easiest workaround is just to specify exact version in package.json:

"svgo": "1.0.5",

Should be fixed in v1.1.1.

I tried the fix proposed by @Agrumas but with "svgo": "1.1.0" - died same way. Trying "svgo": "1.0.5", worked!

Was this page helpful?
0 / 5 - 0 ratings