| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const { CachedInputFileSystem } = require("enhanced-resolve");
- const fs = require("graceful-fs");
- const createConsoleLogger = require("../logging/createConsoleLogger");
- const NodeWatchFileSystem = require("./NodeWatchFileSystem");
- const nodeConsole = require("./nodeConsole");
- /**
- * @import {
- * InfrastructureLogging
- * } from "../../declarations/WebpackOptions"
- */
- /** @import Compiler from "../Compiler" */
- /** @import { InputFileSystem } from "../util/fs" */
- /**
- * Defines the node environment plugin options type used by this module.
- * @typedef {object} NodeEnvironmentPluginOptions
- * @property {InfrastructureLogging} infrastructureLogging infrastructure logging options
- */
- const PLUGIN_NAME = "NodeEnvironmentPlugin";
- class NodeEnvironmentPlugin {
- /**
- * Creates an instance of NodeEnvironmentPlugin.
- * @param {NodeEnvironmentPluginOptions} options options
- */
- constructor(options) {
- /** @type {NodeEnvironmentPluginOptions} */
- this.options = options;
- }
- /**
- * Applies the plugin by registering its hooks on the compiler.
- * @param {Compiler} compiler the compiler instance
- * @returns {void}
- */
- apply(compiler) {
- const { infrastructureLogging } = this.options;
- compiler.infrastructureLogger = createConsoleLogger({
- level: infrastructureLogging.level || "info",
- debug: infrastructureLogging.debug || false,
- console:
- infrastructureLogging.console ||
- nodeConsole({
- colors: infrastructureLogging.colors,
- appendOnly: infrastructureLogging.appendOnly,
- stream:
- /** @type {NodeJS.WritableStream} */
- (infrastructureLogging.stream),
- compiler
- })
- });
- // @ts-expect-error need to fix on enhanced-resolve side
- compiler.inputFileSystem = new CachedInputFileSystem(fs, 60000);
- const inputFileSystem =
- /** @type {InputFileSystem} */
- (compiler.inputFileSystem);
- compiler.outputFileSystem = fs;
- compiler.intermediateFileSystem = fs;
- compiler.watchFileSystem = new NodeWatchFileSystem(inputFileSystem);
- // Symmetric to the beforeRun purge below: the stat/readdir/readFile caches
- // would otherwise outlive `close()` for as long as the compiler is held.
- compiler.hooks.shutdown.tap(PLUGIN_NAME, () => {
- if (
- compiler.inputFileSystem === inputFileSystem &&
- inputFileSystem.purge
- ) {
- inputFileSystem.purge();
- }
- });
- compiler.hooks.beforeRun.tap(PLUGIN_NAME, (compiler) => {
- if (
- compiler.inputFileSystem === inputFileSystem &&
- inputFileSystem.purge
- ) {
- compiler.fsStartTime = Date.now();
- inputFileSystem.purge();
- }
- });
- }
- }
- module.exports = NodeEnvironmentPlugin;
|