我有一个包含多个文件的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完成时才可用。
有没有人知道一个变通方法来完成我想要完成的事情?
发布于 2020-09-24 22:23:41
我发现的唯一解决方法是组合fs.readFileSync和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);https://stackoverflow.com/questions/63958557
复制相似问题