我希望使用javascript::minify包中的minify模块将目录树中的所有js文件缩小,但无法执行此操作。我成功地为单个文件执行了这个操作,但是当我为整个目录运行它时,我在minify.pm文件的第345行收到警告消息。
下面是我想出的代码:
use File::Find;
use JavaScript::Minifier qw(minify);
find(sub {
if (-f and /\.js$/) {
$t = 'temp.js';
open(INFILE, $_) or die;
open(OUTFILE, ">$t") or die;
minify(input => *INFILE, outfile => *OUTFILE);
close(INFILE);
close(OUTFILE);
rename($t,$_);
}
}, '.');以下是适用于单个文件的代码:
use JavaScript::Minifier qw(minify);
$file = 'ex.js';
$temp = 'temp.js';
open(INFILE, $file) or die;
open(OUTFILE, ">$temp") or die;
minify(input => *INFILE, outfile => *OUTFILE);
close(INFILE);
close(OUTFILE);
rename($temp,$file);请提供可能的解决方案。
发布于 2014-08-11 23:57:31
JavaScript::Minifier抱怨文件是空的。
以下说明:
use strict;
use warnings;
use JavaScript::Minifier qw(minify);
print minify(input => '');产出:
Use of uninitialized value in pattern match (m//) at C:/strawberry/perl/site/lib/JavaScript/Minifier.pm line 345.因此,您有一个完全为空的.js文件。解决这个问题的简单方法是在处理该文件之前验证它是否有数据:
if (-f && -s && /\.js$/) {但是,我建议对您的脚本进行一些清理,如下所示:
use strict;
use warnings;
use autodie;
use File::Find;
use JavaScript::Minifier qw(minify);
find(sub {
return unless -f && -s && /\.js$/;
local @ARGV = my $file = $_;
local $^I = '.bak';
local $/;
while (<>) {
print minify(input => $_);
}
unlink "$file$^I"; # Optionally delete backup
}, '.');备注:
https://stackoverflow.com/questions/25244876
复制相似问题