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