我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 日记
  • 22
  • 07
fangdown
2022-07-06
目录

webpack自定义文案插件plugin简单入门

# webpack自定义文案插件plugin简单入门

# 目标

在构建完成之后,输出带有颜色的自定义文案

# 极简插件示例

class HelloWorldPlugin {
  apply(compiler) {
    compiler.hooks.done.tap('Hello World Plugin', (
      stats /* 在 hook 被触及时,会将 stats 作为参数传入。*/
    ) => {
      console.log('Hello World!');
    });
  }
}
module.exports = HelloWorldPlugin;

# 了解插件触发时机-5次

  • entryOption : 在 webpack 选项中的 entry 配置项 处理过之后,执行插件。
  • afterPlugins : 设置完初始插件之后,执行插件。
  • compilation : 编译创建之后,生成文件之前,执行插件。同步方式。
  • emit : 生成资源到 output 目录之前。
  • done : 编译完成。

# 触发方式

  • tap :以同步方式触发钩子;
  • tapAsync :以异步方式触发钩子;
  • tapPromise :以异步方式触发钩子,返回 Promise;
const chalk = require("chalk");
const PLGIN_NAME = "DevMessagePlugin";
class DevMessagePlugin {
  apply(compiler) {
    compiler.hooks.entryOption.tap(
      PLGIN_NAME,
      (compilation, callback) => {
        console.info(chalk.yellow("entryOption 阶段"))
      }
    );
    compiler.hooks.afterPlugins.tap(
      PLGIN_NAME,
      (compilation, callback) => {
        console.info(chalk.yellow("afterPlugins 阶段"))
      }
    );
    compiler.hooks.compilation.tap(
      PLGIN_NAME,
      (compilation, callback) => {
        console.info(chalk.yellow("compilation 阶段"))
      }
    );
    compiler.hooks.emit.tap(
      PLGIN_NAME,
      (compilation, callback) => {
        console.info(chalk.yellow("emit 阶段"))
      }
    );
    compiler.hooks.done.tap(PLGIN_NAME, () => {
      setTimeout(() => {
        console.info(
         chalk.green(`done 阶段,输出开发环境的彩蛋,chalk5版本不用用cjs了😭,百度地址 = ${chalk.yellow('http://www.baidu.com')}`)
        );
      }, 10);
    });
  }
}

module.exports = DevMessagePlugin;

  • webpack 输出信息

entryOption 阶段
afterPlugins 阶段
(node:99715) [DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE] DeprecationWarning: 'onAfterSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option.
(Use `node --trace-deprecation ...` to show where the warning was created)
(node:99715) [DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE] DeprecationWarning: 'onBeforeSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option.
compilation 阶段
compilation 阶段
Starting the development server...

emit 阶段
Compiled successfully!

You can now view app-micro-webpack-plugin in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://10.94.100.80:3000

Note that the development build is not optimized.
To create a production build, use yarn build.

webpack compiled successfully
done 阶段,输出开发环境的彩蛋,chalk5版本不用用cjs了😭,百度地址 = http://www.baidu.com

# 显示webpack 构建信息

修改node_modules/react-dev-utils/clearConsole.js 文件:

'use strict';

function clearConsole() {
  if (process.env.REACT_APP_NO_CLEAR_CONSOLE) {
    return;
  }
  process.stdout.write(
    process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H'
  );
}

module.exports = clearConsole;

// package.json
{
  "scripts": {
    "start": "REACT_APP_NO_CLEAR_CONSOLE=true react-app-rewired start",
  }
}
#webpack
上次更新: 2022/07/06, 17:09:04
最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式