使用来自其他 npm 包的 gulp 个文件(导入最终会存在的文件)

Use gulp files from other npm packages (import files which will eventually exist)

我有一个 npm 包,其中包含多个文件和多个 gulp 任务定义。

我想要的是在主 gulp 文件中,能够复制这些 gulp 文件(从包中)并执行其中定义的 gulp 任务。

举个例子:

const gulp = require('gulp');
const fs = require('fs');
const path = require('path');

const gulpFolder = path.join(__dirname.replace('gulpfile.js', ''), 'src', 'generated-code', 'gulp'); 

const cleanGulpFiles = (callback) => { ... }

const copyGulpFiles = (callback) => {
    gulp.src(`${nodeModulesFolder}/@primavera/client-app-core/gulp/**/*`)
        .pipe(chmod(666))
        .pipe(gulp.dest(gulpFolder));
    callback();
}

exports.debug = gulp.series(
    cleanGulpFiles, 
    copyGulpFiles,
    require('../src/generated-code/gulp/gulp.debug'));

问题是:当我尝试执行 gulp debug 时,检索到一个错误,指出 require('../src/generated-code/gulp/gulp.debug') 不存在。这是正确的,因为这个文件只有在任务 copyGulpFiles 完成后才可用。

任何人都知道一个解决方法来完成我想要完成的事情?

我发现的唯一解决方法是组合 fs.readFileSync and eval 函数,以便将 gulp 文件内容作为字符串读取,然后在 运行 时间内评估该代码:

const gulp = require('gulp');
const fs = require('fs');
const path = require('path');

const gulpFolder = path.join(__dirname.replace('gulpfile.js', ''), 'src', 'generated-code', 'gulp'); 

const cleanGulpFiles = (callback) => { ... }

const copyGulpFiles = (callback) => {
    gulp.src(`${nodeModulesFolder}/@primavera/client-app-core/gulp/**/*`)
        .pipe(chmod(666))
        .pipe(gulp.dest(gulpFolder));
    callback();
}

const executeGulpFiles = (callback) => {
    const fileContent = fs.readFileSync('../src/generated-code/gulp/gulp.debug');
    const contentEvaluated = eval(fileContent);
    contentEvaluated(callback);
}

exports.debug = gulp.series(
    cleanGulpFiles, 
    copyGulpFiles,
    executeGulpFiles);