Javascript 使用filerev在grunt usemin之后删除旧文件
我正在使用usemin生成我的JS和CSS文件——所有这些都是以非常标准的方式生成的 我遇到的唯一问题是,我想从我的dist中删除旧的编译文件 我的grunt配置是:Javascript 使用filerev在grunt usemin之后删除旧文件,javascript,gruntjs,minify,grunt-usemin,Javascript,Gruntjs,Minify,Grunt Usemin,我正在使用usemin生成我的JS和CSS文件——所有这些都是以非常标准的方式生成的 我遇到的唯一问题是,我想从我的dist中删除旧的编译文件 我的grunt配置是: grunt.registerTask('build',['jshint','copy','html2js:main','useminPrepare','concat:generated','cssmin:generated','uglify:generated','filerev','usemin','html2js:embed'
grunt.registerTask('build',['jshint','copy','html2js:main','useminPrepare','concat:generated','cssmin:generated','uglify:generated','filerev','usemin','html2js:embed','clean:build']);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
default: {},
useminPrepare: {
html: 'index.html',
options: {
dest: 'dist',
flow: {
steps: {
nominjs: ['concat'],
js: ['concat','uglifyjs'],
css: ['concat','cssmin']
},
post: {}
}
}
},
filerev: {
options: {
encoding: 'utf8',
algorithm: 'md5',
length: 8
},
source: {
files: [{
src: [
'dist/assets/css/ipp-styles.min.css',
'dist/scripts/ipp-scripts.min.js',
'dist/scripts/ipp-libs.js',
'dist/scripts/ipp-templates.min.js'
]
}]
}
},
usemin: {
html:['dist/index.html'],
options: {
blockReplacements: {
nominjs: function(block){
return '<script src="'+block.dest+'"></script>';
}
}
}
},
clean: {
build: ['.tmp']
},
copy: {
html: {
files: [
{expand:true, src:['index.html'], dest: 'dist'},
{expand:true, src:['.htaccess'], dest: 'dist'}
]
},
assets: {
files: [
{expand:true, src:['assets/images/**','assets/fonts/**','assets/js/**'], dest: 'dist'}
]
},
libs: {
files: [
{expand:true, src:['libs/forge.min.js'], dest: 'dist'},
]
},
config: {
files: [
{expand:true, src:['config/config_diff.js'], dest:'dist', rename: function(dest,src){
return dest + '/' + src.replace(/\.js$/,"_sample.js");
}},
]
}
},
jshint: {
options: {
force: true,
esnext: true
},
all: [
'config/*.js',
'scripts/**/*.js',
'!scripts/ipp-scripts*'
]
},
uglify: {
options: {
compress: {
drop_console: true
}
}
},
html2js: {
main: {
options: {
base:''
},
src: ['views/**/*.html'],
dest: 'dist/scripts/templates.js'
}
}
});
grunt.registerTask('build'、['jshint'、'copy'、'html2js:main'、'useminPrepare'、'concat:generated'、'cssmin:generated'、'uglify:generated'、'filerev'、'usemin'、'html2js:embed'、'clean:build']);
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
默认值:{},
使用准备:{
html:'index.html',
选项:{
目的地:“距离”,
流量:{
步骤:{
名称:['concat'],
js:['concat','uglifyjs'],
css:['concat','cssmin']
},
职位:{}
}
}
},
文件版本:{
选项:{
编码:“utf8”,
算法:“md5”,
长度:8
},
资料来源:{
档案:[{
src:[
'dist/assets/css/ipp styles.min.css',
'dist/scripts/ipp scripts.min.js',
'dist/scripts/ipp libs.js',
'dist/scripts/ipp templates.min.js'
]
}]
}
},
usemin:{
html:['dist/index.html'],
选项:{
区块替换:{
nominjs:函数(块){
返回“”;
}
}
}
},
清洁:{
内部版本:['.tmp']
},
副本:{
html:{
档案:[
{expand:true,src:['index.html'],dest:'dist'},
{expand:true,src:['.htaccess'],dest:'dist'}
]
},
资产:{
档案:[
{expand:true,src:['assets/images/**','assets/font/**','assets/js/**',dest:'dist'}
]
},
libs:{
档案:[
{expand:true,src:['libs/forge.min.js'],dest:'dist'},
]
},
配置:{
档案:[
{expand:true,src:['config/config_diff.js'],dest:'dist',rename:function(dest,src){
返回dest+'/'+src.replace(/\.js$/,“\u sample.js”);
}},
]
}
},
jshint:{
选项:{
原力:没错,
埃斯奈特:是的
},
全部:[
“config/*.js”,
“scripts/***.js”,
“!脚本/ipp脚本*”
]
},
丑陋的:{
选项:{
压缩:{
drop_控制台:true
}
}
},
html2js:{
主要内容:{
选项:{
基:“”
},
src:['views/***/.html'],
dest:'dist/scripts/templates.js'
}
}
});
我想说,没有什么特别的。一切都很好,我唯一的“问题”是,经过几次构建后,我最终得到了以下结果:
然后我必须手动删除旧文件
有没有办法在grunt运行期间删除它们?我可以在运行后删除“ipp scripts.min*”,但我需要排除当前使用的那个
谢谢你的建议我想我在设置这个时没有考虑清楚。解决办法比我想象的简单得多 简单地说:
clean: {
dist: [
'dist/assets/css/ipp-styles.min*',
'dist/scripts/ipp-scripts.min*',
'dist/scripts/ipp-libs.min*',
'dist/scripts/ipp-templates.min*'
]
},
并将其作为构建中的第一个任务运行
这将首先删除所有已编译的文件,然后编译新文件
我想让我困惑的是,我认为如果我没有最后编译的文件,filerev将总是用新的标记标记最新的文件,因此它将强制在用户浏览器上重新加载。但实际上,添加到文件中的戳记在某种程度上(可能)是从内容总和中计算出来的,因此,即使您先删除文件,并且不更改任何内容,也会生成同名文件
我意识到这仍然不是删除所有其他文件的最终解决方案,但索引中包含的文件除外,所以我不会接受我自己的答案。我想我在设置这个时没有考虑清楚。解决办法比我想象的简单得多 简单地说:
clean: {
dist: [
'dist/assets/css/ipp-styles.min*',
'dist/scripts/ipp-scripts.min*',
'dist/scripts/ipp-libs.min*',
'dist/scripts/ipp-templates.min*'
]
},
并将其作为构建中的第一个任务运行
这将首先删除所有已编译的文件,然后编译新文件
我想让我困惑的是,我认为如果我没有最后编译的文件,filerev将总是用新的标记标记最新的文件,因此它将强制在用户浏览器上重新加载。但实际上,添加到文件中的戳记在某种程度上(可能)是从内容总和中计算出来的,因此,即使您先删除文件,并且不更改任何内容,也会生成同名文件
我意识到这仍然不是删除所有其他文件的最终解决方案,但索引中包含的文件除外,因此我不会接受我自己的答案。您应该将其构建到一个与源文件分离的新文件夹中。然后你就可以删除那个文件夹了。@srlm你是什么意思?每次构建到不同的文件夹?没什么意义。在一天结束时,你有你的dist文件夹,你只想有一个版本的缩小文件,你应该建立到一个新的文件夹,从你的来源是独立的。然后你就可以删除那个文件夹了。@srlm你是什么意思?每次构建到不同的文件夹?没什么意义。在一天结束时,你有你的dist文件夹,你只想有一个版本的缩小文件