Ver código fonte

Merge pull request #147 from k15a/use-compiler-webpack

Use compiler.webpack if available
Alexandru Dima 4 anos atrás
pai
commit
21839da687
2 arquivos alterados com 15 adições e 12 exclusões
  1. 5 3
      src/index.ts
  2. 10 9
      src/plugins/AddWorkerEntryPointPlugin.ts

+ 5 - 3
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 (
     (<AddWorkerEntryPointPlugin[]>[])
       .concat(workers.map(({ id, entry }) =>

+ 10 - 9
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) {
       (<any>compiler).plugin('make', compilerHook);
     } else {
       compiler.hooks.make.tapAsync('AddWorkerEntryPointPlugin', compilerHook);