Permalink
| 'use strict'; | |
| var path = require('path'); | |
| var GULP_EXE = 'gulp'; | |
| if (process.platform === 'win32') { | |
| GULP_EXE += '.cmd'; | |
| } | |
| module.exports = function(grunt) { | |
| grunt.initConfig({ | |
| pkg: grunt.file.readJSON('package.json'), | |
| jsx: require('./grunt/config/jsx'), | |
| browserify: require('./grunt/config/browserify'), | |
| npm: require('./grunt/config/npm'), | |
| clean: [ | |
| './build', | |
| './*.gem', | |
| './docs/_site', | |
| './examples/shared/*.js', | |
| '.module-cache', | |
| ], | |
| 'compare_size': require('./grunt/config/compare_size'), | |
| }); | |
| grunt.config.set('compress', require('./grunt/config/compress')); | |
| function spawnGulp(args, opts, done) { | |
| grunt.util.spawn({ | |
| // This could be more flexible (require.resolve & lookup bin in package) | |
| // but if it breaks we'll fix it then. | |
| cmd: path.join('node_modules', '.bin', GULP_EXE), | |
| args: args, | |
| opts: Object.assign({stdio: 'inherit'}, opts), | |
| }, function(err, result, code) { | |
| if (err) { | |
| grunt.fail.fatal('Something went wrong running gulp: ', result); | |
| } | |
| done(code === 0); | |
| }); | |
| } | |
| Object.keys(grunt.file.readJSON('package.json').devDependencies) | |
| .filter(function(npmTaskName) { | |
| return npmTaskName.indexOf('grunt-') === 0; | |
| }) | |
| .filter(function(npmTaskName) { | |
| return npmTaskName !== 'grunt-cli'; | |
| }) | |
| .forEach(function(npmTaskName) { | |
| grunt.loadNpmTasks(npmTaskName); | |
| }); | |
| grunt.registerTask('eslint', require('./grunt/tasks/eslint')); | |
| grunt.registerTask('lint', ['eslint']); | |
| grunt.registerTask('delete-build-modules', function() { | |
| // Use gulp here. | |
| spawnGulp(['react:clean'], null, this.async()); | |
| }); | |
| // Register jsx:normal and :release tasks. | |
| grunt.registerMultiTask('jsx', require('./grunt/tasks/jsx')); | |
| // Our own browserify-based tasks to build a single JS file build. | |
| grunt.registerMultiTask('browserify', require('./grunt/tasks/browserify')); | |
| grunt.registerMultiTask('npm', require('./grunt/tasks/npm')); | |
| var npmReactTasks = require('./grunt/tasks/npm-react'); | |
| grunt.registerTask('npm-react:release', npmReactTasks.buildRelease); | |
| grunt.registerTask('npm-react:pack', npmReactTasks.packRelease); | |
| var npmReactDOMTasks = require('./grunt/tasks/npm-react-dom'); | |
| grunt.registerTask('npm-react-dom:release', npmReactDOMTasks.buildRelease); | |
| grunt.registerTask('npm-react-dom:pack', npmReactDOMTasks.packRelease); | |
| var npmReactAddonsTasks = require('./grunt/tasks/npm-react-addons'); | |
| grunt.registerTask('npm-react-addons:release', npmReactAddonsTasks.buildReleases); | |
| grunt.registerTask('npm-react-addons:pack', npmReactAddonsTasks.packReleases); | |
| grunt.registerTask('version-check', require('./grunt/tasks/version-check')); | |
| grunt.registerTask('build:basic', [ | |
| 'build-modules', | |
| 'version-check', | |
| 'browserify:basic', | |
| ]); | |
| grunt.registerTask('build:addons', [ | |
| 'build-modules', | |
| 'browserify:addons', | |
| ]); | |
| grunt.registerTask('build:min', [ | |
| 'build-modules', | |
| 'version-check', | |
| 'browserify:min', | |
| ]); | |
| grunt.registerTask('build:addons-min', [ | |
| 'build-modules', | |
| 'browserify:addonsMin', | |
| ]); | |
| grunt.registerTask('build:npm-react', [ | |
| 'version-check', | |
| 'build-modules', | |
| 'npm-react:release', | |
| ]); | |
| grunt.registerTask('build:react-dom', require('./grunt/tasks/react-dom')); | |
| var jestTasks = require('./grunt/tasks/jest'); | |
| grunt.registerTask('jest:normal', jestTasks.normal); | |
| grunt.registerTask('jest:coverage', jestTasks.coverage); | |
| grunt.registerTask('test', ['jest:normal']); | |
| grunt.registerTask('npm:test', ['build', 'npm:pack']); | |
| // Optimized build task that does all of our builds. The subtasks will be run | |
| // in order so we can take advantage of that and only run build-modules once. | |
| grunt.registerTask('build', [ | |
| 'delete-build-modules', | |
| 'build-modules', | |
| 'version-check', | |
| 'browserify:basic', | |
| 'browserify:addons', | |
| 'browserify:min', | |
| 'browserify:addonsMin', | |
| 'build:react-dom', | |
| 'npm-react:release', | |
| 'npm-react:pack', | |
| 'npm-react-dom:release', | |
| 'npm-react-dom:pack', | |
| 'npm-react-addons:release', | |
| 'npm-react-addons:pack', | |
| 'compare_size', | |
| ]); | |
| // Automate the release! | |
| var releaseTasks = require('./grunt/tasks/release'); | |
| grunt.registerTask('release:setup', releaseTasks.setup); | |
| grunt.registerTask('release:bower', releaseTasks.bower); | |
| grunt.registerTask('release:docs', releaseTasks.docs); | |
| grunt.registerTask('release:msg', releaseTasks.msg); | |
| grunt.registerTask('release:starter', releaseTasks.starter); | |
| grunt.registerTask('release', [ | |
| 'release:setup', | |
| 'clean', | |
| 'build', | |
| 'release:bower', | |
| 'release:starter', | |
| 'compress', | |
| 'release:docs', | |
| 'release:msg', | |
| ]); | |
| grunt.registerTask('build-modules', function() { | |
| spawnGulp(['react:modules'], null, this.async()); | |
| }); | |
| // The default task - build - to keep setup easy. | |
| grunt.registerTask('default', ['build']); | |
| }; |