gulpfile.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /**
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. *
  7. * @format
  8. */
  9. 'use strict';
  10. var babel = require('gulp-babel');
  11. var babelPluginDEV = require('fbjs-scripts/babel/dev-expression');
  12. var babelPluginModules = require('fbjs-scripts/babel/rewrite-modules');
  13. var del = require('del');
  14. var derequire = require('gulp-derequire');
  15. var flatten = require('gulp-flatten');
  16. var gulp = require('gulp');
  17. var gulpUtil = require('gulp-util');
  18. var header = require('gulp-header');
  19. var objectAssign = require('object-assign');
  20. var runSequence = require('run-sequence');
  21. var webpackStream = require('webpack-stream');
  22. var DEVELOPMENT_HEADER =
  23. ['/**', ' * Animated v<%= version %>', ' */'].join('\n') + '\n';
  24. var PRODUCTION_HEADER =
  25. [
  26. '/**',
  27. ' * Animated v<%= version %>',
  28. ' *',
  29. ' * Copyright (c) 2013-present, Facebook, Inc.',
  30. ' *',
  31. ' * This source code is licensed under the MIT license found in the',
  32. ' * LICENSE file in the root directory of this source tree.',
  33. ' */',
  34. ].join('\n') + '\n';
  35. var babelOpts = {
  36. nonStandard: true,
  37. loose: ['es6.classes'],
  38. stage: 1,
  39. plugins: [babelPluginDEV, babelPluginModules],
  40. _moduleMap: objectAssign({}, require('fbjs/module-map'), {
  41. React: 'react',
  42. }),
  43. };
  44. var buildDist = function(opts) {
  45. var webpackOpts = {
  46. debug: opts.debug,
  47. externals: {
  48. react: 'React',
  49. },
  50. module: {
  51. loaders: [{test: /\.js$/, loader: 'babel'}],
  52. },
  53. output: {
  54. filename: opts.output,
  55. library: 'Animated',
  56. },
  57. plugins: [
  58. new webpackStream.webpack.DefinePlugin({
  59. 'process.env.NODE_ENV': JSON.stringify(
  60. opts.debug ? 'development' : 'production',
  61. ),
  62. }),
  63. new webpackStream.webpack.optimize.OccurenceOrderPlugin(),
  64. new webpackStream.webpack.optimize.DedupePlugin(),
  65. ],
  66. };
  67. if (!opts.debug) {
  68. webpackOpts.plugins.push(
  69. new webpackStream.webpack.optimize.UglifyJsPlugin({
  70. compress: {
  71. hoist_vars: true,
  72. screw_ie8: true,
  73. warnings: false,
  74. },
  75. }),
  76. );
  77. }
  78. return webpackStream(webpackOpts, null, function(err, stats) {
  79. if (err) {
  80. throw new gulpUtil.PluginError('webpack', err);
  81. }
  82. if (stats.compilation.errors.length) {
  83. throw new gulpUtil.PluginError('webpack', stats.toString());
  84. }
  85. });
  86. };
  87. var paths = {
  88. dist: 'dist',
  89. entry: 'lib/AnimatedWeb.js',
  90. lib: 'lib',
  91. src: [
  92. '*src/**/*.js',
  93. '!src/**/__tests__/**/*.js',
  94. '!src/**/__mocks__/**/*.js',
  95. ],
  96. };
  97. gulp.task('clean', function(cb) {
  98. del([paths.dist, paths.lib], cb);
  99. });
  100. gulp.task('modules', function() {
  101. return gulp
  102. .src(paths.src, {cwd: '../'})
  103. .pipe(babel(babelOpts))
  104. .pipe(flatten())
  105. .pipe(gulp.dest(paths.lib));
  106. });
  107. gulp.task('dist', ['modules'], function() {
  108. var distOpts = {
  109. debug: true,
  110. output: 'animated.js',
  111. };
  112. return gulp
  113. .src(paths.entry)
  114. .pipe(buildDist(distOpts))
  115. .pipe(derequire())
  116. .pipe(
  117. header(DEVELOPMENT_HEADER, {
  118. version: process.env.npm_package_version,
  119. }),
  120. )
  121. .pipe(gulp.dest(paths.dist));
  122. });
  123. gulp.task('dist:min', ['modules'], function() {
  124. var distOpts = {
  125. debug: false,
  126. output: 'animated.min.js',
  127. };
  128. return gulp
  129. .src(paths.entry)
  130. .pipe(buildDist(distOpts))
  131. .pipe(
  132. header(PRODUCTION_HEADER, {
  133. version: process.env.npm_package_version,
  134. }),
  135. )
  136. .pipe(gulp.dest(paths.dist));
  137. });
  138. gulp.task('watch', function() {
  139. gulp.watch(paths.src, ['modules']);
  140. });
  141. gulp.task('default', function(cb) {
  142. runSequence('clean', 'modules', ['dist', 'dist:min'], cb);
  143. });