module-loader.js 781 B

1234567891011121314151617181920212223242526272829
  1. var vm = require('vm');
  2. var fs = require('fs');
  3. var path = require('path');
  4. module.exports.loadModule = function(filePath, mocks) {
  5. mocks = mocks || {};
  6. // this is necessary to allow relative path modules within loaded file
  7. // i.e. requiring ./some inside file /a/b.js needs to be resolved to /a/some
  8. var resolveModule = function(module) {
  9. if (module.charAt(0) !== '.') return module;
  10. return path.resolve(path.dirname(filePath), module);
  11. };
  12. var exports = {};
  13. var context = {
  14. require: function(name) {
  15. return mocks[name] || require(resolveModule(name));
  16. },
  17. console: console,
  18. exports: exports,
  19. module: {
  20. exports: exports
  21. }
  22. };
  23. file = fs.readFileSync(filePath);
  24. vm.runInNewContext(file, context);
  25. return context;
  26. };