一些引入依赖,提示引入方式报错的问题

背景

当我们使用gulp自动化处理文件的时候,难免会遇到需要按照一定条件过滤的需求,这里博主所遇到问题是,通过文件内容中是否包含 某一串字符串 决定过滤当前的文件

比如:

碰到文件中包含注释 * @replace-note 此文件未被引用 ,那么,gulp任务就忽略该文件,继续处理下一个文件。

typescript 复制代码
/**
 * @replace-note 此文件未被引用
 */

庆幸的是,已经有前辈创造了 gulp-filter这种插件,专门用来处理自动化过程当中,碰到需要过滤某些文件时的良药

依赖

  • gulp-filter // 最新版本

引入方式

  1. 之前的版本 require('gulp-filter')的方式

    报错:
    Error [ERR_REQUIRE_ESM]: require() of ES Module xxx/node_modules/gulp-filter/index.js from xxx/gulpfile.js not supported. Instead change the require of index.js in xxx/gulpfile.js to a dynamic import() which is available in all CommonJS modules. at Object.<anonymous> (xxx/gulpfile.js:12:16) at async Promise.all (index 0) { code: 'ERR_REQUIRE_ESM' }

  2. 这里报错提示我们采用动态 import()方式引入,异步获取依赖的内容

typescript 复制代码
import("gulp-filter").then(module => {
 // module.default
});

使用

过滤的方式有很多种gulp-filter可以深度去学习各种各样的用法,可以解决我们所想要的过滤功能;

一些普通的用法,大家看这里有案例

下面这种属于自定义过滤方式,当然也就会五花八门啦,主要是提供一个回调函数,该函数由使用者自己去实现什么情况下,需要过滤掉某些文件

typescript 复制代码
const gulp = require("gulp");
const replace = require("gulp-replace");
const XLSX = require("xlsx");

// 动态引入 gulp-filter
const dynamicImport = () => {
  return new Promise(resolve => {
    import("gulp-filter").then(module => {
      resolve(module.default);
    });
  });
};

// 过滤存在此注释的文件
const filter_file_mark = "* @replace-note 此文件未被引用";

gulp.task("search-replace", async () => {
  const keyMap = getKeywordMap();
  const filter = await dynamicImport();
  let filterRule = filter(function (file) {
    // 过滤存在此注释的文件
    return !file.contents.toString().includes(filter_file_mark);
  });

  return gulp
    .src(["./src/**/*.js", "./src/**/*.jsx"])
    .pipe(filterRule)
    ...其他的一些处理
    .on("end", function () {
      // xxx
    });
});

写在最后

挺感谢前辈们创造的一个又一个的工具,给我们开发中带来了各种各样的便利,大佬们已经提供了各种各样的工具,只不过怎么正确使用,是我们工作中需要思考的事情,合理使用让我们的工作事半功倍。

话不多说,觉得博主帮到了大家,记得点个赞 再走呗,抱拳🙏!!!

相关推荐
志栋智能6 小时前
从关联到因果:智能超自动化如何实现真正的根因分析定界
运维·自动化
2601_962381868 小时前
Python办公联动:Excel数据一键自动生成PPT图表
python·数据分析·自动化·excel·ppt
Wang's Blog8 小时前
Vibe Coding一人即团队系列40: 基于Git历史与自定义Skill的自动化周报生成实践
人工智能·自动化
TomEval10 小时前
【Web UI 自动化】05 - KDT 模式原理与实现
前端·ui·自动化
pt104312 小时前
网络自动化Python课程:Netconf与Restconf及Cisco自动化配置实验
网络·python·自动化
qq_4260039614 小时前
UI自动化元素定位不到解决方案
前端·pycharm·自动化
其实防守也摸鱼15 小时前
智能体推荐:精选 AI Agent 工具与实战指南
运维·开发语言·人工智能·学习·web安全·自动化
楠楠子呀15 小时前
号码状态核验:从数据清洗到合规处理的实现思路
运维·自动化
小周学学学15 小时前
GLPI 项目解读:开源 IT 资产管理与 ITSM 服务台平台
运维·开源·自动化·资产管理
Sayai16 小时前
Elasticsearch 快照备份到 NAS(NFS)实战:SLM 自动化 + 365 天保留策略
elasticsearch·自动化·jenkins