Skip to content

TypeError: Cannot read property 'then' of undefined when used with serviceworker-webpack-plugin #7615

Closed
@rezonant

Description

@rezonant

Bug Report or Feature Request (mark with an x)

- [x] bug report -> please search issues before submitting
- [ ] feature request

Versions.

@ngtools/webpack 1.6.2

Description

When using serviceworker-webpack-plugin, @ngtools/webpack tries to call done.then() on its after-resolvers step, but done is undefined. Crashing code is:

        compiler.plugin('after-resolvers', (compiler) => {
            // Virtual file system.
            compiler.resolvers.normal.plugin('before-resolve', (request, cb) => {
                if (request.request.match(/\.ts$/)) {
                    this.done.then(() => cb(), () => cb());
                }
                else {
                    cb();
                }
            });
        });

Furthermore, this code will run (and crash) even if the @ngtools/webpack loader definition is set to exclude the service worker TS files.

It appears that the fix may be to check if this.done is defined before delaying cb, otherwise just run cb() as if the file was not a .ts, but I'm not well versed with the @ngtools/webpack codebase. I can provide a PR if necessary.

Repro steps.

Create a webpack project which uses @ngtools/webpack as its Typescript compiler, include serviceworker-webpack-plugin, point that plugin at a .ts file.

The log given by the failure.

A change was made locally to serviceworker-webpack-plugin to output the exception that it caught:

TypeError: Cannot read property 'then' of undefined
    at Resolver.compiler.resolvers.normal.plugin (.../node_modules/@ngtools/webpack/src/plugin.js:278:30)
    at Resolver.applyPluginsAsyncSeriesBailResult1 (.../node_modules/tapable/lib/Tapable.js:256:13)
    at Resolver.doResolve (.../node_modules/enhanced-resolve/lib/Resolver.js:110:12)
    at Resolver.resolve (.../node_modules/enhanced-resolve/lib/Resolver.js:86:14)
    at asyncLib.parallel.callback (.../node_modules/webpack/lib/NormalModuleFactory.js:129:29)
    at .../node_modules/async/dist/async.js:3853:24
    at eachOfArrayLike (.../node_modules/async/dist/async.js:1003:9)
    at eachOf (.../node_modules/async/dist/async.js:1051:5)
    at _parallel (.../node_modules/async/dist/async.js:3852:5)
    at Object.parallelLimit [as parallel] (.../node_modules/async/dist/async.js:3935:5)
    at .../node_modules/webpack/lib/NormalModuleFactory.js:121:14
    at .../node_modules/webpack/lib/NormalModuleFactory.js:64:5
    at applyPluginsAsyncWaterfall (.../node_modules/webpack/lib/NormalModuleFactory.js:246:4)
    at .../node_modules/tapable/lib/Tapable.js:268:11
    at NormalModuleFactory.<anonymous> (.../path-override.plugin.js:30:24)
    at .../node_modules/tapable/lib/Tapable.js:270:14
    at NormalModuleFactory._nmf.plugin (.../node_modules/@ngtools/webpack/src/paths-plugin.js:78:24)
    at NormalModuleFactory.applyPluginsAsyncWaterfall (.../node_modules/tapable/lib/Tapable.js:272:13)
    at NormalModuleFactory.create (.../node_modules/webpack/lib/NormalModuleFactory.js:230:8)
    at Compilation._addModuleChain (.../node_modules/webpack/lib/Compilation.js:382:17)
    at Compilation.addEntry (.../node_modules/webpack/lib/Compilation.js:464:8)
    at Compiler.compiler.plugin (.../node_modules/webpack/lib/SingleEntryPlugin.js:24:16)
    at Compiler.applyPluginsParallel (.../node_modules/tapable/lib/Tapable.js:293:14)
    at .../node_modules/webpack/lib/Compiler.js:488:8
    at Compiler.applyPluginsAsyncSeries (.../node_modules/tapable/lib/Tapable.js:195:46)
    at Compiler.compile (.../node_modules/webpack/lib/Compiler.js:481:7)
    at Compiler.runAsChild (.../node_modules/webpack/lib/Compiler.js:282:7)
    at .../node_modules/serviceworker-webpack-plugin/lib/index.js:139:23
    at ServiceWorkerPlugin.handleMake (.../node_modules/serviceworker-webpack-plugin/lib/index.js:138:14)
    at Compiler.<anonymous> (.../node_modules/serviceworker-webpack-plugin/lib/index.js:104:15)
Error: Something went wrong during the make event.
    at .../node_modules/serviceworker-webpack-plugin/lib/index.js:108:20

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3An issue that is relevant to core functions, but does not impede progress. Important, but not urgenttype: bug/fix

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions