2016-03-31 19 views
13

Tôi muốn thay thế chuỗi số phiên bản cho biết trong tệp javascript (myConstantsFile.js), bằng một chuỗi khác. Vì vậy, ví dụ, số phiên bản của tôi trông như thế này: "01.11.15", được viết như thế này trong myConstantsFile.js với các hằng số khác:Làm thế nào để tăng số phiên bản thông qua nhiệm vụ Gulp?

.constant('productVersion', '1.11.15'); 

Ngay bây giờ, nhiệm vụ của tôi trông như thế này:

gulp.task('increment-version', function(){ 
    gulp.src(['./somedir/myConstantsFile.js']) 
     .pipe(replace(/'productVersion', '(.*)'/g, '99.99.99')) 
     .pipe(gulp.dest('./somedir/')); 
}); 

như bạn thấy, tôi đang sử dụng một hằng số, không chạy incrementation code, mà sẽ trông như thế này:

var numberString = '0.0.1'; 
    var versionParts = numberString.split('.'); 
    var vArray = { 
     vMajor : versionParts[0], 
     vMinor : versionParts[1], 
     vPatch : versionParts[2] 
    } 

    vArray.vPatch = parseFloat(vArray.vPatch) + 1; 
    var periodString = "."; 

    var newVersionNumberString = vArray.vMajor + periodString + 
           vArray.vMinor+ periodString + 
           vArray.vPatch; 

tôi cần:

  1. Cách để chọn số phiên bản hiện tại qua regex qua tệp.
  2. Để biết nơi tôi có thể đặt logic trong khối mã cuối cùng để tăng số lượng và tạo chuỗi mới.
+1

gì về ngụm-vết sưng? https://www.npmjs.com/package/gulp-bump – cl3m

+0

Từ kinh nghiệm trước đây, hãy giữ số bản dựng của bạn trong tệp riêng của nó (trong trường hợp này, thậm chí có thể là JSON). Khi sed thay thế trong một tập tin mã cuối cùng gây ra một vấn đề, nó sẽ được damn gần như không thể tìm ra. – ssube

+0

@ cl3m Có vẻ tốt, tôi đang xem xét chức năng. Vấn đề chính của tôi là lựa chọn cơ bản của dữ liệu thông qua regex để làm việc với và nơi để đặt các vars/chức năng của tôi. Đây là lần đầu tiên tôi làm bất cứ điều gì với gulp, ngoài việc chạy trình duyệt đồng bộ hóa và như vậy. ssube - đó là một ý tưởng hay, nhưng vấn đề là các hằng số góc cần phải rút ra khỏi nó. – VSO

Trả lời

18

Install gulp-bump

npm install gulp-bump --save-dev 

Install yargs

npm install yargs --save-dev 

Yêu cầu nuốt chửng-vết sưng

var bump = require('gulp-bump'); 

Yêu cầu yargs

var args = require('yargs').argv; 

nhiệm vụ vết sưng của bạn

gulp.task('bump', function() { 
    /// <summary> 
    /// It bumps revisions 
    /// Usage: 
    /// 1. gulp bump : bumps the package.json and bower.json to the next minor revision. 
    /// i.e. from 0.1.1 to 0.1.2 
    /// 2. gulp bump --version 1.1.1 : bumps/sets the package.json and bower.json to the 
    /// specified revision. 
    /// 3. gulp bump --type major  : bumps 1.0.0 
    /// gulp bump --type minor  : bumps 0.1.0 
    /// gulp bump --type patch  : bumps 0.0.2 
    /// gulp bump --type prerelease : bumps 0.0.1-2 
    /// </summary> 

    var type = args.type; 
    var version = args.version; 
    var options = {}; 
    if (version) { 
     options.version = version; 
     msg += ' to ' + version; 
    } else { 
     options.type = type; 
     msg += ' for a ' + type; 
    } 


    return gulp 
     .src(['Path to your package.json', 'path to your bower.json']) 
     .pipe(bump(options)) 
     .pipe(gulp.dest('path to your root directory')); 
}); 

VSO Lưu ý: Tôi tin rằng rất nhiều người dân đến chủ đề này sẽ được xem xét một cách chính xác cho câu trả lời ở trên. Đoạn code dưới đây là để chỉnh sửa một số phiên bản được lưu trữ ở đâu đó bên cạnh các tập tin gói NPM/Chòi chơi, chẳng hạn như trong các hằng số góc:

