GULP - 运行 第一次有条件地执行任务,然后一直在监视(完成不是函数)
GULP - Running task conditionally on the first time and then always on watch (done is not a function)
我在 RealFaviconGenerator 中有这个任务,它基于一个文件创建所有的图标:
function generateFavicon(done) {
return $.realFavicon.generateFavicon({
masterPicture: 'app/favicon.svg',
dest: 'app/favicon/',
iconsPath: '/favicon',
design: {
ios: {
pictureAspect: 'backgroundAndMargin',
backgroundColor: '#ffffff',
margin: '14%',
assets: {
ios6AndPriorIcons: false,
ios7AndLaterIcons: false,
precomposedIcons: false,
declareOnlyDefaultIcon: true
}
},
desktopBrowser: {},
windows: {
pictureAspect: 'noChange',
backgroundColor: '#ffffff',
onConflict: 'override',
assets: {
windows80Ie10Tile: false,
windows10Ie11EdgeTiles: {
small: false,
medium: true,
big: false,
rectangle: false
}
}
},
androidChrome: {
pictureAspect: 'noChange',
themeColor: '#ffffff',
manifest: {
display: 'standalone',
orientation: 'notSet',
onConflict: 'override',
declared: true
},
assets: {
legacyIcon: false,
lowResolutionIcons: false
}
},
safariPinnedTab: {
pictureAspect: 'blackAndWhite',
threshold: 57.03125,
themeColor: '#004c96'
}
},
settings: {
scalingAlgorithm: 'Mitchell',
errorOnImageTooSmall: false,
readmeFile: false,
htmlCodeFile: false,
usePathAsIs: false
},
markupFile: FAVICON_DATA_FILE
}, function () {
done();
});
}
我想在 运行 宁 gulp serve
时 运行 此任务,仅当创建 generateFavicon
任务的 favicon 文件夹丢失时。
所以我这样做了:
serve = series(clean, favicon = (done) => {
fs.existsSync('app/favicon/') ? done() : generateFavicon();
}, parallel(views, styles, scripts, modernizr, fonts), startAppServer);
通过这样做,任务创建了我需要的所有资产,但系列不会继续:
[09:37:24] Starting 'serve'...
[09:37:24] Starting 'clean'...
[09:37:24] Finished 'clean' after 7.27 ms
[09:37:24] Starting 'favicon'...
[09:37:59] 'favicon' errored after 35 s
[09:37:59] TypeError: done is not a function
运行 gulp serve
现在目录已经存在,一切都会顺利:
[09:43:51] Starting 'serve'...
[09:43:51] Starting 'clean'...
[09:43:51] Finished 'clean' after 6.99 ms
[09:43:51] Starting 'favicon'...
[09:43:51] Finished 'favicon' after 293 μs
[09:43:51] Starting 'views'...
[09:43:51] Starting 'styles'...
[09:43:51] Starting 'scripts'...
[09:43:51] Starting 'modernizr'...
[09:43:51] Starting 'fonts'...
[09:43:58] Finished 'fonts' after 6.76 s
[09:43:59] Finished 'modernizr' after 7.77 s
[09:44:11] Finished 'scripts' after 19 s
[09:44:11] Finished 'views' after 19 s
[09:44:11] Finished 'styles' after 20 s
[09:44:11] Starting 'startAppServer'...
[Browsersync] Access URLs:
---------------------------------------
Local: http://localhost:9000
External: http://192.168.13.117:9000
---------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
---------------------------------------
[Browsersync] Serving files from: .tmp
[Browsersync] Serving files from: app
虽然在另一端,我也有一个手表,从什么时候 favicon 文件会改变(它会)并且它 运行 没问题:
watch('app/favicon.svg', generateFavicon);
[09:47:57] Starting 'generateFavicon'...
[09:48:28] Finished 'generateFavicon' after 31 s
我可以如何处理错误 "done is not a function"?d
您需要在服务任务中将 done 传递给您的 generateFavicon:
serve = series(clean, favicon = (done) => {
fs.existsSync('app/favicon/') ? done() : generateFavicon(done);
}, parallel(views, styles, scripts, modernizr, fonts), startAppServer);
我在 RealFaviconGenerator 中有这个任务,它基于一个文件创建所有的图标:
function generateFavicon(done) {
return $.realFavicon.generateFavicon({
masterPicture: 'app/favicon.svg',
dest: 'app/favicon/',
iconsPath: '/favicon',
design: {
ios: {
pictureAspect: 'backgroundAndMargin',
backgroundColor: '#ffffff',
margin: '14%',
assets: {
ios6AndPriorIcons: false,
ios7AndLaterIcons: false,
precomposedIcons: false,
declareOnlyDefaultIcon: true
}
},
desktopBrowser: {},
windows: {
pictureAspect: 'noChange',
backgroundColor: '#ffffff',
onConflict: 'override',
assets: {
windows80Ie10Tile: false,
windows10Ie11EdgeTiles: {
small: false,
medium: true,
big: false,
rectangle: false
}
}
},
androidChrome: {
pictureAspect: 'noChange',
themeColor: '#ffffff',
manifest: {
display: 'standalone',
orientation: 'notSet',
onConflict: 'override',
declared: true
},
assets: {
legacyIcon: false,
lowResolutionIcons: false
}
},
safariPinnedTab: {
pictureAspect: 'blackAndWhite',
threshold: 57.03125,
themeColor: '#004c96'
}
},
settings: {
scalingAlgorithm: 'Mitchell',
errorOnImageTooSmall: false,
readmeFile: false,
htmlCodeFile: false,
usePathAsIs: false
},
markupFile: FAVICON_DATA_FILE
}, function () {
done();
});
}
我想在 运行 宁 gulp serve
时 运行 此任务,仅当创建 generateFavicon
任务的 favicon 文件夹丢失时。
所以我这样做了:
serve = series(clean, favicon = (done) => {
fs.existsSync('app/favicon/') ? done() : generateFavicon();
}, parallel(views, styles, scripts, modernizr, fonts), startAppServer);
通过这样做,任务创建了我需要的所有资产,但系列不会继续:
[09:37:24] Starting 'serve'...
[09:37:24] Starting 'clean'...
[09:37:24] Finished 'clean' after 7.27 ms
[09:37:24] Starting 'favicon'...
[09:37:59] 'favicon' errored after 35 s
[09:37:59] TypeError: done is not a function
运行 gulp serve
现在目录已经存在,一切都会顺利:
[09:43:51] Starting 'serve'...
[09:43:51] Starting 'clean'...
[09:43:51] Finished 'clean' after 6.99 ms
[09:43:51] Starting 'favicon'...
[09:43:51] Finished 'favicon' after 293 μs
[09:43:51] Starting 'views'...
[09:43:51] Starting 'styles'...
[09:43:51] Starting 'scripts'...
[09:43:51] Starting 'modernizr'...
[09:43:51] Starting 'fonts'...
[09:43:58] Finished 'fonts' after 6.76 s
[09:43:59] Finished 'modernizr' after 7.77 s
[09:44:11] Finished 'scripts' after 19 s
[09:44:11] Finished 'views' after 19 s
[09:44:11] Finished 'styles' after 20 s
[09:44:11] Starting 'startAppServer'...
[Browsersync] Access URLs:
---------------------------------------
Local: http://localhost:9000
External: http://192.168.13.117:9000
---------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
---------------------------------------
[Browsersync] Serving files from: .tmp
[Browsersync] Serving files from: app
虽然在另一端,我也有一个手表,从什么时候 favicon 文件会改变(它会)并且它 运行 没问题:
watch('app/favicon.svg', generateFavicon);
[09:47:57] Starting 'generateFavicon'...
[09:48:28] Finished 'generateFavicon' after 31 s
我可以如何处理错误 "done is not a function"?d
您需要在服务任务中将 done 传递给您的 generateFavicon:
serve = series(clean, favicon = (done) => {
fs.existsSync('app/favicon/') ? done() : generateFavicon(done);
}, parallel(views, styles, scripts, modernizr, fonts), startAppServer);