mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
d3a781d762
The husky Git precommit hook was linting not only the source but also the built file. Normally it's expected, we want to run basic checks on what's built but in the precommit hook we're not building the file so we might be linting some previous, broken version. Fixes gh-3091
222 lines
5.2 KiB
JavaScript
222 lines
5.2 KiB
JavaScript
module.exports = function( grunt ) {
|
|
"use strict";
|
|
|
|
function readOptionalJSON( filepath ) {
|
|
var stripJSONComments = require( "strip-json-comments" ),
|
|
data = {};
|
|
try {
|
|
data = JSON.parse( stripJSONComments(
|
|
fs.readFileSync( filepath, { encoding: "utf8" } )
|
|
) );
|
|
} catch ( e ) {}
|
|
return data;
|
|
}
|
|
|
|
var fs = require( "fs" ),
|
|
gzip = require( "gzip-js" ),
|
|
srcHintOptions = readOptionalJSON( "src/.jshintrc" ),
|
|
|
|
// Skip jsdom-related tests in Node.js 0.10 & 0.12
|
|
runJsdomTests = !/^v0/.test( process.version );
|
|
|
|
if ( !grunt.option( "filename" ) ) {
|
|
grunt.option( "filename", "jquery.js" );
|
|
}
|
|
|
|
grunt.initConfig( {
|
|
pkg: grunt.file.readJSON( "package.json" ),
|
|
dst: readOptionalJSON( "dist/.destination.json" ),
|
|
"compare_size": {
|
|
files: [ "dist/jquery.js", "dist/jquery.min.js" ],
|
|
options: {
|
|
compress: {
|
|
gz: function( contents ) {
|
|
return gzip.zip( contents, {} ).length;
|
|
}
|
|
},
|
|
cache: "build/.sizecache.json"
|
|
}
|
|
},
|
|
babel: {
|
|
options: {
|
|
sourceMap: "inline",
|
|
retainLines: true
|
|
},
|
|
nodeSmokeTests: {
|
|
files: {
|
|
"test/node_smoke_tests/lib/ensure_iterability.js":
|
|
"test/node_smoke_tests/lib/ensure_iterability_es6.js"
|
|
}
|
|
}
|
|
},
|
|
build: {
|
|
all: {
|
|
dest: "dist/jquery.js",
|
|
minimum: [
|
|
"core",
|
|
"selector"
|
|
],
|
|
|
|
// Exclude specified modules if the module matching the key is removed
|
|
removeWith: {
|
|
ajax: [ "manipulation/_evalUrl", "event/ajax" ],
|
|
callbacks: [ "deferred" ],
|
|
css: [ "effects", "dimensions", "offset" ],
|
|
"css/showHide": [ "effects" ],
|
|
deferred: {
|
|
remove: [ "ajax", "effects", "queue", "core/ready" ],
|
|
include: [ "core/ready-no-deferred" ]
|
|
},
|
|
sizzle: [ "css/hiddenVisibleSelectors", "effects/animatedSelector" ]
|
|
}
|
|
}
|
|
},
|
|
npmcopy: {
|
|
all: {
|
|
options: {
|
|
destPrefix: "external"
|
|
},
|
|
files: {
|
|
"sizzle/dist": "sizzle/dist",
|
|
"sizzle/LICENSE.txt": "sizzle/LICENSE.txt",
|
|
|
|
"npo/npo.js": "native-promise-only/npo.js",
|
|
|
|
"qunit/qunit.js": "qunitjs/qunit/qunit.js",
|
|
"qunit/qunit.css": "qunitjs/qunit/qunit.css",
|
|
"qunit/LICENSE.txt": "qunitjs/LICENSE.txt",
|
|
|
|
"qunit-assert-step/qunit-assert-step.js":
|
|
"qunit-assert-step/qunit-assert-step.js",
|
|
"qunit-assert-step/MIT-LICENSE.txt":
|
|
"qunit-assert-step/MIT-LICENSE.txt",
|
|
|
|
"requirejs/require.js": "requirejs/require.js",
|
|
|
|
"sinon/sinon.js": "sinon/pkg/sinon.js",
|
|
"sinon/LICENSE.txt": "sinon/LICENSE"
|
|
}
|
|
}
|
|
},
|
|
jsonlint: {
|
|
pkg: {
|
|
src: [ "package.json" ]
|
|
}
|
|
},
|
|
jshint: {
|
|
all: {
|
|
src: [
|
|
"src/**/*.js", "Gruntfile.js", "test/**/*.js", "build/**/*.js"
|
|
],
|
|
options: {
|
|
jshintrc: true
|
|
}
|
|
},
|
|
dist: {
|
|
src: "dist/jquery.js",
|
|
options: srcHintOptions
|
|
}
|
|
},
|
|
jscs: {
|
|
src: "src",
|
|
gruntfile: "Gruntfile.js",
|
|
|
|
// Check parts of tests that pass
|
|
test: [
|
|
"test/data/testrunner.js",
|
|
"test/unit/animation.js",
|
|
"test/unit/basic.js",
|
|
"test/unit/support.js",
|
|
"test/unit/tween.js",
|
|
"test/unit/wrap.js"
|
|
],
|
|
build: "build"
|
|
},
|
|
testswarm: {
|
|
tests: [
|
|
|
|
// A special module with basic tests, meant for
|
|
// not fully supported environments like Android 2.3,
|
|
// jsdom or PhantomJS. We run it everywhere, though,
|
|
// to make sure tests are not broken.
|
|
"basic",
|
|
|
|
"ajax",
|
|
"animation",
|
|
"attributes",
|
|
"callbacks",
|
|
"core",
|
|
"css",
|
|
"data",
|
|
"deferred",
|
|
"deprecated",
|
|
"dimensions",
|
|
"effects",
|
|
"event",
|
|
"manipulation",
|
|
"offset",
|
|
"queue",
|
|
"selector",
|
|
"serialize",
|
|
"support",
|
|
"traversing",
|
|
"tween"
|
|
]
|
|
},
|
|
watch: {
|
|
files: [ "<%= jshint.all.src %>" ],
|
|
tasks: [ "dev" ]
|
|
},
|
|
uglify: {
|
|
all: {
|
|
files: {
|
|
"dist/<%= grunt.option('filename').replace('.js', '.min.js') %>":
|
|
"dist/<%= grunt.option('filename') %>"
|
|
},
|
|
options: {
|
|
preserveComments: false,
|
|
sourceMap: true,
|
|
ASCIIOnly: true,
|
|
sourceMapName:
|
|
"dist/<%= grunt.option('filename').replace('.js', '.min.map') %>",
|
|
report: "min",
|
|
beautify: {
|
|
"ascii_only": true
|
|
},
|
|
banner: "/*! jQuery v<%= pkg.version %> | " +
|
|
"(c) jQuery Foundation | jquery.org/license */",
|
|
compress: {
|
|
"hoist_funs": false,
|
|
loops: false,
|
|
unused: false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} );
|
|
|
|
// Load grunt tasks from NPM packages
|
|
require( "load-grunt-tasks" )( grunt );
|
|
|
|
// Integrate jQuery specific tasks
|
|
grunt.loadTasks( "build/tasks" );
|
|
|
|
grunt.registerTask( "lint", [ "jsonlint", "jshint", "jscs" ] );
|
|
|
|
// Don't run Node-related tests in Node.js < 1.0.0 as they require an old
|
|
// jsdom version that needs compiling, making it harder for people to compile
|
|
// jQuery on Windows. (see gh-2519)
|
|
grunt.registerTask( "test_fast", runJsdomTests ? [ "node_smoke_tests" ] : [] );
|
|
|
|
grunt.registerTask( "test", [ "test_fast" ].concat(
|
|
runJsdomTests ? [ "promises_aplus_tests" ] : []
|
|
) );
|
|
|
|
// Short list as a high frequency watch task
|
|
grunt.registerTask( "dev", [ "build:*:*", "lint", "uglify", "remove_map_comment", "dist:*" ] );
|
|
|
|
grunt.registerTask( "default", [ "dev", "test_fast", "compare_size" ] );
|
|
|
|
grunt.registerTask( "precommit_lint", [ "newer:jsonlint", "newer:jshint:all", "newer:jscs" ] );
|
|
};
|