[关闭]
@wwanghee 2017-03-28T01:50:04.000000Z 字数 1237 阅读 596

【腾讯项目】Gulp插件系列—venus版本号接入指南


一、背景

前端构建工程的最佳实践就是CDN文件通过HASH发布,最后发布入口文件,这样的发布方式可靠,版本控制方便,便于各个版本的控制。

二、gulpfile.js文件的新旧差异

venus系统的编译虽然是在服务端,但是依赖于本地的gulpfile.js文件,gulpfile的任务流程WONDER重新梳理了一下。如下图所示:

image_1bb5uhekc12s31rukv2a1nmh14lo9.png-154.6kB

和现在的gulpfile.js文件有一定的区别,但是也相对更合理和思路清晰一些。

三、接入指南

1、SVN更新最新的package.json文件,并执行如下命令:

  1. sudo tnpm install

2、新流程的gulpfile.js参考名片的gulpfile.js

gulpfile.js4.2kB

主要是增加了两个Gulp任务,第一个是生成hash文件和mainfest文件的任务

  1. gulp.task('rev', ['webpack'], function () {
  2. console.log('rev task start');
  3. return gulp.src([destPath + '/js/*.js', '!' + destPath + '/js/*.loader.js'])
  4. .pipe(rev())
  5. .pipe(revFormat({
  6. prefix: '.',
  7. suffix: '.min',
  8. lastExt: true
  9. }))
  10. .pipe(uglify())
  11. .pipe(gulp.dest(destPath + '/js/dist'))
  12. .pipe(rev.manifest({
  13. path: 'manifest.json'
  14. }))
  15. .pipe(revDel({ dest: destPath + '/js/dist', force: true }))
  16. .pipe(gulp.dest(destPath + '/js'))
  17. });

第二个是和本地的loader.js进行替换的合并任务

  1. gulp.task('concat', ['rev'], function () {
  2. console.log('concat task start');
  3. var manifest = {};
  4. try {
  5. manifest = JSON.parse(fs.readFileSync(destPath + '/js/manifest.json', 'utf-8').toString());
  6. } catch (e) {
  7. }
  8. return gulp.src([destPath + '/js/*.loader.js'])
  9. .pipe(tap(function (file, utils) {
  10. console.log(manifest);
  11. for (var key in manifest) {
  12. console.log(key);
  13. file.contents = new Buffer(String(file.contents).replace(new RegExp(key), 'dist/' + manifest[key]));
  14. }
  15. }))
  16. .pipe(gulp.dest(destPath + '/js'));
  17. });
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注