dir.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. "use strict";
  2. var _stringify = require("babel-runtime/core-js/json/stringify");
  3. var _stringify2 = _interopRequireDefault(_stringify);
  4. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  5. var outputFileSync = require("output-file-sync");
  6. var pathExists = require("path-exists");
  7. var slash = require("slash");
  8. var path = require("path");
  9. var util = require("./util");
  10. var fs = require("fs");
  11. var _ = require("lodash");
  12. module.exports = function (commander, filenames) {
  13. function write(src, relative) {
  14. relative = relative.replace(/\.(\w*?)$/, "") + ".js";
  15. var dest = path.join(commander.outDir, relative);
  16. var data = util.compile(src, {
  17. sourceFileName: slash(path.relative(dest + "/..", src)),
  18. sourceMapTarget: path.basename(relative)
  19. });
  20. if (!commander.copyFiles && data.ignored) return;
  21. if (data.map && commander.sourceMaps && commander.sourceMaps !== "inline") {
  22. var mapLoc = dest + ".map";
  23. data.code = util.addSourceMappingUrl(data.code, mapLoc);
  24. outputFileSync(mapLoc, (0, _stringify2.default)(data.map));
  25. }
  26. outputFileSync(dest, data.code);
  27. util.chmod(src, dest);
  28. util.log(src + " -> " + dest);
  29. }
  30. function handleFile(src, filename) {
  31. if (util.shouldIgnore(src)) return;
  32. if (util.canCompile(filename, commander.extensions)) {
  33. write(src, filename);
  34. } else if (commander.copyFiles) {
  35. var dest = path.join(commander.outDir, filename);
  36. outputFileSync(dest, fs.readFileSync(src));
  37. util.chmod(src, dest);
  38. }
  39. }
  40. function handle(filename) {
  41. if (!pathExists.sync(filename)) return;
  42. var stat = fs.statSync(filename);
  43. if (stat.isDirectory(filename)) {
  44. (function () {
  45. var dirname = filename;
  46. _.each(util.readdir(dirname), function (filename) {
  47. var src = path.join(dirname, filename);
  48. handleFile(src, filename);
  49. });
  50. })();
  51. } else {
  52. write(filename, filename);
  53. }
  54. }
  55. if (!commander.skipInitialBuild) {
  56. _.each(filenames, handle);
  57. }
  58. if (commander.watch) {
  59. (function () {
  60. var chokidar = util.requireChokidar();
  61. _.each(filenames, function (dirname) {
  62. var watcher = chokidar.watch(dirname, {
  63. persistent: true,
  64. ignoreInitial: true
  65. });
  66. _.each(["add", "change"], function (type) {
  67. watcher.on(type, function (filename) {
  68. var relative = path.relative(dirname, filename) || filename;
  69. try {
  70. handleFile(filename, relative);
  71. } catch (err) {
  72. console.error(err.stack);
  73. }
  74. });
  75. });
  76. });
  77. })();
  78. }
  79. };