首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用javascript::minify模块缩小目录结构中的所有js文件?

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

Stack Overflow用户
提问于 2014-08-11 13:49:28
回答 1查看 392关注 0票数 0

我希望使用javascript::minify包中的minify模块将目录树中的所有js文件缩小,但无法执行此操作。我成功地为单个文件执行了这个操作,但是当我为整个目录运行它时,我在minify.pm文件的第345行收到警告消息。

下面是我想出的代码:

代码语言:javascript
复制
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,$_);
  }
}, '.');

以下是适用于单个文件的代码:

代码语言:javascript
复制
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);

请提供可能的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-11 23:57:31

JavaScript::Minifier抱怨文件是空的。

以下说明:

代码语言:javascript
复制
use strict;
use warnings;

use JavaScript::Minifier qw(minify);

print minify(input => '');

产出:

代码语言:javascript
复制
Use of uninitialized value in pattern match (m//) at C:/strawberry/perl/site/lib/JavaScript/Minifier.pm line 345.

因此,您有一个完全为空的.js文件。解决这个问题的简单方法是在处理该文件之前验证它是否有数据:

代码语言:javascript
复制
if (-f && -s && /\.js$/) {

但是,我建议对您的脚本进行一些清理,如下所示:

代码语言:javascript
复制
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
}, '.');

备注:

  • 如果你在你的帖子中包含了确切的警告信息,你可能会得到更快的答案。
  • 我已经向模块作者报告了这个bug:minify为空文件生成警告。 (而且它是固定)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25244876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档