localsLoader.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. var createResolver = require("./createResolver");
  10. module.exports = function(content) {
  11. if(this.cacheable) this.cacheable();
  12. var callback = this.async();
  13. var query = loaderUtils.getOptions(this) || {};
  14. var moduleMode = query.modules || query.module;
  15. var camelCaseKeys = query.camelCase || query.camelcase;
  16. var resolve = createResolver(query.alias);
  17. processCss(content, null, {
  18. mode: moduleMode ? "local" : "global",
  19. query: query,
  20. minimize: this.minimize,
  21. loaderContext: this,
  22. resolve: resolve
  23. }, function(err, result) {
  24. if(err) return callback(err);
  25. // for importing CSS
  26. var importUrlPrefix = getImportPrefix(this, query);
  27. function importItemMatcher(item) {
  28. var match = result.importItemRegExp.exec(item);
  29. var idx = +match[1];
  30. var importItem = result.importItems[idx];
  31. var importUrl = importUrlPrefix + importItem.url;
  32. return "\" + require(" + loaderUtils.stringifyRequest(this, importUrl) + ")" +
  33. "[" + JSON.stringify(importItem.export) + "] + \"";
  34. }
  35. var exportJs = compileExports(result, importItemMatcher.bind(this), camelCaseKeys);
  36. if (exportJs) {
  37. exportJs = "module.exports = " + exportJs + ";";
  38. }
  39. callback(null, exportJs);
  40. }.bind(this));
  41. };