我正在从Gulp 3升级到4,我遇到了一个错误:
The following tasks did not complete: build
Did you forget to signal async completion?
Run Code Online (Sandbox Code Playgroud)
我明白它在说什么,但无法理解为什么这段代码会触发它.
错误与否,任务完成(文件连接并写入dest).在没有lazypipe的情况下执行相同的代码不会导致错误,并且删除lazypipe中的串联也可以修复错误.
将整个事物包装在创建流的东西(如合并流)中可以解决问题.我想有关gulp-concat和lazypipe之间的交互的一些事情是阻止正确返回流.
这是(简化)任务:
gulp.task('build', function() {
var dest = 'build';
var buildFiles = lazypipe()
.pipe(plugins.concat, 'cat.js') // Task will complete if I remove this
.pipe(gulp.dest, dest);
// This works
// return gulp.src(src('js/**/*.js'))
// .pipe(plugins.concat('cat.js'))
// .pipe(gulp.dest(dest));
// This doesn't (unless you wrap it in a stream-making function)
return gulp.src(src('js/**/*.js'))
.pipe(buildFiles());
});
Run Code Online (Sandbox Code Playgroud)
任何建议赞赏!
gulp.taskgulpfile.js中定义了几个任务.我想以编程方式启动其中一个.最好是在同一个进程中(没有exec等),因为其背后的原因之一是能够在调试器中运行脚本.
如何才能做到这一点?
它看起来像有东西像gulp.run和gulp.start,但他们在咕嘟咕嘟4弃用.
使用咕嘟咕嘟4和配方分裂我的任务为使用大口集线器的多个文件刚刚从尝试加载任务文件抛出这个错误.任务文件非常简单,只是想测试一切正常.
我在Github上的Undertaker上找到了这个关于get函数的引用,但我真的不明白他们想说的是什么,看起来像gulp-hub应该是在解除它.
其他人遇到这个并知道如何解决它?
Gulp文件
'use strict';
var gulp = require('gulp');
var HubRegistry = require('gulp-hub');
// Load some files into the registry
var hub = new HubRegistry(['gulp/tasks/*.js']); // only one file help.js
// Tell gulp to use the tasks just loaded
gulp.registry(hub);
Run Code Online (Sandbox Code Playgroud)
帮助任务 - /gulp/tasks/help.js
'use strict';
var gulp = require('gulp');
gulp.task('help', []);
Run Code Online (Sandbox Code Playgroud)
错误抛出
$ gulp help
[01:36:37] Loading gulp\tasks\help.js
D:\projects\app\node_modules\undertaker\lib\helpers\validateRegistry.js:36
throw err;
^
AssertionError: Custom registry must have `get` function
at validateRegistry (D:\projects\app\node_modules\undertaker\lib\helpers\validateRegistry.js:28:5)
at Gulp.registry (D:\projects\app\node_modules\undertaker\lib\registry.js:17:3) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Gulp4 API 并编写一个非常基本和简单的任务来开始,并且在拆分 gulp 文件时遇到了一些问题。
基本上,我有两个独立的任务,一个用于缩小 CSS,另一个用于缩小 JS,我试图将其导入 maingulpfile.js并将它们作为默认任务的一部分调用。
下面是一个独立的 gulp 任务的示例,它主要清理缩小的 css 并再次缩小和连接 css:
"use strict";
const { src, dest, series, task } = require( 'gulp' );
const concat = require( 'gulp-concat' );
const prefix = require( 'gulp-autoprefixer' );
const cleanCSS = require( 'gulp-clean-css' );
const rimraf = require( 'gulp-rimraf' );
const baseURL = './src/main/resources/';
const minifiedCssSources = [ baseURL + '**/*min.css' ];
const cssSources = [ baseURL + '**/*.css' ];
module.exports = function() {
const …Run Code Online (Sandbox Code Playgroud) 正如已经迁移到Gulp 4的人可能知道的gulp.series那样 - 如果系列中的任务没有正确地表示完成,则不会继续执行.
我的问题是它处理这种错误的方式 - 它只是控制台中的一条消息(你忘了发信号异步完成吗?) ; gulp仍然以错误代码0退出.这意味着如果你在一个更复杂的构建脚本中运行gulp,那么看起来好像一切都没问题,并且当他们显然没有成功完成gulp任务时.(相反,如果抛出错误gulpUtil.plugin error,则会导致非0错误代码.)
所以我的问题是:你如何从外部发现这样的错误?
还有其他我没想过的可能性吗?
我用来gulp-notify在任务完成时触发通知.如果任务独立运行,则会触发该特定任务的通知.如果任务作为另一个任务的依赖项运行,则会触发所有依赖项的通知.
在gulp @ 3中,我检查是否将任务调用为依赖项gulp.seq,其中包含正在运行的任务数组.假设我有三个任务:default,styles和scripts,后两个设置为第一个的依赖项.运行时gulp styles,gulp.seq将包含[ 'styles' ].运行时gulp(默认任务),gulp.seq将包含[ 'styles', 'scripts', 'default' ].知道了,然后我检查gulp.seq.indexOf("styles") > gulp.seq.indexOf("default"),它告诉我天气是不是styles作为default任务的一部分.
随着gulp @ 4,似乎gulp.seq不再存在.我已经尝试过挖掘文档和源代码而没有运气.似乎gulp.tree({ deep:true })(docs)可能是我正在寻找的,但我没有看到任何有用的东西.
是否有相当于gulp.seqgulp @ 4?
gulp 认为它已经受够了,它在我的项目中消失了。
当前版本
gulp -v
[11:26:35] CLI version 3.9.1
[11:26:35] Local version 4.0.0
Run Code Online (Sandbox Code Playgroud)
如果我运行昨天工作的任务之一,我会收到以下错误:
C:\Program Files\nodejs\node_modules\gulp\bin\gulp.js:129 gulpInst.start.apply(gulpInst, toRun); ^
类型错误:无法在 C:\Program Files\nodejs\node_modules\gulp\bin\gulp.js:129:20 at process._tickCallback (internal/process/next_tick.js:61:11) 处读取未定义的属性“应用” Function.Module.runMain (internal/modules/cjs/loader.js:745:11) at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3) 启动时 (internal/bootstrap/node.js:283:19)
现在我到处都看到这个错误并尝试了很多方法来修复它
也尝试了以下没有成功
cli 版本未正确使用似乎存在一些问题。如果我明确使用我的项目本地 node_modules 文件夹中的 gulp 文件,如下所示:
node ./node_modules/gulp/bin/gulp.js my-task
Run Code Online (Sandbox Code Playgroud)
然后我的任务将运行并正常工作
如果我使用以下命令:
gulp my-task …Run Code Online (Sandbox Code Playgroud) "Error: Invalid glob argument: undefined"当我尝试访问gulp.src从gulp.watch. 这两个:
gulp.task('watch', function() {
gulp.watch('./web/**/*.html')
.on('change', function(file) {
gulp.src(file.path)
.pipe(gulp.dest('./output'));
});
});
Run Code Online (Sandbox Code Playgroud)
和这个语法变体:
gulp.task('watch', function() {
gulp.watch('./web/**/*.html', function(file) {
gulp.src(file.path)
.pipe(gulp.dest('./output'));
});
});
Run Code Online (Sandbox Code Playgroud)
产生相同的结果。
在之前记录 file.pathgulp.src也会输出“未定义”。
重现:
npm install -g gulp@github:gulpjs/gulp#4.0
并创建一个gulpfile.js包含:
const gulp = require('gulp');
接下来是任一示例。
我的理解是,这是应该按照文档访问更改的文件路径的方式,所以我不确定我哪里出了问题?
我不知道为什么gulp.series()不触发回调函数。
我正在尝试使用从用户输入中获取字符串,gulp-prompt并使用调用构建和部署功能gulp.series()。我的任务gulp.series()根本不执行。
gulp.task('test', function(){
const prompt = require('gulp-prompt');
return gulp.src('test.js')
.pipe(prompt.prompt({
type: 'checkbox',
name: 'env',
message: 'which environment do you want to deploy to?',
choices: ['qa','prod']
},function(res){
//console.dir(res.env);
var env = res.env;
console.log(env);
console.log('hi');
gulp.series('clean', 'patternlab:build', 'tag-version', deployWeb.bind(this, env), function(done){
done();
});
}));
});
Run Code Online (Sandbox Code Playgroud) 我从 Gulp 3 更改为 Gulp 4,但我无法让它工作。
当我运行 gulp 并保存 SCSS 或 HTML 文件时,它成功创建了一个新文件。如果我再次保存,什么也不会发生。它只运行那些。
下面是我的gulpfile.js
'use strict';
var gulp = require('gulp');
var sass = require('gulp-sass');
var browserSync = require('browser-sync').create();
sass.compiler = require('node-sass');
gulp.task('sass', function() {
return gulp.src('template/assets/scss/**/*.scss')
.pipe(sass.sync({outputStyle: 'expanded'}).on('error', sass.logError))
.pipe(gulp.dest('template/assets/css/'))
.pipe(browserSync.stream());
});
// Static Server and watching scss/html files
gulp.task('server', gulp.series('sass', function(){
browserSync.init({
server: {
baseDir: "./template"
}
});
gulp.watch("template/assets/scss/**/*.scss", gulp.task('sass'));
gulp.watch("template/assets/scss/**/*.scss", browserSync.reload);
gulp.watch("template/**/*.html", browserSync.reload);
}));
gulp.task('watch', function() {
gulp.watch(['sass']);
});
gulp.task('default', gulp.series(gulp.parallel('sass', 'watch', 'server')))
Run Code Online (Sandbox Code Playgroud) 我正在尝试从 Gulp 版本 3 切换到 Gulp 版本 4,但我经常遇到监视任务的问题,当跟踪的 SCSS 文件更改时,它不会检测到更改。我做了一个 watch 函数的简单例子,因为它更容易调试。
Ubuntu 17.10
Node v8.9.4
Npm 6.9.0
Gulp CLI version: 2.2.0
Gulp Local version: 4.0.2
Run Code Online (Sandbox Code Playgroud)
我尝试完全删除 gulp 和 gulp-cli 并再次安装它,删除 node_modules 文件夹并从头开始创建 package.json 文件,但结果是一样的。“开始‘看’……”就没有别的了。
包.json
{
"name": "starter",
"version": "1.0.0",
"description": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"gulp": "^4.0.2",
"gulp-sass": "^4.0.2"
}
}
Run Code Online (Sandbox Code Playgroud)
gulpfile.js
const {src, dest, watch} = require('gulp');
const sass= require('gulp-sass');
function style() { …Run Code Online (Sandbox Code Playgroud) 有一个超级简单的 gulp 文件,我想在其中依次运行一些基本的 gulp 任务。
我似乎无法在 Gulp v4 中运行它。在 Gulp v3 中有类似的东西,使用run-sequence而不是gulp.series()
const gulp = require("gulp");
const clean = require('gulp-clean');
gulp.task('clean-app', async () => {
return (gulp.src('./dist/app', {read: true, allowEmpty: true})
.pipe(clean()));
});
gulp.task('clean-tests', async () => {
return ( gulp.src('./dist/tests', {read: true, allowEmpty: true})
.pipe(clean()));
});
gulp.task('all-tasks', gulp.series('clean-app', 'clean-tests'));
Run Code Online (Sandbox Code Playgroud)
各个 gulp 任务clean-app并clean-tests单独运行良好。
但是,当我使用时gulp all-tasks出现以下错误
gulp all-tasks
[17:50:51] Using gulpfile ~\IdeaProjects\my-app\gulpfile.js
[17:50:51] Starting 'all-tasks'...
[17:50:51] Starting 'clean-app'...
[17:50:51] Finished 'clean-app' after …Run Code Online (Sandbox Code Playgroud) gulp ×12
gulp-4 ×12
javascript ×4
node.js ×4
gulp-watch ×2
build-tools ×1
error-code ×1
gulp-concat ×1
npm ×1
terminal ×1