是否有人知道删除未使用资产的繁琐任务,脚本或应用程序?
我正在开展一个经过多轮修改的项目,我正在寻找删除未使用的资产。
一切都会有所帮助!
祝福
答案 0 :(得分:3)
通过npm搜索和官方的grunt网站没有改变任何东西。我假设未使用的资产你是指在任何HTML文件中都没有链接的文件?例如,如果您的HTML中引用了image.jpg
和image2.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
。
答案 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任务 项目文件并将它们输出到控制台。
它可以配置为甚至删除文件。只需查看其配置,您就会知道。