Browse files

Replace build system with a faster new one that uses Node and UglifyJ…

…S and generates smaller minified files. Also removes builds through rake/ant since having 3 different build systems was too much to maintain (make was the only one consistently kept up-to-date). Fixes #7973.
  • Loading branch information...
1 parent 9c76ac4 commit d503845d0cf45632c0d7c3542ffd1b19257a8e5e @csnover csnover committed Jan 18, 2011
@@ -7,11 +7,8 @@ BUILD_DIR = build
-RHINO ?= java -jar ${BUILD_DIR}/js.jar
-CLOSURE_COMPILER = ${BUILD_DIR}/google-compiler-20100917.jar
+JS_ENGINE ?= node
+COMPILER = ${JS_ENGINE} ${BUILD_DIR}/uglify.js --unsafe
BASE_FILES = ${SRC_DIR}/core.js\
@@ -93,17 +90,13 @@ ${SRC_DIR}/selector.js: ${SIZZLE_DIR}/sizzle.js
lint: ${JQ}
@@echo "Checking jQuery against JSLint..."
- @@${RHINO} build/jslint-check.js
+ @@${JS_ENGINE} build/jslint-check.js
min: ${JQ_MIN}
${JQ_MIN}: ${JQ}
@@echo "Building" ${JQ_MIN}
- @@head -15 ${JQ} > ${JQ_MIN}
- @@${MINJAR} --js ${JQ} --warning_level QUIET --js_output_file ${JQ_MIN}.tmp
- @@cat ${JQ_MIN}.tmp >> ${JQ_MIN}
- @@rm -f ${JQ_MIN}.tmp
+ @@${COMPILER} ${JQ} > ${JQ_MIN}
@@echo "Removing Distribution directory:" ${DIST_DIR}
@@ -1,85 +1,64 @@
[jQuery]( - New Wave Javascript
What you need to build your own jQuery
-* Make sure that you have Java installed (if you want to build a minified version of jQuery).
-If not, [go to this page]( and download "Java Runtime Environment (JRE) 5.0"
-Build Options
+In order to build jQuery, you need to have GNU make 3.8 or later, Node.js 0.2 or later, and git 1.7 or later.
+(Earlier versions might work OK, but are not tested.)
-You now have **three** options for building jQuery:
+Windows users have two options:
-* **`make`**: If you have access to common UNIX commands (like `make`, `mkdir`, `rm`, `cat`, and `echo`) then simply type `make` to build all the components.
+1. Install [msysgit]( (Full installer for official Git),
+ [GNU make for Windows](, and a
+ [binary version of Node.js]( Make sure all three packages are installed to the same
+ location (by default, this is C:\Program Files\Git).
+2. Install [Cygwin]( (remember to install the git and make packages) and follow the
+ [Node.js build instructions]( or install
+ the [binary version of Node.js](
-* **`rake`**: If you have Ruby Rake installed (on either Windows or UNIX/Linux), you can simply type `rake` to build all the components.
+Mac OS users should install Xcode (comes on your Mac OS install DVD, or downloadable from
+[Apple's Xcode site]( and
+[](Homebrew). Once Homebrew is installed, run `brew install git` to install git,
+and `brew install node` to install Node.js.
-* **`ant`**: If you have Ant installed (or are on Windows and don't have access to make). You can download Ant from here: [].
+Linux/BSD users should use their appropriate package managers to install make, git, and node, or build from source
+if you swing that way. Easy-peasy.
-How to build your own jQuery
-*Note: If you are using either `rake` or `ant`, substitute your chosen method in place of `make` in the examples below. They work identically for all intents and purposes. Quick reference is also available for `rake` by typing `rake -T` in the `jquery` directory.*
-In the main directory of the distribution (the one that this file is in), type
-the following to make all versions of jQuery:
- make
-*Here are the individual items that are buildable from the Makefile:*
- make init
-Pull in all the external dependencies (QUnit, Sizzle) for the project.
- make jquery
-The standard, uncompressed, jQuery code.
-Makes: `./dist/jquery.js`
- make min
-A compressed version of jQuery (made the Closure Compiler).
-Makes: `./dist/jquery.min.js`
+How to build your own jQuery
- make lint
+First, clone a copy of the main jQuery git repo by running `git clone git://`.
-Tests a build of jQuery against JSLint, looking for potential errors or bits of confusing code.
+Then, to get a complete, minified, jslinted version of jQuery, simply `cd` to the `jquery` directory and type
+`make`. If you don't have Node installed and/or want to make a basic, uncompressed, unlinted version of jQuery, use
+`make jquery` instead of `make`.
- make selector
+The built version of jQuery will be put in the `dist/` subdirectory.
-Builds the selector library for jQuery from Sizzle.
-Makes: `./src/selector.js`
+To remove all built files, run `make clean`.
-Finally, you can remove all the built files using the command:
- make clean
Building to a different directory
-If you want to build jQuery to a directory that is different from the default location, you can...
+If you want to build jQuery to a directory that is different from the default location, you can specify the PREFIX
+directory: `make PREFIX=/home/jquery/test/ [command]`
-**Make only:** Specify the PREFIX directory, for example:
- make PREFIX=/home/john/test/ [command]
-With this example, the output files would be contained in `/home/john/test/dist/`
+With this example, the output files would end up in `/home/jquery/test/dist/`.
-**Rake only:** Define the DIST_DIR directory, for example:
- rake DIST_DIR=/home/john/test/ [command]
-With this example, the output files would be contained in `/home/john/test/`
-*In both examples, `[command]` is optional.*
+Sometimes, the various git repositories get into an inconsistent state where builds don't complete properly
+(usually this results in the jquery.js or jquery.min.js being 0 bytes). If this happens, run `make clean`, then
+run `make` again.
-**Ant only:** You cannot currently build to another directory when using Ant.
-If you have any questions, please feel free to ask them on the Developing jQuery Core
-forum, which can be found here:
+If you have any questions, please feel free to ask on the
+[Developing jQuery Core forum]( or in #jquery on
@@ -1,162 +0,0 @@
-prefix = File.dirname( __FILE__ )
-# Directory variables
-src_dir = File.join( prefix, 'src' )
-build_dir = File.join( prefix, 'build' )
-test_dir = File.join( prefix, 'test' )
-# A different destination directory can be set by
-# setting DIST_DIR before calling rake
-dist_dir = ENV['DIST_DIR'] || File.join( prefix, 'dist' )
-base_files = %w{
- intro
- core
- support
- data
- queue
- attributes
- event
- selector
- traversing
- manipulation
- css
- ajax
- ajax/jsonp
- ajax/script
- ajax/xhr
- effects
- offset
- dimensions
- outro
-}.map { |js| File.join( src_dir, "#{js}.js" ) }
-# Sizzle, QUnit and jQuery files/dirs
-sizzle_dir = File.join( src_dir, "sizzle" )
-sizzle = File.join( sizzle_dir, "sizzle.js" )
-selector = File.join( src_dir, "selector.js" )
-qunit_dir = File.join( test_dir, "qunit" )
-qunit = File.join( qunit_dir, "qunit", "qunit.js" )
-jq = File.join( dist_dir, "jquery.js" )
-jq_min = File.join( dist_dir, "jquery.min.js" )
-# General Variables
-date = `git log -1`[/^Date:\s+(.+)$/, 1]
-version = File.join( prefix, 'version.txt' ) ).strip
-# Build tools
-rhino = "java -jar #{build_dir}/js.jar"
-minfier = "java -jar #{build_dir}/google-compiler-20100917.jar"
-# Turn off output other than needed from `sh` and file commands
-# Tasks
-task :default => "all"
-desc "Builds jQuery; Tests with JSLint; Minifies jQuery"
-task :all => [:jquery, :lint, :min] do
- puts "jQuery build complete."
-desc "Builds jQuery: jquery.js (Default task)"
-task :jquery => [:selector, jq]
-desc "Builds a minified version of jQuery: jquery.min.js"
-task :min => jq_min
-task :init => [sizzle, qunit] do
- sizzle_git = File.join(sizzle_dir, '.git')
- qunit_git = File.join(qunit_dir, '.git')
- puts "Updating SizzleJS with latest..."
- sh "git --git-dir=#{sizzle_git} pull -q origin master"
- puts "Updating QUnit with latest..."
- sh "git --git-dir=#{qunit_git} pull -q origin master"
-desc "Removes dist folder, selector.js, and Sizzle/QUnit"
-task :clean do
- puts "Removing Distribution directory: #{dist_dir}..."
- rm_rf dist_dir
- puts "Removing built copy of Sizzle..."
- rm_rf selector
- puts "Removing cloned directories..."
- rm_rf qunit_dir
- rm_rf sizzle_dir
-desc "Rebuilds selector.js from SizzleJS"
-task :selector => [:init, selector]
-desc "Tests built jquery.js against JSLint"
-task :lint => jq do
- puts "Checking jQuery against JSLint..."
- sh "#{rhino} " + File.join(build_dir, 'jslint-check.js')
-# File and Directory Dependencies
-directory dist_dir
-file jq => [dist_dir, base_files].flatten do
- puts "Building jquery.js..."
-, 'w') do |f|
- f.write cat(base_files).
- gsub(/@DATE/, date).
- gsub(/@VERSION/, version).
- gsub(/.function..jQuery...\{/, '').
- gsub(/\}...jQuery..;/, '')
- end
-file jq_min => jq do
- puts "Building jquery.min.js..."
- sh "#{minfier} --js #{jq} --warning_level QUIET --js_output_file #{jq_min}"
- min = jq_min )
- # Equivilent of "head"
-, 'w') do |f|
- f.write File.readlines(jq)[0..14].join()
- f.write min
- end
-file selector => [sizzle, :init] do
- puts "Building selector code from Sizzle..."
-, 'w') do |f|
- f.write
- /^.+EXPOSE$\n/,
- '\0' + File.join( src_dir, 'sizzle-jquery.js' ))
- ).gsub(
- /^window.Sizzle.+$\n/, ''
- )
- end
-file sizzle do
- puts "Retrieving SizzleJS from Github..."
- sh "git clone git:// #{sizzle_dir}"
-file qunit do
- puts "Retrieving QUnit from Github..."
- sh "git clone git:// #{qunit_dir}"
-def cat( files )
- do |file|
- end.join('')
Oops, something went wrong. Retry.

0 comments on commit d503845

Please sign in to comment.