2

有人知道删除未使用资产的繁重任务、脚本或应用程序吗?

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

任何事情都会有所帮助!

最好的祝愿

4

3 回答 3

3

通过 npm 和官方 grunt 网站进行搜索并没有发现任何问题。我假设未使用的资产是指未在任何 HTML 文件中链接的文件?例如,如果你有image.jpg并且image2.jpg只有image2.jpg在你的 HTML 中被引用,那么image.jpg它是未使用的?

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

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

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

笔记; 你可能想忽略node_modules.

您可以在 wiki 上找到入门所需的一切

于 2013-10-17T19:12:02.953 回答
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);
            });
    }

}
于 2013-10-21T13:01:52.687 回答
0

有一个 grunt 插件可以做到这一点。获取它:https ://www.npmjs.com/package/grunt-unused

以下是它的作用的一些描述:

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

它甚至可以配置为删除文件。看看它的配置就知道了。

于 2016-08-16T09:16:27.223 回答