diff --git a/src/index.ts b/src/index.ts index 64b7ac2..711050d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ +import type * as webpack from 'webpack'; import * as path from 'path'; -import * as webpack from 'webpack'; import * as loaderUtils from 'loader-utils'; import * as fs from 'fs'; import { AddWorkerEntryPointPlugin } from './plugins/AddWorkerEntryPointPlugin'; @@ -150,7 +150,7 @@ class MonacoEditorWebpackPlugin implements webpack.WebpackPluginInstance { } }); const rules = createLoaderRules(languages, features, workers, filename, publicPath, compilationPublicPath, globalAPI); - const plugins = createPlugins(workers, filename); + const plugins = createPlugins(compiler, workers, filename); addCompilerRules(compiler, rules); addCompilerPlugins(compiler, plugins); } @@ -259,7 +259,9 @@ function createLoaderRules(languages: IFeatureDefinition[], features: IFeatureDe ]; } -function createPlugins(workers: ILabeledWorkerDefinition[], filename: string): AddWorkerEntryPointPlugin[] { +function createPlugins(compiler: webpack.Compiler, workers: ILabeledWorkerDefinition[], filename: string): AddWorkerEntryPointPlugin[] { + const webpack = compiler.webpack ?? require('webpack'); + return ( ([]) .concat(workers.map(({ id, entry }) => diff --git a/src/plugins/AddWorkerEntryPointPlugin.ts b/src/plugins/AddWorkerEntryPointPlugin.ts index 8f39d2c..34be2c2 100644 --- a/src/plugins/AddWorkerEntryPointPlugin.ts +++ b/src/plugins/AddWorkerEntryPointPlugin.ts @@ -1,8 +1,4 @@ -import * as webpack from 'webpack'; -const webpackVersion = require('webpack/package.json').version; -const SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin'); -const LoaderTargetPlugin = require('webpack/lib/LoaderTargetPlugin'); -const WebWorkerTemplatePlugin = require('webpack/lib/webworker/WebWorkerTemplatePlugin'); +import type * as webpack from 'webpack'; export interface IAddWorkerEntryPointPluginOptions { id: string; @@ -13,6 +9,8 @@ export interface IAddWorkerEntryPointPluginOptions { } function getCompilerHook(compiler: webpack.Compiler, { id, entry, filename, chunkFilename, plugins }: IAddWorkerEntryPointPluginOptions) { + const webpack = compiler.webpack ?? require('webpack'); + return function (compilation: webpack.Compilation, callback: (error?: Error | null | false) => void) { const outputOptions = { filename, @@ -22,13 +20,14 @@ function getCompilerHook(compiler: webpack.Compiler, { id, entry, filename, chun globalObject: 'this', }; const childCompiler = compilation.createChildCompiler(id, outputOptions, [ - new WebWorkerTemplatePlugin(), - new LoaderTargetPlugin('webworker'), + new webpack.webworker.WebWorkerTemplatePlugin(), + new webpack.LoaderTargetPlugin('webworker'), ]); + const SingleEntryPlugin = webpack.EntryPlugin ?? webpack.SingleEntryPlugin; new SingleEntryPlugin(compiler.context, entry, 'main').apply(childCompiler); plugins.forEach((plugin) => plugin.apply(childCompiler)); - childCompiler.runAsChild((err?: Error, entries?: webpack.Chunk[], compilation?: webpack.Compilation) => callback(err)); + childCompiler.runAsChild((err?: Error) => callback(err)); } } @@ -41,8 +40,10 @@ export class AddWorkerEntryPointPlugin implements webpack.WebpackPluginInstance } apply(compiler: webpack.Compiler) { + const webpack = compiler.webpack ?? require('webpack'); const compilerHook = getCompilerHook(compiler, this.options); - if (webpackVersion < '4') { + const majorVersion = webpack.version.split('.')[0] + if (parseInt(majorVersion) < 4) { (compiler).plugin('make', compilerHook); } else { compiler.hooks.make.tapAsync('AddWorkerEntryPointPlugin', compilerHook);