首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Grunt的CSS版本号

带有Grunt的CSS版本号
EN

Stack Overflow用户
提问于 2016-09-14 03:49:26
回答 1查看 656关注 0票数 2

我使用带有php的Grunt,并使用一个包将我的css版本的日期标记为style.min.20160913230349.css

但是,如何找到一个包,它将将新字符串更新到我的php页面中的标题。style.min.{grunt_this_string}.css

我看上去是个使用者,但我看不出如何实现它。

代码语言:javascript
复制
<link rel="stylesheet" media="all" href="/css/style.min.20160913230349.css" type="text/css"/>

Gruntfile.js

代码语言:javascript
复制
module.exports = function (grunt) {


  grunt.initConfig({


    /*=============================================
    =            Proxy server                    =
    =============================================*/
    php: {
      dist: {
        options: {
          hostname: 'sau.dev',
          base: 'website-v2', // Project root 
          keepalive: false,
          open: false
        }
      }
    },

    browserSync: {
      dev: {
        bsFiles: {
          src: [
            'website-v2/*.php',
            'website-v2/*/*.php',
            'website-v2/css/*.css'
          ]
        },
        options: {
          proxy: 'sau.dev',//<%= php.dist.options.hostname %>:<%= php.dist.options.port %>
              ghostMode: {
                  clicks: false,
                  forms: false,
                  scroll: true
              },
              logLevel: 'info',//client
              logConnections: true,
              watchTask: true,
              open: 'ui',
              xip: true,
        }
      }
    },

    watch: {
        html: {
          files: ['src/*.html'],
        }
    },

    cssmin: {
      dist: {
          files: {
             'website-v2/css/style.min.css': ['website-v2/css/all.css']
          }
      }
    },

    uglify: {
      dist: {
        files: {
          'website-v2/js/main.min.js': ['website-v2/js/jquery-     1.9.1.min.js','jquery-ui.min.js','main.js','featherlight.js']
        }
      }
    },

    assets_versioning: {
      options: {
        tag: 'date',
        dateFormat: 'YYYYMMDDHH',
        timezoneOffset: 10
      },
      dist: {
        options: {
          tasks: ['cssmin:dist']
        }
      },
    },

  });

  //grunt.loadNpmTasks('grunt-contrib-sass');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-browser-sync');
  grunt.loadNpmTasks('grunt-php');
  grunt.loadNpmTasks('grunt-assets-versioning');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-string-replace');

  //grunt.loadNpmTasks('usemin');



  //Static Server
  grunt.registerTask('dist', ['versioning']);

  //Proxy Server
  grunt.registerTask('server', ['php:dist','browserSync','watch']);
};
EN

回答 1

Stack Overflow用户

发布于 2016-09-14 05:13:33

在理解了问题之后,我认为您需要创建一个assets.map

您需要将其添加到gruntfile.js中。

代码语言:javascript
复制
options: {
    ...
    versionsMapFile: 'assets.json',
    ...
}

我想相信grunt-assets-versioning创建了一个截取日期的版本。

您需要在html中替换为提供assest.json的版本。为此,我建议使用咕噜-字符串-替换

代码语言:javascript
复制
replace: {
  dist: {
    options: {
      patterns: [
        {
          match: 'style.min.css',
          replacement: replacement()
        }
      ]
    },
    files: [
      {src: ['src/assets/index.html'], dest: 'build/index.html'}
    ]
  }
}

...

grunt.registerTask('versioning', ['assets_versioning']);
grunt.registerTask('replace', ['string-replace']

... 

function replacements() {
    var projectFile = "assets.json";

    if (!grunt.file.exists(projectFile)) {
        grunt.log.error("file " + projectFile + " not found");
        return true;//return false to abort the execution
    }
    var project = grunt.file.readJSON(projectFile);//get file as json object
    var version = project[0].version;
    var replace = ''

    // continue with the algorithm that you need

    return replace;
}

我希望这能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39482211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档