我想使用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);
请帮助解决可能的解决方案..
答案 0 :(得分:0)
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
}, '.');
注意:
如果您在帖子中包含确切的警告消息,您可能会更快地得到答案。
我已向模块作者报告此错误:minify produces warning for empty files(及其fixed)