localsLoader.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. var loaderUtils = require("loader-utils");
  6. var processCss = require("./processCss");
  7. var getImportPrefix = require("./getImportPrefix");
  8. var compileExports = require("./compile-exports");
  9. module.exports = function(content) {
  10. if(this.cacheable) this.cacheable();
  11. var callback = this.async();
  12. var query = loaderUtils.getOptions(this) || {};
  13. var moduleMode = query.modules || query.module;
  14. var camelCaseKeys = query.camelCase || query.camelcase;
  15. processCss(content, null, {
  16. mode: moduleMode ? "local" : "global",
  17. query: query,
  18. minimize: this.minimize,
  19. loaderContext: this
  20. }, function(err, result) {
  21. if(err) return callback(err);
  22. // for importing CSS
  23. var importUrlPrefix = getImportPrefix(this, query);
  24. function importItemMatcher(item) {
  25. var match = result.importItemRegExp.exec(item);
  26. var idx = +match[1];
  27. var importItem = result.importItems[idx];
  28. var importUrl = importUrlPrefix + importItem.url;
  29. return "\" + require(" + loaderUtils.stringifyRequest(this, importUrl) + ")" +
  30. "[" + JSON.stringify(importItem.export) + "] + \"";
  31. }
  32. var exportJs = compileExports(result, importItemMatcher.bind(this), camelCaseKeys);
  33. if (exportJs) {
  34. exportJs = "module.exports = " + exportJs + ";";
  35. }
  36. callback(null, exportJs);
  37. }.bind(this));
  38. };