0

main.jsすべてのスクリプトを 1 つのファイルにコンパイルして、インデックス ファイルにリンクしようとしています。問題は、すべてのスクリプト ファイルが連結されてからファイルに追加さmain.jsれることです。そのため、3 回保存すると、基本的にすべてのスクリプトの 3 つのコピーが連結されてmain.jsファイルに入れられます。

main.js保存するたびにファイルを削除してから連結を実行するか、コンテンツを追加する前にファイルをクリーンアップしたいと思います。モジュールを使用してファイルを削除しようとすると、delこのアクションを強制しないと作業ディレクトリからファイルを削除できないというエラーが表示されます。可能であれば、これを強制することは避けたいと思います。

これを行うにはもっとエレガントな方法が必要だと思います..

これが私のスクリプトタスクです:

// Concat and compile our JS into a minified dist file
gulp.task('scripts', function() {
  return gulp.src('../app/public/assets/scripts/**/*.js')
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(concat('main.js'))
    //.pipe(del(['../app/public/assets/scripts/main.js'])) <-- Doesn't work without forcing
    .pipe(gulp.dest('../app/public/assets/scripts'))
    .pipe(gulpif(flags.build, gulp.dest('../app/dist/assets/scripts')))
    .pipe(rename({ suffix: '.min' }))
    .pipe(uglify())
    .pipe(gulpif(flags.build, gulp.dest('../app/dist/assets/scripts')))
    .pipe(notify({ message: 'Finished compiling scripts' }));
});
4

1 に答える 1

0

私は通常、次のようなことをします(非常に単純化されています:)):

var PARAMS = {
    destPath: 'build',
    js: [
        'src/js/test1.js',
        'src/js/test2.js',
        // ecc...
    ],
    // other
};

var TARGETS = {
    dest: 'main.js', // dest file

    extra: [
        // This files are inclued only in .bundle.min.js version
        // extra file here
    ],

    js: [
        'src/js/test1.js',
        'src/js/test2.js',
        // ecc...
    ]
};

gulp.task('connect', function() {
    return connect.server({
        livereload: true,
        host: '0.0.0.0',
        port: 8000
    });
});

gulp.task('reload', ['build'], function () {
    return gulp.src(['sandbox/**/*.html'])
        .pipe(connect.reload());
});

gulp.task('watch', ['connect', 'build'], function () {
    var src = [];
    // other
    src = src.concat(PARAMS.js);
    return gulp.watch(src, ['reload']);
});

gulp.task('clean', function (done) {
    return del(['build'], done);
});

gulp.task('build', ['clean'], function () {
    return gulp.src(target.js);
        .pipe(concat(target.dest))
        .pipe(gulp.dest(PARAMS.destPath))  // Plain

        .pipe(uglify())
        .pipe(rename({ extname: '.min.js' }))  // Minified
        .pipe(gulp.dest(PARAMS.destPath))

        .pipe(addsrc(target.extra))
        .pipe(order(target.extra))
        .pipe(concat(target.dest))
        .pipe(rename({ extname: '.bundled.min.js' }))  // Bundled
        .pipe(gulp.dest(PARAMS.destPath));
});

gulp.task('default', ['build']);
于 2015-06-06T21:40:27.633 に答える