配置Grunt任务:生成带时间戳的压缩CSS文件
配置Grunt生成带时间戳的压缩CSS文件
嘿,我看你想要实现的是压缩CSS后给文件名加上时间戳,用来避免浏览器缓存问题对吧?我帮你调整下Grunt配置,让它能正常跑起来:
首先得确保你装了必要的插件,先执行这个命令安装cssmin:
npm install grunt-contrib-cssmin --save-dev
然后修改你的Gruntfile.js,其实不用额外的replace任务,直接在cssmin里就能生成带时间戳的文件,这样更简洁:
module.exports = function (grunt) { // 初始化项目配置 grunt.initConfig({ cssmin: { target: { options: { // 可选配置:比如去掉所有特殊注释,按需调整 keepSpecialComments: 0 }, files: [{ expand: true, cwd: 'css/', // 源文件的根目录 src: ['aw2018.css'], // 要压缩的CSS文件 dest: 'dist/', // 输出目录 // 自定义重命名规则:给文件名加上时间戳 rename: function(dest, src) { const timestamp = new Date().getTime(); // 把原文件名转换成「文件名.时间戳.min.css」的格式 return dest + src.replace('.css', `.${timestamp}.min.css`); } }] } } }); // 加载cssmin插件 grunt.loadNpmTasks('grunt-contrib-cssmin'); // 注册默认任务,执行grunt命令就会触发cssmin grunt.registerTask('default', ['cssmin']); };
如果你确实需要用replace任务来处理(比如还要给其他文件加时间戳),那得先装对应的插件,再修正配置:
先安装grunt-text-replace:
npm install grunt-text-replace --save-dev
然后调整Gruntfile:
module.exports = function (grunt) { grunt.initConfig({ cssmin: { target: { src: ["css/aw2018.css"], dest: "dist/aw2018.min.css" } }, replace: { addTimestamp: { files: [{ expand: true, cwd: 'dist/', src: ['aw2018.min.css'], dest: 'dist/', // 同样用rename来修改文件名,比替换变量更适合这个场景 rename: function(dest, src) { const timestamp = new Date().getTime(); return dest + src.replace('.min.css', `.${timestamp}.min.css`); } }] } } }); // 加载需要的插件 grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-text-replace'); // 注册任务:先压缩CSS,再给文件加时间戳 grunt.registerTask('default', ['cssmin', 'replace:addTimestamp']); };
几个要注意的点:
- 你原来的replace任务里
src: ['*.css/*.js']路径是错的,这种写法找不到文件,得改成正确的匹配规则,比如*.css或者具体文件名 - 修改文件名用
rename函数是最直接的方式,比替换文件内容的变量更适合这个需求 - 执行
grunt命令后,你就能在dist目录下看到带时间戳的压缩CSS文件啦,比如aw2018.1700000000000.min.css
内容的提问来源于stack exchange,提问作者bauhau5
相关产品推荐
相关产品推荐

