dir.js 2.6 KB

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