繁体   English   中英

如何使用javascript :: minify模块缩小目录结构中的所有js文件?

[英]How do i minify all js files within a directory structure using javascript::minify module?

我想使用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);

请提供可能的解决方案。

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
}, '.');

笔记:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM