How can I use gulp to replace a string in a file?

后端 未结 4 1463
执笔经年
执笔经年 2021-01-01 10:40

I am using gulp to uglify and make ready my javascript files for production. What I have is this code:

var concat = require(\'gulp-concat\');
var del = requi         


        
相关标签:
4条回答
  • 2021-01-01 10:50

    I think that the most correct solution is to use the gulp-preprocess module. It will perform the actions you need, depending on the variable PRODUCTION, defined or not defined during the build.

    Source code:

    /* @ifndef PRODUCTION */
    dataServer: "http://localhost:3048",
    /* @endif */
    /* @ifdef PRODUCTION **
    dataServer: "http://example.com",
    /* @endif */
    

    Gulpfile:

    let preprocess = require('gulp-preprocess');
    const preprocOpts = {
      PRODUCTION: true
    };
    
    gulp.task('scripts', ['clean-js'], function () {
      return gulp.src(js.src)
        .pipe(preprocess({ context: preprocOpts }))
        .pipe(uglify())
        .pipe(concat('js.min.js'))
        .pipe(gulp.dest('content/bundles/'));
    }
    

    This is the best solution because it allows you to control the changes that are made during the build phase.

    0 讨论(0)
  • 2021-01-01 10:57

    Gulp streams input, does all transformations, and then streams output. Saving temporary files in between is AFAIK non-idiomatic when using Gulp.

    Instead, what you're looking for, is a streaming-way of replacing content. It would be moderately easy to write something yourself, or you could use an existing plugin. For me, gulp-replace has worked quite well.

    If you want to do the replacement in all files it's easy to change your task like this:

    var replace = require('gulp-replace');
    
    gulp.task('scripts', ['clean-js'], function () {
        return gulp.src(js.src)
          .pipe(replace(/http:\/\/localhost:\d+/g, 'http://example.com'))
          .pipe(uglify())
          .pipe(concat('js.min.js'))
          .pipe(gulp.dest('content/bundles/'))
          .pipe(gzip(gzip_options))
          .pipe(gulp.dest('content/bundles/'));
    });
    

    You could also do gulp.src just on the files you expect the pattern to be in, and stream them seperately through gulp-replace, merging it with a gulp.src stream of all the other files afterwards.

    0 讨论(0)
  • 2021-01-01 11:12

    You may also use module gulp-string-replace which manages with regex, strings or even functions.

    Example:

    Regex:

    var replace = require('gulp-string-replace');
    
    gulp.task('replace_1', function() {
      gulp.src(["./config.js"]) // Every file allown. 
        .pipe(replace(new RegExp('@env@', 'g'), 'production'))
        .pipe(gulp.dest('./build/config.js'))
    });
    

    String:

    gulp.task('replace_1', function() {
      gulp.src(["./config.js"]) // Every file allown. 
        .pipe(replace('environment', 'production'))
        .pipe(gulp.dest('./build/config.js'))
    });
    

    Function:

    gulp.task('replace_1', function() {
      gulp.src(["./config.js"]) // Every file allown. 
        .pipe(replace('environment', function () {
           return 'production';
        }))
        .pipe(gulp.dest('./build/config.js'))
    });
    
    0 讨论(0)
  • 2021-01-01 11:12

    There I have a versioning specific example for your reference. let say you have version.ts file and it contains the version code inside it. You now can do as the follows:

    gulp.task ('version_up', function () {
        gulp.src (["./version.ts"])
            .pipe (replace (/(\d+)\.(\d+)(?:\.(\d+))?(?:\-(\w+))?/, process.env.VERSION))
            .pipe (gulp.dest ('./'))
    });
    

    the above regex works for many situation on any conventional version formats.

    0 讨论(0)
提交回复
热议问题