@rushstack/heft-webpack4-plugin 0.4.33 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/WebpackPlugin.d.ts.map +1 -1
- package/lib/WebpackPlugin.js +13 -10
- package/lib/WebpackPlugin.js.map +1 -1
- package/lib/shared.d.ts +9 -1
- package/lib/shared.d.ts.map +1 -1
- package/lib/shared.js.map +1 -1
- package/package.json +5 -10
package/dist/tsdoc-metadata.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebpackPlugin.d.ts","sourceRoot":"","sources":["../src/WebpackPlugin.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EAIX,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AAmBzB;;GAEG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,SAAgB,UAAU,EAAE,MAAM,CAAe;IAEjD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA+B;IAC9D,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkB3B,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;YA0CpE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"WebpackPlugin.d.ts","sourceRoot":"","sources":["../src/WebpackPlugin.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EAIX,WAAW,EAEZ,MAAM,iBAAiB,CAAC;AAmBzB;;GAEG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,SAAgB,UAAU,EAAE,MAAM,CAAe;IAEjD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA+B;IAC9D,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkB3B,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;YA0CpE,gBAAgB;IAgK9B,OAAO,CAAC,WAAW;CAapB"}
|
package/lib/WebpackPlugin.js
CHANGED
|
@@ -89,13 +89,16 @@ class WebpackPlugin {
|
|
|
89
89
|
if (buildProperties.serveMode) {
|
|
90
90
|
const defaultDevServerOptions = {
|
|
91
91
|
host: 'localhost',
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
92
|
+
devMiddleware: {
|
|
93
|
+
publicPath: '/',
|
|
94
|
+
stats: {
|
|
95
|
+
cached: false,
|
|
96
|
+
cachedAssets: false,
|
|
97
|
+
colors: supportsColor
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
client: {
|
|
101
|
+
logging: 'info'
|
|
99
102
|
},
|
|
100
103
|
port: 8080
|
|
101
104
|
};
|
|
@@ -120,8 +123,8 @@ class WebpackPlugin {
|
|
|
120
123
|
// Register a plugin to callback after webpack is done with the first compilation
|
|
121
124
|
// so we can move on to post-build
|
|
122
125
|
let firstCompilationDoneCallback;
|
|
123
|
-
const originalBeforeCallback = options.
|
|
124
|
-
options.
|
|
126
|
+
const originalBeforeCallback = options.onBeforeSetupMiddleware;
|
|
127
|
+
options.onBeforeSetupMiddleware = (server) => {
|
|
125
128
|
compiler.hooks.done.tap('heft-webpack-plugin', () => {
|
|
126
129
|
if (firstCompilationDoneCallback) {
|
|
127
130
|
firstCompilationDoneCallback();
|
|
@@ -129,7 +132,7 @@ class WebpackPlugin {
|
|
|
129
132
|
}
|
|
130
133
|
});
|
|
131
134
|
if (originalBeforeCallback) {
|
|
132
|
-
return originalBeforeCallback(
|
|
135
|
+
return originalBeforeCallback(server);
|
|
133
136
|
}
|
|
134
137
|
};
|
|
135
138
|
// The webpack-dev-server package has a design flaw, where merely loading its package will set the
|
package/lib/WebpackPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebpackPlugin.js","sourceRoot":"","sources":["../src/WebpackPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type {\n Compiler as WebpackCompiler,\n MultiCompiler as WebpackMultiCompiler,\n Stats as WebpackStats,\n compilation as WebpackCompilation\n} from 'webpack';\nimport type TWebpackDevServer from 'webpack-dev-server';\nimport { LegacyAdapters, Import, IPackageJson, PackageJsonLookup } from '@rushstack/node-core-library';\nimport type {\n HeftConfiguration,\n HeftSession,\n IBuildStageContext,\n IBuildStageProperties,\n IBundleSubstage,\n IHeftPlugin,\n ScopedLogger\n} from '@rushstack/heft';\nimport type {\n IWebpackConfiguration,\n IWebpackBundleSubstageProperties,\n IWebpackBuildStageProperties\n} from './shared';\nimport { WebpackConfigurationLoader } from './WebpackConfigurationLoader';\n\nconst webpack: typeof import('webpack') = Import.lazy('webpack', require);\n\nconst PLUGIN_NAME: string = 'WebpackPlugin';\nconst WEBPACK_DEV_SERVER_PACKAGE_NAME: string = 'webpack-dev-server';\nconst WEBPACK_DEV_SERVER_ENV_VAR_NAME: string = 'WEBPACK_DEV_SERVER';\n\ninterface IWebpackVersions {\n webpackVersion: string;\n webpackDevServerVersion: string;\n}\n\n/**\n * @internal\n */\nexport class WebpackPlugin implements IHeftPlugin {\n public readonly pluginName: string = PLUGIN_NAME;\n\n private static _webpackVersions: IWebpackVersions | undefined;\n private static _getWebpackVersions(): IWebpackVersions {\n if (!WebpackPlugin._webpackVersions) {\n const webpackDevServerPackageJsonPath: string = Import.resolveModule({\n modulePath: 'webpack-dev-server/package.json',\n baseFolderPath: __dirname\n });\n const webpackDevServerPackageJson: IPackageJson = PackageJsonLookup.instance.loadPackageJson(\n webpackDevServerPackageJsonPath\n );\n WebpackPlugin._webpackVersions = {\n webpackVersion: webpack.version!,\n webpackDevServerVersion: webpackDevServerPackageJson.version\n };\n }\n\n return WebpackPlugin._webpackVersions;\n }\n\n public apply(heftSession: HeftSession, heftConfiguration: HeftConfiguration): void {\n heftSession.hooks.build.tap(PLUGIN_NAME, (build: IBuildStageContext) => {\n build.hooks.bundle.tap(PLUGIN_NAME, (bundle: IBundleSubstage) => {\n bundle.hooks.configureWebpack.tap(\n { name: PLUGIN_NAME, stage: Number.MIN_SAFE_INTEGER },\n (webpackConfiguration: unknown) => {\n const webpackVersions: IWebpackVersions = WebpackPlugin._getWebpackVersions();\n bundle.properties.webpackVersion = webpack.version;\n bundle.properties.webpackDevServerVersion = webpackVersions.webpackDevServerVersion;\n\n return webpackConfiguration;\n }\n );\n\n bundle.hooks.configureWebpack.tapPromise(PLUGIN_NAME, async (existingConfiguration: unknown) => {\n const logger: ScopedLogger = heftSession.requestScopedLogger('configure-webpack');\n if (existingConfiguration) {\n logger.terminal.writeVerboseLine(\n 'Skipping loading webpack config file because the webpack config has already been set.'\n );\n return existingConfiguration;\n } else {\n return await WebpackConfigurationLoader.tryLoadWebpackConfigAsync(\n logger,\n heftConfiguration.buildFolder,\n build.properties\n );\n }\n });\n\n bundle.hooks.run.tapPromise(PLUGIN_NAME, async () => {\n await this._runWebpackAsync(\n heftSession,\n bundle.properties as IWebpackBundleSubstageProperties,\n build.properties,\n heftConfiguration.terminalProvider.supportsColor\n );\n });\n });\n });\n }\n\n private async _runWebpackAsync(\n heftSession: HeftSession,\n bundleSubstageProperties: IWebpackBundleSubstageProperties,\n buildProperties: IBuildStageProperties,\n supportsColor: boolean\n ): Promise<void> {\n const webpackConfiguration: IWebpackConfiguration | undefined | null =\n bundleSubstageProperties.webpackConfiguration;\n if (!webpackConfiguration) {\n return;\n }\n\n const logger: ScopedLogger = heftSession.requestScopedLogger('webpack');\n const webpackVersions: IWebpackVersions = WebpackPlugin._getWebpackVersions();\n if (bundleSubstageProperties.webpackVersion !== webpackVersions.webpackVersion) {\n logger.emitError(\n new Error(\n `The Webpack plugin expected to be configured with Webpack version ${webpackVersions.webpackVersion}, ` +\n `but the configuration specifies version ${bundleSubstageProperties.webpackVersion}. ` +\n 'Are multiple versions of the Webpack plugin present?'\n )\n );\n }\n\n if (bundleSubstageProperties.webpackDevServerVersion !== webpackVersions.webpackDevServerVersion) {\n logger.emitError(\n new Error(\n `The Webpack plugin expected to be configured with webpack-dev-server version ${webpackVersions.webpackDevServerVersion}, ` +\n `but the configuration specifies version ${bundleSubstageProperties.webpackDevServerVersion}. ` +\n 'Are multiple versions of the Webpack plugin present?'\n )\n );\n }\n\n logger.terminal.writeLine(`Using Webpack version ${webpack.version}`);\n\n let compiler: WebpackCompiler | WebpackMultiCompiler;\n if (Array.isArray(webpackConfiguration)) {\n if (webpackConfiguration.length === 0) {\n logger.terminal.writeLine('The webpack configuration received is an empty array - nothing to do.');\n return;\n } else {\n compiler = webpack(webpackConfiguration); /* (webpack.Compilation[]) => MultiCompiler */\n }\n } else {\n compiler = webpack(webpackConfiguration); /* (webpack.Compilation) => Compiler */\n }\n\n if (buildProperties.serveMode) {\n const defaultDevServerOptions: TWebpackDevServer.Configuration = {\n host: 'localhost',\n publicPath: '/',\n filename: '[name]_[hash].js',\n clientLogLevel: 'info',\n stats: {\n cached: false,\n cachedAssets: false,\n colors: supportsColor\n },\n port: 8080\n };\n\n let options: TWebpackDevServer.Configuration;\n if (Array.isArray(webpackConfiguration)) {\n const devServerOptions: TWebpackDevServer.Configuration[] = webpackConfiguration\n .map((configuration) => configuration.devServer)\n .filter((devServer): devServer is TWebpackDevServer.Configuration => !!devServer);\n if (devServerOptions.length > 1) {\n logger.emitWarning(\n new Error(`Detected multiple webpack devServer configurations, using the first one.`)\n );\n }\n\n if (devServerOptions.length > 0) {\n options = { ...defaultDevServerOptions, ...devServerOptions[0] };\n } else {\n options = defaultDevServerOptions;\n }\n } else {\n options = { ...defaultDevServerOptions, ...webpackConfiguration.devServer };\n }\n\n // Register a plugin to callback after webpack is done with the first compilation\n // so we can move on to post-build\n let firstCompilationDoneCallback: (() => void) | undefined;\n const originalBeforeCallback: typeof options.before | undefined = options.before;\n options.before = (app, devServer, compiler: WebpackCompiler) => {\n compiler.hooks.done.tap('heft-webpack-plugin', () => {\n if (firstCompilationDoneCallback) {\n firstCompilationDoneCallback();\n firstCompilationDoneCallback = undefined;\n }\n });\n\n if (originalBeforeCallback) {\n return originalBeforeCallback(app, devServer, compiler);\n }\n };\n\n // The webpack-dev-server package has a design flaw, where merely loading its package will set the\n // WEBPACK_DEV_SERVER environment variable -- even if no APIs are accessed. This environment variable\n // causes incorrect behavior if Heft is not running in serve mode. Thus, we need to be careful to call require()\n // only if Heft is in serve mode.\n const WebpackDevServer: typeof TWebpackDevServer = require(WEBPACK_DEV_SERVER_PACKAGE_NAME);\n // TODO: the WebpackDevServer accepts a third parameter for a logger. We should make\n // use of that to make logging cleaner\n const webpackDevServer: TWebpackDevServer = new WebpackDevServer(compiler, options);\n await new Promise<void>((resolve: () => void, reject: (error: Error) => void) => {\n firstCompilationDoneCallback = resolve;\n\n webpackDevServer.listen(options.port!, options.host!, (error: Error | undefined) => {\n if (error) {\n reject(error);\n }\n });\n });\n } else {\n if (process.env[WEBPACK_DEV_SERVER_ENV_VAR_NAME]) {\n logger.emitWarning(\n new Error(\n `The \"${WEBPACK_DEV_SERVER_ENV_VAR_NAME}\" environment variable is set, ` +\n 'which will cause problems when webpack is not running in serve mode. ' +\n `(Did a dependency inadvertently load the \"${WEBPACK_DEV_SERVER_PACKAGE_NAME}\" package?)`\n )\n );\n }\n\n let stats: WebpackStats | WebpackCompilation.MultiStats | undefined;\n if (buildProperties.watchMode) {\n try {\n stats = await LegacyAdapters.convertCallbackToPromise(\n (compiler as WebpackCompiler).watch.bind(compiler),\n {}\n );\n } catch (e) {\n logger.emitError(e as Error);\n }\n } else {\n try {\n stats = await LegacyAdapters.convertCallbackToPromise(\n (compiler as WebpackCompiler).run.bind(compiler)\n );\n } catch (e) {\n logger.emitError(e as Error);\n }\n }\n\n if (stats) {\n // eslint-disable-next-line require-atomic-updates\n (buildProperties as IWebpackBuildStageProperties).webpackStats = stats;\n\n this._emitErrors(logger, stats);\n }\n }\n }\n\n private _emitErrors(logger: ScopedLogger, stats: WebpackStats | WebpackCompilation.MultiStats): void {\n if (stats.hasErrors() || stats.hasWarnings()) {\n const serializedStats: WebpackStats.ToJsonOutput = stats.toJson('errors-warnings');\n\n for (const warning of serializedStats.warnings as (string | Error)[]) {\n logger.emitWarning(warning instanceof Error ? warning : new Error(warning));\n }\n\n for (const error of serializedStats.errors as (string | Error)[]) {\n logger.emitError(error instanceof Error ? error : new Error(error));\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"WebpackPlugin.js","sourceRoot":"","sources":["../src/WebpackPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type {\n Compiler as WebpackCompiler,\n MultiCompiler as WebpackMultiCompiler,\n Stats as WebpackStats,\n compilation as WebpackCompilation\n} from 'webpack';\nimport type TWebpackDevServer from 'webpack-dev-server';\nimport { LegacyAdapters, Import, IPackageJson, PackageJsonLookup } from '@rushstack/node-core-library';\nimport type {\n HeftConfiguration,\n HeftSession,\n IBuildStageContext,\n IBuildStageProperties,\n IBundleSubstage,\n IHeftPlugin,\n ScopedLogger\n} from '@rushstack/heft';\nimport type {\n IWebpackConfiguration,\n IWebpackBundleSubstageProperties,\n IWebpackBuildStageProperties\n} from './shared';\nimport { WebpackConfigurationLoader } from './WebpackConfigurationLoader';\n\nconst webpack: typeof import('webpack') = Import.lazy('webpack', require);\n\nconst PLUGIN_NAME: string = 'WebpackPlugin';\nconst WEBPACK_DEV_SERVER_PACKAGE_NAME: string = 'webpack-dev-server';\nconst WEBPACK_DEV_SERVER_ENV_VAR_NAME: string = 'WEBPACK_DEV_SERVER';\n\ninterface IWebpackVersions {\n webpackVersion: string;\n webpackDevServerVersion: string;\n}\n\n/**\n * @internal\n */\nexport class WebpackPlugin implements IHeftPlugin {\n public readonly pluginName: string = PLUGIN_NAME;\n\n private static _webpackVersions: IWebpackVersions | undefined;\n private static _getWebpackVersions(): IWebpackVersions {\n if (!WebpackPlugin._webpackVersions) {\n const webpackDevServerPackageJsonPath: string = Import.resolveModule({\n modulePath: 'webpack-dev-server/package.json',\n baseFolderPath: __dirname\n });\n const webpackDevServerPackageJson: IPackageJson = PackageJsonLookup.instance.loadPackageJson(\n webpackDevServerPackageJsonPath\n );\n WebpackPlugin._webpackVersions = {\n webpackVersion: webpack.version!,\n webpackDevServerVersion: webpackDevServerPackageJson.version\n };\n }\n\n return WebpackPlugin._webpackVersions;\n }\n\n public apply(heftSession: HeftSession, heftConfiguration: HeftConfiguration): void {\n heftSession.hooks.build.tap(PLUGIN_NAME, (build: IBuildStageContext) => {\n build.hooks.bundle.tap(PLUGIN_NAME, (bundle: IBundleSubstage) => {\n bundle.hooks.configureWebpack.tap(\n { name: PLUGIN_NAME, stage: Number.MIN_SAFE_INTEGER },\n (webpackConfiguration: unknown) => {\n const webpackVersions: IWebpackVersions = WebpackPlugin._getWebpackVersions();\n bundle.properties.webpackVersion = webpack.version;\n bundle.properties.webpackDevServerVersion = webpackVersions.webpackDevServerVersion;\n\n return webpackConfiguration;\n }\n );\n\n bundle.hooks.configureWebpack.tapPromise(PLUGIN_NAME, async (existingConfiguration: unknown) => {\n const logger: ScopedLogger = heftSession.requestScopedLogger('configure-webpack');\n if (existingConfiguration) {\n logger.terminal.writeVerboseLine(\n 'Skipping loading webpack config file because the webpack config has already been set.'\n );\n return existingConfiguration;\n } else {\n return await WebpackConfigurationLoader.tryLoadWebpackConfigAsync(\n logger,\n heftConfiguration.buildFolder,\n build.properties\n );\n }\n });\n\n bundle.hooks.run.tapPromise(PLUGIN_NAME, async () => {\n await this._runWebpackAsync(\n heftSession,\n bundle.properties as IWebpackBundleSubstageProperties,\n build.properties,\n heftConfiguration.terminalProvider.supportsColor\n );\n });\n });\n });\n }\n\n private async _runWebpackAsync(\n heftSession: HeftSession,\n bundleSubstageProperties: IWebpackBundleSubstageProperties,\n buildProperties: IBuildStageProperties,\n supportsColor: boolean\n ): Promise<void> {\n const webpackConfiguration: IWebpackConfiguration | undefined | null =\n bundleSubstageProperties.webpackConfiguration;\n if (!webpackConfiguration) {\n return;\n }\n\n const logger: ScopedLogger = heftSession.requestScopedLogger('webpack');\n const webpackVersions: IWebpackVersions = WebpackPlugin._getWebpackVersions();\n if (bundleSubstageProperties.webpackVersion !== webpackVersions.webpackVersion) {\n logger.emitError(\n new Error(\n `The Webpack plugin expected to be configured with Webpack version ${webpackVersions.webpackVersion}, ` +\n `but the configuration specifies version ${bundleSubstageProperties.webpackVersion}. ` +\n 'Are multiple versions of the Webpack plugin present?'\n )\n );\n }\n\n if (bundleSubstageProperties.webpackDevServerVersion !== webpackVersions.webpackDevServerVersion) {\n logger.emitError(\n new Error(\n `The Webpack plugin expected to be configured with webpack-dev-server version ${webpackVersions.webpackDevServerVersion}, ` +\n `but the configuration specifies version ${bundleSubstageProperties.webpackDevServerVersion}. ` +\n 'Are multiple versions of the Webpack plugin present?'\n )\n );\n }\n\n logger.terminal.writeLine(`Using Webpack version ${webpack.version}`);\n\n let compiler: WebpackCompiler | WebpackMultiCompiler;\n if (Array.isArray(webpackConfiguration)) {\n if (webpackConfiguration.length === 0) {\n logger.terminal.writeLine('The webpack configuration received is an empty array - nothing to do.');\n return;\n } else {\n compiler = webpack(webpackConfiguration); /* (webpack.Compilation[]) => MultiCompiler */\n }\n } else {\n compiler = webpack(webpackConfiguration); /* (webpack.Compilation) => Compiler */\n }\n\n if (buildProperties.serveMode) {\n const defaultDevServerOptions: TWebpackDevServer.Configuration = {\n host: 'localhost',\n devMiddleware: {\n publicPath: '/',\n stats: {\n cached: false,\n cachedAssets: false,\n colors: supportsColor\n }\n },\n client: {\n logging: 'info'\n },\n port: 8080\n };\n\n let options: TWebpackDevServer.Configuration;\n if (Array.isArray(webpackConfiguration)) {\n const devServerOptions: TWebpackDevServer.Configuration[] = webpackConfiguration\n .map((configuration) => configuration.devServer)\n .filter((devServer): devServer is TWebpackDevServer.Configuration => !!devServer);\n if (devServerOptions.length > 1) {\n logger.emitWarning(\n new Error(`Detected multiple webpack devServer configurations, using the first one.`)\n );\n }\n\n if (devServerOptions.length > 0) {\n options = { ...defaultDevServerOptions, ...devServerOptions[0] };\n } else {\n options = defaultDevServerOptions;\n }\n } else {\n options = { ...defaultDevServerOptions, ...webpackConfiguration.devServer };\n }\n\n // Register a plugin to callback after webpack is done with the first compilation\n // so we can move on to post-build\n let firstCompilationDoneCallback: (() => void) | undefined;\n const originalBeforeCallback: typeof options.onBeforeSetupMiddleware | undefined =\n options.onBeforeSetupMiddleware;\n options.onBeforeSetupMiddleware = (server: TWebpackDevServer) => {\n compiler.hooks.done.tap('heft-webpack-plugin', () => {\n if (firstCompilationDoneCallback) {\n firstCompilationDoneCallback();\n firstCompilationDoneCallback = undefined;\n }\n });\n\n if (originalBeforeCallback) {\n return originalBeforeCallback(server);\n }\n };\n\n // The webpack-dev-server package has a design flaw, where merely loading its package will set the\n // WEBPACK_DEV_SERVER environment variable -- even if no APIs are accessed. This environment variable\n // causes incorrect behavior if Heft is not running in serve mode. Thus, we need to be careful to call require()\n // only if Heft is in serve mode.\n const WebpackDevServer: typeof TWebpackDevServer = require(WEBPACK_DEV_SERVER_PACKAGE_NAME);\n // TODO: the WebpackDevServer accepts a third parameter for a logger. We should make\n // use of that to make logging cleaner\n const webpackDevServer: TWebpackDevServer = new WebpackDevServer(compiler, options);\n await new Promise<void>((resolve: () => void, reject: (error: Error) => void) => {\n firstCompilationDoneCallback = resolve;\n\n webpackDevServer.listen(options.port!, options.host!, (error: Error | undefined) => {\n if (error) {\n reject(error);\n }\n });\n });\n } else {\n if (process.env[WEBPACK_DEV_SERVER_ENV_VAR_NAME]) {\n logger.emitWarning(\n new Error(\n `The \"${WEBPACK_DEV_SERVER_ENV_VAR_NAME}\" environment variable is set, ` +\n 'which will cause problems when webpack is not running in serve mode. ' +\n `(Did a dependency inadvertently load the \"${WEBPACK_DEV_SERVER_PACKAGE_NAME}\" package?)`\n )\n );\n }\n\n let stats: WebpackStats | WebpackCompilation.MultiStats | undefined;\n if (buildProperties.watchMode) {\n try {\n stats = await LegacyAdapters.convertCallbackToPromise(\n (compiler as WebpackCompiler).watch.bind(compiler),\n {}\n );\n } catch (e) {\n logger.emitError(e as Error);\n }\n } else {\n try {\n stats = await LegacyAdapters.convertCallbackToPromise(\n (compiler as WebpackCompiler).run.bind(compiler)\n );\n } catch (e) {\n logger.emitError(e as Error);\n }\n }\n\n if (stats) {\n // eslint-disable-next-line require-atomic-updates\n (buildProperties as IWebpackBuildStageProperties).webpackStats = stats;\n\n this._emitErrors(logger, stats);\n }\n }\n }\n\n private _emitErrors(logger: ScopedLogger, stats: WebpackStats | WebpackCompilation.MultiStats): void {\n if (stats.hasErrors() || stats.hasWarnings()) {\n const serializedStats: WebpackStats.ToJsonOutput = stats.toJson('errors-warnings');\n\n for (const warning of serializedStats.warnings as (string | Error)[]) {\n logger.emitWarning(warning instanceof Error ? warning : new Error(warning));\n }\n\n for (const error of serializedStats.errors as (string | Error)[]) {\n logger.emitError(error instanceof Error ? error : new Error(error));\n }\n }\n }\n}\n"]}
|
package/lib/shared.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import type { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server';
|
|
2
1
|
import type * as webpack from 'webpack';
|
|
2
|
+
declare module 'webpack' {
|
|
3
|
+
type MultiStats = webpack.compilation.MultiStats;
|
|
4
|
+
type StatsOptions = unknown;
|
|
5
|
+
type StatsCompilation = webpack.compilation.Compilation;
|
|
6
|
+
interface Compiler {
|
|
7
|
+
watching?: unknown;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
import type { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server';
|
|
3
11
|
import type { IBuildStageProperties, IBundleSubstageProperties } from '@rushstack/heft';
|
|
4
12
|
/**
|
|
5
13
|
* @public
|
package/lib/shared.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AAExC,OAAO,QAAQ,SAAS,CAAC;IACvB,KAAY,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;IACxD,KAAY,YAAY,GAAG,OAAO,CAAC;IACnC,KAAY,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;IAG/D,UAAiB,QAAQ;QACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB;CACF;AACD,OAAO,KAAK,EAAE,aAAa,IAAI,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,kCAAmC,SAAQ,OAAO,CAAC,aAAa;IAC/E,SAAS,CAAC,EAAE,6BAA6B,CAAC;CAC3C;AAED;;GAEG;AACH,oBAAY,qBAAqB,GAC7B,kCAAkC,GAClC,kCAAkC,EAAE,GACpC,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,yBAAyB;IACjF;;;;;;;;;OASG;IAGH,oBAAoB,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC;CAC/E;AAED;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;CAC/D"}
|
package/lib/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type * as webpack from 'webpack';\n// Compensate for webpack-dev-server referencing constructs from webpack 5\ndeclare module 'webpack' {\n export type MultiStats = webpack.compilation.MultiStats;\n export type StatsOptions = unknown;\n export type StatsCompilation = webpack.compilation.Compilation;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n export interface Compiler {\n watching?: unknown;\n }\n}\nimport type { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server';\nimport type { IBuildStageProperties, IBundleSubstageProperties } from '@rushstack/heft';\n\n/**\n * @public\n */\nexport interface IWebpackConfigurationWithDevServer extends webpack.Configuration {\n devServer?: WebpackDevServerConfiguration;\n}\n\n/**\n * @public\n */\nexport type IWebpackConfiguration =\n | IWebpackConfigurationWithDevServer\n | IWebpackConfigurationWithDevServer[]\n | undefined;\n\n/**\n * @public\n */\nexport interface IWebpackBundleSubstageProperties extends IBundleSubstageProperties {\n /**\n * The configuration used by the Webpack plugin. This must be populated\n * for Webpack to run. If webpackConfigFilePath is specified,\n * this will be populated automatically with the exports of the\n * config file referenced in that property.\n *\n * @remarks\n * Tapable event handlers can return `null` instead of `undefined` to suppress\n * other handlers from creating a configuration object.\n */\n // We are inheriting this problem from Tapable's API\n // eslint-disable-next-line @rushstack/no-new-null\n webpackConfiguration?: webpack.Configuration | webpack.Configuration[] | null;\n}\n\n/**\n * @public\n */\nexport interface IWebpackBuildStageProperties extends IBuildStageProperties {\n webpackStats?: webpack.Stats | webpack.compilation.MultiStats;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/heft-webpack4-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "Heft plugin for Webpack 4",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,27 +14,22 @@
|
|
|
14
14
|
"peerDependenciesMeta": {
|
|
15
15
|
"@types/webpack": {
|
|
16
16
|
"optional": true
|
|
17
|
-
},
|
|
18
|
-
"@types/webpack-dev-server": {
|
|
19
|
-
"optional": true
|
|
20
17
|
}
|
|
21
18
|
},
|
|
22
19
|
"peerDependencies": {
|
|
23
|
-
"@rushstack/heft": "^0.46.
|
|
20
|
+
"@rushstack/heft": "^0.46.6",
|
|
24
21
|
"@types/webpack": "^4",
|
|
25
|
-
"@types/webpack-dev-server": "^3",
|
|
26
22
|
"webpack": "~4.44.2"
|
|
27
23
|
},
|
|
28
24
|
"dependencies": {
|
|
29
25
|
"@rushstack/node-core-library": "3.49.0",
|
|
30
|
-
"webpack-dev-server": "~
|
|
26
|
+
"webpack-dev-server": "~4.9.3"
|
|
31
27
|
},
|
|
32
28
|
"devDependencies": {
|
|
33
29
|
"@rushstack/eslint-config": "2.6.2",
|
|
34
|
-
"@rushstack/heft-node-rig": "1.9.
|
|
35
|
-
"@rushstack/heft": "0.46.
|
|
30
|
+
"@rushstack/heft-node-rig": "1.9.22",
|
|
31
|
+
"@rushstack/heft": "0.46.6",
|
|
36
32
|
"@types/node": "12.20.24",
|
|
37
|
-
"@types/webpack-dev-server": "3.11.3",
|
|
38
33
|
"@types/webpack": "4.41.32",
|
|
39
34
|
"webpack": "~4.44.2"
|
|
40
35
|
},
|