Gulp:如何更改文件的修改时间

时间:2015-02-04 16:18:20

标签: node.js gulp

我有下面的gulp任务和每次运行此任务(在browsersync之前)我想要更改一个文件的最后修改时间(该文件没有任何变化,我只需要更改上次修改的时间 - 替代shell& #34;触摸"命令)。有人可以告诉我,最简单的方法是什么?谢谢!

gulp.task('sass', function() {

    return sass(pkg.sass.dir, {sourcemap: true, precision: 10}) 
        .on('error', function (err) { 
            onError(err);
        })
        .pipe(autoprefixer({
            browsers: ['last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'],
            cascade: true
        }))
        .pipe(gulp.dest(pkg.css.dir))
        .pipe(browsersync.reload({stream:true}));
});

6 个答案:

答案 0 :(得分:8)

使用核心fs模块的fs.utimes函数,该函数是与Unix touch命令类似的节点。您传递了路径,如果您将new Date()作为mtime参数传递,则可以执行此操作。

答案 1 :(得分:1)

gulp-touch-cmdgulp-touch在Gulp 4上似乎不起作用,因此我编写了这个有效的小管道函数。 (npm add through2

// example
.pipe( through2.obj( function( file, enc, cb ) {
    let date = new Date();
    file.stat.atime = date;
    file.stat.mtime = date;
    cb( null, file );
}) )
.pipe( gulp.dest( '.' ) )

答案 2 :(得分:1)

如果我们只需要将日期设置为“现在”,则gulp-touch-fd起作用,但是如果我们需要将修改时间设置为更具体的值(例如touch -ttouch -r)则不会

为此,我们可以使用gulp-touch-custom

const gulp = require('gulp');
const touch = require('gulp-touch-custom');
const through = require('through2');
const Vinyl = require('vinyl');

function exampleproc() {
  return through.obj(function (file, encoding, cb) {
    // example: push a new output file that is timestamped to match its input
    this.push(new Vinyl({
      path: `${file.relative}.out`,
      contents: file.contents.reverse(),
      touch: file.stat.mtime, // Specify an optional Date to use here (copy from input file)
    }));
    // example: Set an explicit date
    file.touch = new Date('2000-01-01');
    cb(null, file);
  });
}

gulp.task('example', function () {
  return gulp.src('./**/*.in')
    .pipe(exampleproc())
    .pipe(gulp.dest('./dest'))
    .pipe(touch());
});

答案 3 :(得分:0)

只需使用gulp-touch-cmd

即可

更改使用gulp

复制的文件的文件访问和修改时间
npm install --save-dev gulp-touch-cmd

var gulp = require('gulp');
var touch = require('gulp-touch-cmd');

gulp.task('default', function() {
  gulp
    .src('./src/**/*')
    .pipe(gulp.dest('./dest'))
    .pipe(touch());
});

答案 4 :(得分:0)

Gulp插件gulp-touch-fd解决了gulp-touch的Gulp 4兼容性问题

npm install --save-dev gulp-touch-fd@funkedigital/gulp-touch-fd

示例:

const {src, dest} = require('gulp');
const touch = require('gulp-touch-fd');

function copyAndTouch() {
  return src('./src/**/*')
    .pipe(dest('./dest'))
    .pipe(touch());
};

exports.copyAndTouch = copyAndTouch

答案 5 :(得分:0)

fs.writeFileSync('sporks','','utf8','a')