2011-04-01 49 views

Respuesta

49

En Linux se puede utilizar simple script de shell https://github.com/dfsq/compressJS.sh para combinar múltiples archivos JavaScript en el solo.Hace uso del servicio en línea Closure Compiler para que el script resultante también esté efectivamente comprimido.

$ ./compressJS.sh some-script.js another-sctipt.js onemore.js 
+1

¿podría funcionar esto con los manubrios? –

+3

Es mejor usar un administrador de tareas como Grunt, Gulp y otras cosas así que lo hacen automáticamente. Usando Grunt compilo mis manillas menos, de mecanografía, en una carpeta generada, luego copio los archivos js/css a la carpeta generada también, al final también minimizo en un archivo js todos los archivos .js y en un archivo CSS todos los archivos .css. Y tengo un vigilante que vuelve a ejecutar esa configuración en el cambio de archivo para poder guardar un archivo y actualizar el navegador y todos los cambios se han aplicado en 1-3 segundos. – Vadorequest

5

Usted puede utilizar el compilador de cierre como sugiere orangutancloud. Vale la pena señalar que en realidad no necesita para compilar/minificar el JavaScript, debería ser posible simplemente concatenar los archivos de texto JavaScript en un solo archivo de texto. Solo únete a ellos en el orden en que normalmente están incluidos en la página.

+0

Sí, buen punto. El compilador de cierre puede ser complicado si usted o los autores del complemento no se mantienen actualizados con buena sintaxis, o si está intentando depurar. Pero si lo usa en el modo más básico puede ser útil. Personalmente me gusta mucho Dojo y uso su sistema de compilación con proyectos de dojo, realmente ayuda a mantener todo en un solo archivo. Pero solo es útil para el despliegue, no para el desarrollo. –

10

Puede hacerlo a través de

  • a. Manualmente: copia de todos los archivos Javascript en uno, ejecute un compresor en él (opcional pero recomendado) y cárguelo en el servidor y enlace a ese archivo.
  • b. Usar PHP: Hay que crear una matriz de todos los archivos JS y include todos y salida de ellos, en una etiqueta <script>
+1

No se recomienda la opción B porque hace que su navegador realice muchas solicitudes para todos los pequeños archivos .js individuales (lentos) en lugar de solo una solicitud para un archivo .js más grande (más rápido). – Mikepote

+4

@Mikepote, sí ... de ahí que utilicé la palabra 'incluir', es decir, no hago

17

Simplemente combinar los archivos de texto y luego usar algo como el YUI Compressor.

Los archivos se pueden combinar fácilmente usando el comando cat *.js > main.js y main.js se puede ejecutar a través del compresor YUI usando java -jar yuicompressor-x.y.z.jar -o main.min.js main.js.

actualización Ago 2014

ahora he migrado a la utilización de Gulp JavaScript concatenación y la compresión como con varios plugins y alguna configuración mínima que puede hacer cosas como establecer dependencias, compilar CoffeeScript etc, así como comprimir tu JS.

0

Esto puede ser un poco de esfuerzo, pero se podía descargar mi wiki del proyecto de código abierto desde CodePlex:

http://shuttlewiki.codeplex.com

Contiene un proyecto CompressJavascript (y CompressCSS) que utiliza el proyecto http://yuicompressor.codeplex.com/.

El código debe explicarse por sí mismo pero hace combinando y comprimiendo los archivos de un bit de simnpler --- para mí de todos modos :)

El proyecto ShuttleWiki muestra cómo usarlo en caso posterior a la generación.

7

Guión agrupación es contraproducente, debe cargar en paralelo usando algo como http://yepnopejs.com/ o http://headjs.com

+3

Existen razones válidas para combinar archivos javascript. Por un lado, es muy posible que solicitar 20 archivos de 2kb tarde más que solicitar un archivo de 40 kb. –

+0

¿Qué sucede cuántas veces por milenio? – Capsule

+3

Más a menudo de lo que piensas Eche un vistazo incluso al código fuente de stackoverflow: "... No se recomienda la opción B porque hace que su navegador haga muchas solicitudes para todos los pequeños archivos .js individuales (lentos) en lugar de una sola solicitud de un .js más grande. archivo (más rápido) ". –

