Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP


Concatenate JavaScripts with semicolon. #217

wants to merge 1 commit into from

4 participants

Kevin Lynagh Dennis Collective Doug Cole Andrew Hao
Kevin Lynagh

Without a semicolon, JavaScript evaluates

a = b + c
(d + e).print()


a = b + c(d + e).print();

rather than

a = b + c;
(d + e).print();

This commit prevents that from happening by defensively adding a semicolon when joining JavaScripts.

Dennis Collective

is this going to get merged? we occasionally have issues resulting from concatenation.

Doug Cole

This seems really valuable - is anything holding this up?

Andrew Hao

What compressors are you all using? By explicitly requiring Closure Compiler this issue went away for me (methinks JSMin uses a naive compression algorithm?).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jan 18, 2012
  1. Kevin Lynagh

    Concatenate JavaScript files with ";\n" rather than just "\n" to prev…

    lynaghk authored
    …ent unintentional function calls.
This page is out of date. Refresh to see the latest.
Showing with 4 additions and 4 deletions.
  1. +4 −4 lib/jammit/compressor.rb
8 lib/jammit/compressor.rb
@@ -67,9 +67,9 @@ def initialize
# YUI Compressor (with munging enabled). JST can optionally be included.
def compress_js(paths)
if (jst_paths = paths.grep(Jammit.template_extension_matcher)).empty?
- js = concatenate(paths)
+ js = concatenate(paths, ";\n")
- js = concatenate(paths - jst_paths) + compile_jst(jst_paths)
+ js = concatenate(paths - jst_paths, ";\n") + compile_jst(jst_paths)
Jammit.compress_assets ? @js_compressor.compress(js) : js
@@ -240,8 +240,8 @@ def mime_type(asset_path)
# Concatenate together a list of asset files.
- def concatenate(paths)
- [paths] {|p| read_binary_file(p) }.join("\n")
+ def concatenate(paths, separator="\n")
+ [paths] {|p| read_binary_file(p) }.join(separator)
# ``, but in "binary" mode.
Something went wrong with that request. Please try again.