首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复,ENOENT错误:当gulpfile.js中提到的“字体”任务启动时,没有这样的文件或目录

如何修复,ENOENT错误:当gulpfile.js中提到的“字体”任务启动时,没有这样的文件或目录
EN

Stack Overflow用户
提问于 2016-11-14 22:32:26
回答 1查看 1.5K关注 0票数 0

下面是我拥有的gulpfile.js。Am获取ENOENT错误:当“字体”任务启动时,没有这样的文件或目录,同时运行"gulp“命令。然而,每次构建都是成功的,但并不是每次都是一致的。如何解决这个问题?我已经确保每一项任务都有回报,即使它不起作用。

代码语言:javascript
复制
var gulp = require('gulp'),
    del = require('del'),
    pump = require('pump'),
    flatten = require('gulp-flatten'),
    usemin = require('gulp-usemin'),
    htmlmin = require('gulp-htmlmin'),
    cssmin = require('gulp-clean-css'),
    uglifyjs = require('gulp-uglify'),
    stripdebug = require('gulp-strip-debug'),
    ngannotate = require('gulp-ng-annotate'),
    rev = require('gulp-rev'),
    concat = require('gulp-concat'),
    sourcemaps = require('gulp-sourcemaps'),
    connect = require('gulp-connect');

var ENV = process.env.NODE_ENV || 'dev',
    APP_DIR = 'app',
    BUILD_DIR = 'build',
    SRC_DIR = 'source',
    ZIP_DIR = 'packed';


gulp.task('clean', function () {
    return del(
        [BUILD_DIR + '/**', ZIP_DIR + '/**'],
        { dryRun: false })
        .then(
        // paths => { console.log('Files and folders that would be deleted:\n', paths.join('\n'));}
        );
});


gulp.task('build-qa',['clean','fonts','images','partials','usemin-qa'], function(){});



/* Html processing, minifying and copying to build folder */
gulp.task('partials', function () {
    return gulp.src(['**/*.html','!index.html'], {cwd: APP_DIR})
        .pipe(htmlmin({ collapseWhitespace: true }))
        .pipe(gulp.dest(BUILD_DIR));
});

/* Images copying to build folder */
gulp.task('images', function () {
    return gulp.src('**/*.{jpg,png,gif,svg}')
        .pipe(flatten())
        .pipe(gulp.dest(BUILD_DIR+'/images'));
});

/* Find all font type files in 'fonts' folders and move to fonts build folder with flattened structure */
gulp.task('fonts', function () {
    return gulp.src('**/fonts/*.{ttf,woff,eot,svg}')
        .pipe(flatten())
        .pipe(gulp.dest(BUILD_DIR+'/fonts'));
});

gulp.task('usemin-qa', function () {
    return gulp.src('app/index.html')
        .pipe(usemin({
            // pipelines are named in the HTML, like js_lib and js_app below; html is the src file
            html: [htmlmin({ collapseWhitespace: true, quotes: true, empty: true, spare: true, loose: true })],
            css_lib: [
                cssmin(),
                'concat',
                rev()
            ],
            css:    [
                cssmin(),
                'concat',
                rev()
            ],
            js_lib: [
                ngannotate({remove: false, add: true}),
                uglifyjs(),
                rev()
            ],
            js_app: [
                sourcemaps.init(),
                'concat',
                ngannotate({remove: true, add: true}),
                uglifyjs(),
                rev()
            ]
        }))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest(BUILD_DIR))
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 07:29:18

吞咽中的ENOENT误差几乎总是由某种种族条件引起的。

第一个问题是,您的所有任务都是从源文件夹中获取文件。例如,BUILD_DIR.从项目中的任何地方选择字体文件,包括。您需要在所有任务中排除BUILD_DIR

代码语言:javascript
复制
gulp.task('fonts', function () {
    return gulp.src(['**/fonts/*.{ttf,woff,eot,svg}', 
                     '!'+BUILD_DIR+'/**'])
        .pipe(flatten())
        .pipe(gulp.dest(BUILD_DIR+'/fonts'));
});

下一个问题是这一行:

代码语言:javascript
复制
gulp.task('build-qa',['clean','fonts','images','partials','usemin-qa'], function(){});

这不像你想的那样。所有这些任务都不是按顺序执行的,而是同时执行的。这意味着clean任务正在删除BUILD_DIR中的文件,而其他任务则忙于将文件复制到同一个目录中。

你有两个选择:

(1)在所有其他任务上放置一个依赖项提示。例如,您的fonts任务必须如下所示:

代码语言:javascript
复制
gulp.task('fonts', ['clean'], function () {
    return gulp.src(['**/fonts/*.{ttf,woff,eot,svg}', 
                     '!' + BUILD_DIR + '/**'])
        .pipe(flatten())
        .pipe(gulp.dest(BUILD_DIR+'/fonts'));
});

这确保所有其他任务只在clean任务完成后才运行。

(2)在build-qa任务中使用run-sequence

代码语言:javascript
复制
var runSequence = require('run-sequence');

gulp.task('build-qa', function(cb) {
  runSequence('clean',['fonts','images','partials','usemin-qa'], cb);
});

这首先运行clean任务,然后并行运行所有其他任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40598948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档