Javascript 移除未使用资产的grunt任务、脚本或应用程序?

Javascript 移除未使用资产的grunt任务、脚本或应用程序?,javascript,performance,automation,gruntjs,Javascript,Performance,Automation,Gruntjs,是否有人知道会删除未使用资产的grunt任务、脚本或应用程序 我正在进行一个项目,该项目已经经历了无数轮的修正,我正在寻找删除未使用的资产 什么都行 最美好的祝愿通过npm和grunt官方网站搜索,没有发现任何结果。我假设未使用的资产是指在任何HTML文件中都没有链接的文件?例如,如果您有image.jpg和image2.jpg并且HTML中只引用了image2.jpg,那么image.jpg是否未使用 写你自己的克里斯;我可以给你一个起点,但如果你认为它是构建链的一个有用的补充,你可以随时滚动

是否有人知道会删除未使用资产的grunt任务、脚本或应用程序

我正在进行一个项目,该项目已经经历了无数轮的修正,我正在寻找删除未使用的资产

什么都行


最美好的祝愿

通过npm和grunt官方网站搜索,没有发现任何结果。我假设未使用的资产是指在任何HTML文件中都没有链接的文件?例如,如果您有
image.jpg
image2.jpg
并且HTML中只引用了
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);
        });
    }
};
从那里,根据您感兴趣的类型(图像?css?js?)过滤文件名,然后在HTML源代码中检查文件名。然后,将未使用资产的路径记录到控制台(提供一个自动删除它们的选项,但默认情况下我不会启用它,因为它可能会抛出误报)

注;您可能希望忽略节点模块


你可以。

有一个grunt插件可以做到这一点。获取地址:

以下是对其功能的一点描述:

一个Grunt任务,用于检查文件中未使用的文件(jpg、png、css、js等) 项目文件并将其输出到控制台


它甚至可以配置为删除文件。只要查看它的配置,你就会知道。

那太酷了,我想你的意思是不将它们添加到分发文件夹,而不是完全删除它们。老实说,源文件夹中的其他资产并不是世界末日。这主要是为了确保它们不会出现在生产构建中。我可能会写一个脚本来实现这一点,但如果社区已经有了支持,那就太好了。。。为什么要做两次!嗯,这将是一个很好的自动化。我可以用它来减少我的应用程序大小。总是一件好事。干杯,本-我要开始了。:)好东西。让我保持联系。最后,我采用了以下解决方案:见下文。不过,您不需要下划线依赖项,grunt提供了“免费”的功能。将您的代码更改为
var\u=grunt.util.\u
:)
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);
            });
    }

}