gulp.task('increment-version', function(){ 
    //docString is the file from which you will get your constant string 
    var docString = fs.readFileSync('./someFolder/constants.js', 'utf8'); 

    //The code below gets your semantic v# from docString 
    var versionNumPattern=/'someTextPreceedingVNumber', '(.*)'/; //This is just a regEx with a capture group for version number 
    var vNumRexEx = new RegExp(versionNumPattern); 
    var oldVersionNumber = (vNumRexEx.exec(docString))[1]; //This gets the captured group 

    //...Split the version number string into elements so you can bump the one you want 
    var versionParts = oldVersionNumber.split('.'); 
    var vArray = { 
     vMajor : versionParts[0], 
     vMinor : versionParts[1], 
     vPatch : versionParts[2] 
    }; 

    vArray.vPatch = parseFloat(vArray.vPatch) + 1; 
    var periodString = "."; 

    var newVersionNumber = vArray.vMajor + periodString + 
          vArray.vMinor+ periodString + 
          vArray.vPatch; 

    gulp.src(['./someFolder/constants.js']) 
     .pipe(replace(/'someTextPreceedingVNumber', '(.*)'/g, newVersionNumber)) 
     .pipe(gulp.dest('./someFolder/')); 
}); 

tôi ommitted một số mumbo jumbo mà viết thường xuyên của tôi trong một chuỗi khá, nhưng đó là nắm tay và nó hoạt động.

+1

Tôi đánh giá cao câu trả lời, upvoted, và có lẽ sẽ kết thúc chấp nhận và đặt một câu hỏi khác, nhưng tôi không tìm cách để bump package.json, tôi đang tìm cách thay đổi một chuỗi trong một tệp khác. Có lẽ tôi hiểu lầm những hạn chế của gulp. – VSO

+0

Gulp khá tuyệt vời. Mong đợi bất cứ điều gì. Bạn có thể muốn xem xét điều này: http://stackoverflow.com/a/36335869/4775223 –

+0

Cảm ơn - có cách nào dễ dàng để có được kết quả của regex của tôi -/'productVersion', '(. *)'/G hay không vào một var và sau đó làm việc trên nó? Hay điều đó sẽ trở thành một plugin? – VSO

1

Bắt đầu xem xét gulp từ 5 giờ qua, vì tôi đã có một nhiệm vụ để khắc phục yêu cầu. Vì vậy, là một noob rõ ràng để nuốt tôi ra với mã dưới đây là mà không có biểu thức chính quy. Cảm ơn @VSO@Wilmer Saint để bắt đầu nhanh. Có thể là một thay đổi nhỏ, nhưng điều này đã giúp tôi.

gulp.task('version', function(){ 
    var fs = require('fs'); 
    //docString is the file from which you will get your constant string 
    var docString = fs.readFileSync('app/scripts/version/version.js', 'utf8'); //type of docString i an object here. 

    var versionParts = docString.split('.'); 

    var vArray = { 
     vMajor : versionParts[0], 
     vMinor : versionParts[1], 
     vPatch : versionParts[2] 
    }; 

    vArray.vPatch = parseFloat(vArray.vPatch) + 1; 
    var periodString = "."; 
    var newVersionNumber = vArray.vMajor + periodString + 
          vArray.vMinor+ periodString + 
          vArray.vPatch; 



    require('fs').writeFileSync('app/scripts/version/version.js', newVersionNumber); 
     return gulp.src(['app/scripts/version/version.js']) 
      .pipe(gulp.dest('app/scripts/version/new_version'));//creates version.js file in the directory 
    }); 

hoặc mã trở lại có thể là như dưới đây để ghi đè lên các số trong version.js nộp

return gulp.src(['app/scripts/version/version.js'], 
       {base: './app/scripts/version/version.js'}) 
     .pipe((gulp.dest('./app/scripts/version/version.js'))) 

phiên bản của tôi.js chỉ có mã dưới đây

versionBuild = '1.0.8' 

tôi đã sử dụng dưới đây trong chức năng chính của tôi (tải về tải ứng dụng)

var versionBuild=parseInt(1000*Math.random()); 
var random = function(digs){ 
    var rndn; 
    if(window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1") { 
     rndn = Math.random(); 
     if(digs != undefined && !isNaN(digs)){ 
       rndn = parseInt(Math.pow(10, digs)*rndn) 
       } 
       return rndn; 
    } 
    else { 
     return versionBuild; 
    } 
} 
Các vấn đề liên quan