Compile JavaScripts with Gulp and Resolve Dependencies (separate files)

瘦欲@ 提交于 2019-12-06 11:54:34
avcajaraville

How do I get individual JavaScript files as the output?

Check an answer I gave to a similar problem here: Pass random value to gulp pipe template

Using this gulp plugin: https://github.com/adam-lynch/glob-to-vinyl

You can have access to single files.

This is how (assuming the use of this plugin):

function compileScript(file) {
  gulp
    .src('file')
    .pipe(resolveDependencies({
      pattern: /\* @require [\s-]*(.*?\.js)/g,
      log: true
    }))
    .pipe(concat())
    .pipe(uglify())
    .pipe(gulp.dest('dist/'))
  ;
};

gulp.task('build:scripts', function() {
  globToVinyl('src/**/*.js', function(err, files){
    for (var file in files) {
      compileScript(files[file].path);
    }
  });
});
Slava Fomin II

Here's the result of rewriting my task using solution specified by @avcajaraville. It's a complete, tested and working code.

var targetDir = 'web';
var sourceDir = 'assets';

var gulp = require('gulp');
var pathModule = require('path');
var resolveDependencies = require('gulp-resolve-dependencies');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var globToVinyl = require('glob-to-vinyl');

gulp.task('build:scripts', function(callback) {

    var compileScript = function(filePath, destinationDirectory) {

        // Extracting filename from absolute path (required by concat).
        var filename = pathModule.basename(filePath);

        return gulp
            .src(filePath)
            .pipe(resolveDependencies({
                pattern: /\* @require [\s-]*(.*?\.js)/g,
                log: true
            }))
            .pipe(concat(filename))
            .pipe(uglify())
            .pipe(gulp.dest(destinationDirectory))
        ;
    };

    var sourceGlob = pathModule.join(sourceDir, '/scripts/*.js');
    var destinationDirectory = pathModule.join(targetDir, '/js/');

    globToVinyl(sourceGlob, function(errors, files) {
        for (var file in files) {
            compileScript(files[file].path, destinationDirectory);
        }
    });

    callback(null);
});
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!