Skip to content

Cannot read property 'split' of undefined #289

Open
@toriningen

Description

@toriningen

Version 0.6.4. Initial build has been successful, however on rebuild I've got this exception:

TypeError: Cannot read property 'split' of undefined
    at /opt/app/node_modules/hard-source-webpack-plugin/index.js:923:22
    at Array.forEach (<anonymous>)
    at /opt/app/node_modules/hard-source-webpack-plugin/index.js:914:31
    at Array.forEach (<anonymous>)
    at /opt/app/node_modules/hard-source-webpack-plugin/index.js:886:39
    at <anonymous>

I've altered hard-source-webpack-plugin/index.js to see what's wrong:

     resolveItem.loaders.forEach(function(loader) {
+      console.log(">>>>", loader);
       if (typeof loader === 'object') {
         loader = loader.loader;
       }
       // Loaders specified in a dependency are searched for from the
       // context of the module containing that dependency.
       var loaderMissing = missingCache.loader[JSON.stringify([
         resolveKey[1],
         loader.split('?')[0]  //// <<<< exception is here
       ])];

It seems that for some reason, some loader objects are improperly serialized strings:

Valid loaders printed by the debugging statement above:

>>>> { loader: '/opt/app/node_modules/html-webpack-plugin/lib/loader.js' }
>>>> { loader: '/opt/app/node_modules/offline-plugin/lib/misc/sw-loader.js',
  options: 'json=%7B%22data_var_name%22%3A%22__wpo%22%2C%22loaders%22%3A%5B%5D%2C%22cacheMaps%22%3A%5B%5D%7D' }
>>>> { options: 
   { cacheDirectory: true,
     plugins: [ 'transform-runtime' ],
     presets: [ 'es2015', 'react', 'stage-0' ],
     env: { local: [Object], production: [Object] } },
  ident: 'ref--0-0',
  loader: '/opt/app/node_modules/babel-loader/lib/index.js' }
>>>> { options: 
   { cacheDirectory: true,
     plugins: [ 'transform-runtime' ],
     presets: [ 'es2015', 'react', 'stage-0' ],
     env: { local: [Object], production: [Object] } },
  ident: 'ref--0-0',
  loader: '/opt/app/node_modules/babel-loader/lib/index.js' }

Problematic loader:

>>>> { '0': '/',
  '1': 'o',
  '2': 'p',
  '3': 't',
  '4': '/',
  '5': 'a',
  '6': 'p',
  '7': 'p',
  '8': '/',
  '9': 'n',
  '10': 'o',
  '11': 'd',
  '12': 'e',
  '13': '_',
  '14': 'm',
  '15': 'o',
  '16': 'd',
  '17': 'u',
  '18': 'l',
  '19': 'e',
  '20': 's',
  '21': '/',
  '22': 'o',
  '23': 'f',
  '24': 'f',
  '25': 'l',
  '26': 'i',
  '27': 'n',
  '28': 'e',
  '29': '-',
  '30': 'p',
  '31': 'l',
  '32': 'u',
  '33': 'g',
  '34': 'i',
  '35': 'n',
  '36': '/',
  '37': 'l',
  '38': 'i',
  '39': 'b',
  '40': '/',
  '41': 'm',
  '42': 'i',
  '43': 's',
  '44': 'c',
  '45': '/',
  '46': 'r',
  '47': 'u',
  '48': 'n',
  '49': 't',
  '50': 'i',
  '51': 'm',
  '52': 'e',
  '53': '-',
  '54': 'l',
  '55': 'o',
  '56': 'a',
  '57': 'd',
  '58': 'e',
  '59': 'r',
  '60': '.',
  '61': 'j',
  '62': 's',
  '63': '?',
  '64': '{',
  '65': '"',
  '66': 'S',
  '67': 'e',
  '68': 'r',
  '69': 'v',
  '70': 'i',
  '71': 'c',
  '72': 'e',
  '73': 'W',
  '74': 'o',
  '75': 'r',
  '76': 'k',
  '77': 'e',
  '78': 'r',
  '79': '"',
  '80': ':',
  '81': '{',
  '82': '"',
  '83': 'l',
  '84': 'o',
  '85': 'c',
  '86': 'a',
  '87': 't',
  '88': 'i',
  '89': 'o',
  '90': 'n',
  '91': '"',
  '92': ':',
  '93': '"',
  '94': '/',
  '95': 's',
  '96': 'w',
  '97': '.',
  '98': 'j',
  '99': 's',
  '100': '"',
  '101': ',',
  '102': '"',
  '103': 'e',
  '104': 'v',
  '105': 'e',
  '106': 'n',
  '107': 't',
  '108': 's',
  '109': '"',
  '110': ':',
  '111': 't',
  '112': 'r',
  '113': 'u',
  '114': 'e',
  '115': '}',
  '116': ',',
  '117': '"',
  '118': 'A',
  '119': 'p',
  '120': 'p',
  '121': 'C',
  '122': 'a',
  '123': 'c',
  '124': 'h',
  '125': 'e',
  '126': '"',
  '127': ':',
  '128': '{',
  '129': '"',
  '130': 'l',
  '131': 'o',
  '132': 'c',
  '133': 'a',
  '134': 't',
  '135': 'i',
  '136': 'o',
  '137': 'n',
  '138': '"',
  '139': ':',
  '140': '"',
  '141': '/',
  '142': 'a',
  '143': 'p',
  '144': 'p',
  '145': 'c',
  '146': 'a',
  '147': 'c',
  '148': 'h',
  '149': 'e',
  '150': '/',
  '151': '"',
  '152': ',',
  '153': '"',
  '154': 'n',
  '155': 'a',
  '156': 'm',
  '157': 'e',
  '158': '"',
  '159': ':',
  '160': '"',
  '161': 'm',
  '162': 'a',
  '163': 'n',
  '164': 'i',
  '165': 'f',
  '166': 'e',
  '167': 's',
  '168': 't',
  '169': '"',
  '170': ',',
  '171': '"',
  '172': 'e',
  '173': 'v',
  '174': 'e',
  '175': 'n',
  '176': 't',
  '177': 's',
  '178': '"',
  '179': ':',
  '180': 't',
  '181': 'r',
  '182': 'u',
  '183': 'e',
  '184': ',',
  '185': '"',
  '186': 'd',
  '187': 'i',
  '188': 's',
  '189': 'a',
  '190': 'b',
  '191': 'l',
  '192': 'e',
  '193': 'I',
  '194': 'n',
  '195': 's',
  '196': 't',
  '197': 'a',
  '198': 'l',
  '199': 'l',
  '200': '"',
  '201': ':',
  '202': 'f',
  '203': 'a',
  '204': 'l',
  '205': 's',
  '206': 'e',
  '207': '}',
  '208': '}',
  loader: undefined }

I suppose that hotfix would be to add check like this (until real cause is discovered):

if (typeof loader === 'object') && (loader.loader == null)) {
    const _a = [];
    for (const [k, v] of Object.entries(loader)) {
        _a[k] = v;
    }
    loader = _a.join('');
}

Please let me know if I can provide any additional info on this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions