webpack-contrib / purifycss-webpack

UNMAINTAINED, use https://github.com/FullHuman/purgecss-webpack-plugin
MIT License
772 stars 37 forks source link

paths parameter wrapped in an object causes TypeError #71

Closed jeggett closed 7 years ago

jeggett commented 7 years ago

When I set paths parameter like in paths: glob.sync(${PATHS.app}/*), everything is fine. But when I use array of paths like that

paths: {
          app: glob.sync(`${PATHS.app}/*`),
        },

I got this error

/home/jeggett/WebstormProjects/webpack2_config/node_modules/purifycss-webpack/dist/index.js:70
              var filesToSearch = (paths[chunkName] || paths).concat(search.files(modules, options.moduleExtensions || [], function (file) {
                                                              ^

TypeError: (paths[chunkName] || paths).concat is not a function
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/purifycss-webpack/dist/index.js:70:63
    at Array.forEach (native)
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/purifycss-webpack/dist/index.js:66:28
    at Array.forEach (native)
    at Compilation.<anonymous> (/home/jeggett/WebstormProjects/webpack2_config/node_modules/purifycss-webpack/dist/index.js:51:30)
    at next (/home/jeggett/WebstormProjects/webpack2_config/node_modules/tapable/lib/Tapable.js:140:14)
    at ExtractTextPlugin.<anonymous> (/home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/index.js:316:4)
    at Compilation.applyPluginsAsyncSeries (/home/jeggett/WebstormProjects/webpack2_config/node_modules/tapable/lib/Tapable.js:142:13)
    at sealPart2 (/home/jeggett/WebstormProjects/webpack2_config/node_modules/webpack/lib/Compilation.js:597:9)
    at next (/home/jeggett/WebstormProjects/webpack2_config/node_modules/tapable/lib/Tapable.js:138:11)
    at ExtractTextPlugin.<anonymous> (/home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/index.js:292:5)
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/node_modules/async/lib/async.js:52:16
    at done (/home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/node_modules/async/lib/async.js:246:17)
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/node_modules/async/lib/async.js:44:16
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/index.js:276:6
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/node_modules/async/lib/async.js:52:16
    at done (/home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/node_modules/async/lib/async.js:246:17)
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/node_modules/async/lib/async.js:44:16
    at /home/jeggett/WebstormProjects/webpack2_config/node_modules/extract-text-webpack-plugin/index.js:266:9
    at rebuilding.forEach.cb (/home/jeggett/WebstormProjects/webpack2_config/node_modules/webpack/lib/Compilation.js:475:29)
    at Array.forEach (native)
    at callback (/home/jeggett/WebstormProjects/webpack2_config/node_modules/webpack/lib/Compilation.js:475:15)
    at processModuleDependencies (/home/jeggett/WebstormProjects/webpack2_config/node_modules/webpack/lib/Compilation.js:494:5)
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)
bebraw commented 7 years ago

The key has to match to an entry. I'll add a check to guard against that tomorrow.

jeggett commented 7 years ago

What does mean 'match against entry' in simple terms? I have app entry which match against 'app' property name in the object I supply as `paths' parameter

const common = merge(
  {
    entry: {
      app: PATHS.app,
    },
<...>
bebraw commented 7 years ago

I added improved handling so it should be able to deal with <key>: <path> kind of case. webpack doesn't normalize that situation at all so I had to write the normalization step myself to force it into an array.

There's also stricter validation in place now.