Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用filerev在grunt usemin之后删除旧文件_Javascript_Gruntjs_Minify_Grunt Usemin - Fatal编程技术网

Javascript 使用filerev在grunt usemin之后删除旧文件

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'

我正在使用usemin生成我的JS和CSS文件——所有这些都是以非常标准的方式生成的

我遇到的唯一问题是,我想从我的dist中删除旧的编译文件

我的grunt配置是:

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文件夹,你只想有一个版本的缩小文件