使用gulp-iconfont时,字体不是更改而是git修改的

Font is not change but modified git when using gulp-iconfont

本文关键字:git 修改 使用 字体 gulp-iconfont      更新时间:2023-09-26

字体不变

git status被修饰。

当字体改为git recognized

资产路径

$ tree app/assets/
app/assets/
├── fonts
│   ├── app
│   │   └── assets
│   │       └── scss
│   │           └── utility
│   │               └── _iconfonts.scss
│   ├── iconfonts.eot
│   ├── iconfonts.svg
│   ├── iconfonts.ttf
│   ├── iconfonts.woff
│   └── iconfonts.woff2
├── iconfonts
│   ├── a.svg
│   ├── b.svg
└── scss
    ├── _iconfontsTemplate.scss
    └── utility

gulpfile.js

const gulp        = require('gulp');
const svgmin      = require('gulp-svgmin');
const iconfontCss = require('gulp-iconfont-css');
const iconfont    = require('gulp-iconfont');
const src = './app/assets';
gulp.task('iconfonts', ['create-iconfonts'], () => {
  gulp.src(`${src}/fonts/*`)
    .pipe(gulp.dest('./dist'));
});
gulp.task('create-iconfonts', (callback) => {
  gulp.src(`${src}/iconfonts/*.svg`)
    .pipe(svgmin())
    .pipe(iconfontCss({
      fontName: 'iconfonts',
      path: `${src}/scss/_iconfontsTemplate.scss`,
      targetPath: `${src}/scss/utility/_iconfonts.scss`,
      fontPath: `${src}/fonts`
    }))
    .pipe(iconfont({
      fontName: 'iconfonts',
      formats: ['ttf', 'eot', 'woff', 'woff2', 'svg'],
      appendCodepoints: false
    }))
    .pipe(gulp.dest(`${src}/fonts`))
    .on('end', () => { callback() });
});

git当前状态

$ git status
On branch test/hoge
nothing to commit, working directory clean

到目前为止,一切顺利。

字体不变

但是,下面的命令被修改为git

$ ./node_modules/.bin/gulp create-iconfonts
$ git status
On branch test/hoge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
        modified:   app/assets/fonts/iconfonts.eot
        modified:   app/assets/fonts/iconfonts.ttf
        modified:   app/assets/fonts/iconfonts.woff
        modified:   app/assets/fonts/iconfonts.woff2
no changes added to commit (use "git add" and/or "git commit -a")
你有什么好主意吗?

谢谢。

我在这里遇到了同样的问题。原因是timestamp的性质。Git会假设文件因此而被修改。

我将时间戳设置为一个常数,如1661981543 (Math.round(Date.now()/1000)的结果),git只会假设文件被修改,如果字体真的改变了。

iconfont({
 timestamp: 1661981543, // same timestamp always so git doesn't assume the file was modified
})

如果您在构建之前有一些清理字体的任务,您应该考虑删除它。