4

Si está ejecutando PHP, recomiendo Minify porque hace cosechadoras y le resta sobre la marcha, tanto para CSS y JS. Una vez que lo haya configurado, simplemente trabaje de manera normal y se ocupa de todo.

5

Copie este script en el bloc de notas y guárdelo como un archivo .vbs. Arrastrar & Suelta los archivos .js en este script.

ps. Esto funcionará solo en Windows.

set objArgs = Wscript.Arguments 
set objFso = CreateObject("Scripting.FileSystemObject") 
content = "" 

'Iterate through all the arguments passed 
for i = 0 to objArgs.count 
    on error resume next 
    'Try and treat the argument like a folder 
    Set folder = objFso.GetFolder(objArgs(i)) 
    'If we get an error, we know it is a file 
    if err.number <> 0 then 
     'This is not a folder, treat as file 
     content = content & ReadFile(objArgs(i)) 
    else 
     'No error? This is a folder, process accordingly 
     for each file in folder.Files 
      content = content & ReadFile(file.path) 
     next 
    end if 
    on error goto 0 
next 

'Get system Temp folder path 
set tempFolderPath = objFso.GetSpecialFolder(2) 
'Generate a random filename to use for a temporary file 
strTempFileName = objFso.GetTempName 
'Create temporary file in Temp folder 
set objTempFile = tempFolderPath.CreateTextFile(strTempFileName) 
'Write content from JavaScript files to temporary file 
objTempFile.WriteLine(content) 
objTempFile.Close 

'Open temporary file in Notepad 
set objShell = CreateObject("WScript.Shell") 
objShell.Run("Notepad.exe " & tempFolderPath & "\" & strTempFileName) 


function ReadFile(strFilePath) 
    'If file path ends with ".js", we know it is JavaScript file 
    if Right(strFilePath, 3) = ".js" then  
     set objFile = objFso.OpenTextFile(strFilePath, 1, false) 
     'Read entire contents of a JavaScript file and returns it as a string 
     ReadFile = objFile.ReadAll & vbNewLine 
     objFile.Close 
    else 
     'Return empty string 
     ReadFile = "" 
    end if 
end function 
7

por lo general tienen que en un Makefile:

# All .js compiled into a single one. 
compiled=./path/of/js/main.js 

compile: 
    @find ./path/of/js -type f -name "*.js" | xargs cat > $(compiled) 

entonces se corre:

make compile 

espero que ayude.

2

Puede usar un script que hice. Necesitas JRuby para ejecutar esto sin embargo. https://bitbucket.org/ardee_aram/jscombiner (JSCombiner).

Lo que lo diferencia es que observa los cambios de archivos en el javascript y los combina automáticamente con el script que elijas. Por lo tanto, no es necesario "crear" manualmente su javascript cada vez que lo pruebe. Espero que te ayude, actualmente estoy usando esto.

8

Utilizo este script de shell en Linux https://github.com/eloone/mergejs.

Comparado con los scripts anteriores, tiene las ventajas de ser muy simple de usar, y una gran ventaja es que puede listar los archivos js que desea fusionar en un archivo de texto de entrada y no en la línea de comando, por lo que la lista es reutilizable y no tiene que escribirla cada vez que desee fusionar sus archivos. Es muy útil ya que repetirá este paso cada vez que quiera impulsar la producción. También puede comentar los archivos que no desea fusionar en la lista. La línea de comando que lo más probable es Tipo:

$ mergejs js_files_list.txt output.js 

Y si desea comprimir el archivo también combinada resultante:

$ mergejs -c js_files_list.txt output.js 

Esto creará output-min.js minified por el compilador de cierre de Google. O:

$ mergejs -c js_files_list.txt output.js output.minified.js 

Si quieres un nombre específico para su archivo llamado minified output.minified.js

Me resulta muy útil para un sitio web sencillo.

4

Puede utilizar KjsCompiler: https://github.com/knyga/kjscompiler fresca managment dependencia

+0

He estado buscando herramientas como esta por horas, pero finalmente funciona exactamente como me imaginaba que debería funcionar. Simple y directo. –

Cuestiones relacionadas