2010-08-14 12 views
0

J'essaie de faire fonctionner Code Closure, mais malheureusement, il y a toujours une erreur.Comment puis-je accéder à Closure JavaScript minifier à l'aide de LWP :: UserAgent de Perl?

Voici le code:

use LWP::UserAgent; 
use HTTP::Request::Common; 
use HTTP::Response; 

my $name = 'test.js'; 
my $agent = new LWP::UserAgent(); 
$agent->agent("curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"); 

$res = $agent->request(POST 'http://closure-compiler.appspot.com/compile', 
      content_type => 'multipart/form-data', 
      content  => [ 
        output_info => 'compiled_code', 
          compilation_level => 'SIMPLE_OPTIMIZATIONS', 
        output_format => 'text', 
        js_code => [File::Spec->rel2abs($name)] 
         ]); 

if ($res->is_success) { 
    $minified = $res->decoded_content; 
    print $minified;die; 
} 

Je reçois l'erreur suivante:

Error(13): No output information to produce, yet compilation was requested.

est ici la référence api je: http://code.google.com/intl/de-DE/closure/compiler/docs/api-ref.html

Espoir quelqu'un sait ce qui se passe mal ici. Merci.

+2

Pourquoi vous simulez 'l'utilisateur agent'? –

+1

Si vous n'êtes pas opposé à l'utilisation de plusieurs modules, recherchez "Fermeture" sur http://search.cpan.org, cette tâche a déjà été effectuée dans un module au moins deux fois. – MkV

Répondre

1

Passez en tant que js_code le code réel à compiler. Essayez (d'enlever l'en-tête content_type form-data):

use File::Slurp "read_file"; 
... 
    js_code => scalar(read_file($name)), 

Je vois que vous essayez d'utiliser la fonction de téléchargement de fichiers POST; Que voyez-vous dans la documentation API qui vous fait penser que cela fonctionnerait? S'il y a quelque chose là-bas, je ne le vois pas.

+0

+1 Absolument correct. En outre, 'multipart/form-data' est incorrect. –

+0

@Sinan Ünür: compris cela aussi. Vous n'avez pas besoin d'un type de contenu du tout; vraisemblablement, il est correctement par défaut. – ysth

+0

Voir HTTP :: Request :: Common pour plus de détails sur la syntaxe [$ filename]. Sinan, absolument correct de quelle façon? Est-ce que l'un d'entre vous a essayé d'utiliser un nom de fichier différent qui n'existait pas? N'avez-vous pas reçu un message d'erreur indiquant que votre nom de fichier n'a pas été trouvé? – MkV

2
#!/usr/bin/perl 

use strict; use warnings; 

use File::Slurp; 
use LWP::UserAgent; 

my $agent = LWP::UserAgent->new; 
my $script = 'test.js'; 

my $response = $agent->post(
    'http://closure-compiler.appspot.com/compile', 
    content_type => 'application/x-www-form-urlencoded', 
    content => [ 
     compilation_level => 'SIMPLE_OPTIMIZATIONS', 
     output_info => 'compiled_code', 
     output_format => 'text', 
     js_code => scalar read_file($script), 
    ], 
); 

if ($response->is_success) { 
    my $minified = $response->decoded_content; 
    print $minified; 
} 

Sortie:

C:\Temp> cat test.js 
// ADD YOUR CODE HERE 
function hello(name) { 
    alert('Hello, ' + name); 
} 
hello('New user'); 



C:\Temp> t 
function hello(a){alert("Hello, "+a)}hello("New user");