删除未使用资产的繁琐任务,脚本或应用程序?

时间:2013-10-17 10:11:53

标签: javascript performance automation gruntjs

是否有人知道删除未使用资产的繁琐任务,脚本或应用程序?

我正在开展一个经过多轮修改的项目,我正在寻找删除未使用的资产。

一切都会有所帮助!

祝福

3 个答案:

答案 0 :(得分:3)

通过npm搜索和官方的grunt网站没有改变任何东西。我假设未使用的资产你是指在任何HTML文件中都没有链接的文件?例如,如果您的HTML中引用了image.jpgimage2.jpg并且只引用了image2.jpg,则image.jpg未被使用?

写你自己的克里斯;我可以给你一个起点,但如果你认为它对构建链是一个有用的补充,你可以随时自己动手,以便其他人也受益。这是一个起点,记录项目中与Gruntfile相关的所有文件。

module.exports = function(grunt) {
    grunt.registerMultiTask('unusedassets', function() {
        grunt.file.expand({
            filter: 'isFile'
        }, ['**/*']).forEach(function(file) {
            grunt.log.writeln(file);
        });
    }
};

从那里,按照您感兴趣的类型过滤文件名(images?css?js?),然后检查HTML源代码中的文件名。然后,将路径记录到未使用资产的控制台(提供一个自动删除它们的选项,但我不会默认启用它,因为它可能会引发误报)。

请注意;您可能想忽略node_modules

你可以find all you need to get started on the wiki

答案 1 :(得分:2)

module.exports = function (grunt) {

    var _ = require('underscore'),
            assets = [],
            links = [],
            regex = new RegExp('(?:href|src|url)[\=\(][\'"](?!(?:http|#|\s|"))(.+?(?=jpg|png|mp4|pdf|js)?)[\'"]', 'ig');

    grunt.registerTask('cleanse', function () {
            getAssetsArray();
    });

    // get list of all assets
    function getAssetsArray () {
            grunt.file.expand({
                    filter: 'isFile',
                    cwd: 'app'
            }, ['assets/**/*']).forEach(function (file) {        
                    assets.push(file);
            });
            getLinkedAssets(assets);
    }

    // find links to assets in content
    function getLinkedAssets (assets) {
            grunt.file.expand({
                    filter: 'isFile',
                    cwd: 'app'
            }, ['**/*.html', '**/*.js', '**/*.css']).forEach(function (file) {        
                    var content = grunt.file.read('app/'+file);
                    while ((result = regex.exec(content)) !== null) {
                            links.push(result[1]);
                    }
            });
            removeAssets(assets, links);
    }

    // remove unused assets
    function removeAssets () {
            var remove = _.difference(assets, links);
            remove.forEach(function (el) {
                    console.log('Removed: '+el);
                    grunt.file.delete('app/'+el);
            });
    }

}

答案 2 :(得分:0)

有一个grunt插件正是这样做的。请访问:https://www.npmjs.com/package/grunt-unused

这里有一点描述它的作用:

  

检查a中未使用的文件(jpg,png,css,js等)的Grunt任务   项目文件并将它们输出到控制台。

它可以配置为甚至删除文件。只需查看其配置,您就会知道。