From 04f479b23bbdc0b7c41e3fae04d98d4b7d66cd5e Mon Sep 17 00:00:00 2001 From: Nikita Gusakov Date: Thu, 22 Oct 2015 09:30:36 +0300 Subject: [PATCH] Added missing camelCase option for locals loader Fixes https://github.com/webpack/css-loader/pull/149#issuecomment-150114155 --- lib/compile-exports.js | 19 +++++++++++++++++++ lib/loader.js | 20 +++++--------------- lib/localsLoader.js | 14 ++++++-------- 3 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 lib/compile-exports.js diff --git a/lib/compile-exports.js b/lib/compile-exports.js new file mode 100644 index 00000000..5ce93e17 --- /dev/null +++ b/lib/compile-exports.js @@ -0,0 +1,19 @@ +var camelCase = require("lodash.camelcase"); + +module.exports = function compileExports(result, importItemMatcher, camelCaseKeys) { + if (!Object.keys(result.exports).length) { + return ""; + } + + var exportJs = Object.keys(result.exports).reduce(function(res, key) { + var valueAsString = JSON.stringify(result.exports[key]); + valueAsString = valueAsString.replace(result.importItemRegExpG, importItemMatcher); + res.push("\t" + JSON.stringify(key) + ": " + valueAsString); + if (camelCaseKeys) { + res.push("\t" + JSON.stringify(camelCase(key)) + ": " + valueAsString); + } + return res; + }, []).join(",\n"); + + return "{\n" + exportJs + "\n}"; +}; diff --git a/lib/loader.js b/lib/loader.js index 300d222f..f5508d81 100644 --- a/lib/loader.js +++ b/lib/loader.js @@ -4,9 +4,9 @@ */ var path = require("path"); var loaderUtils = require("loader-utils"); -var camelCase = require("lodash.camelcase"); var processCss = require("./processCss"); var getImportPrefix = require("./getImportPrefix"); +var compileExports = require("./compile-exports"); module.exports = function(content, map) { @@ -82,21 +82,11 @@ module.exports = function(content, map) { return "\" + require(" + loaderUtils.stringifyRequest(this, urlRequest) + ") + \""; }.bind(this)); - var exportJs = ""; - if(Object.keys(result.exports).length > 0) { - var boundImportItemMatcher = importItemMatcher.bind(this); - exportJs = Object.keys(result.exports).reduce(function(res, key) { - var valueAsString = JSON.stringify(result.exports[key]); - valueAsString = valueAsString.replace(result.importItemRegExpG, boundImportItemMatcher); - res.push("\t" + JSON.stringify(key) + ": " + valueAsString); - if (camelCaseKeys) { - res.push("\t" + JSON.stringify(camelCase(key)) + ": " + valueAsString); - } - return res; - }, []).join(",\n"); - exportJs = "exports.locals = {\n" + exportJs + "\n};"; - } + var exportJs = compileExports(result, importItemMatcher.bind(this), camelCaseKeys); + if (exportJs) { + exportJs = "exports.locals = " + exportJs; + } var moduleJs; if(query.sourceMap && result.map) { diff --git a/lib/localsLoader.js b/lib/localsLoader.js index babd4ec6..400f6acc 100644 --- a/lib/localsLoader.js +++ b/lib/localsLoader.js @@ -5,6 +5,7 @@ var loaderUtils = require("loader-utils"); var processCss = require("./processCss"); var getImportPrefix = require("./getImportPrefix"); +var compileExports = require("./compile-exports"); module.exports = function(content) { @@ -12,6 +13,7 @@ module.exports = function(content) { var callback = this.async(); var query = loaderUtils.parseQuery(this.query); var moduleMode = query.modules || query.module; + var camelCaseKeys = query.camelCase || query.camelcase; processCss(content, null, { mode: moduleMode ? "local" : "global", @@ -33,16 +35,12 @@ module.exports = function(content) { "[" + JSON.stringify(importItem.export) + "] + \""; } - var exportJs = ""; - if(Object.keys(result.exports).length > 0) { - exportJs = Object.keys(result.exports).map(function(key) { - var valueAsString = JSON.stringify(result.exports[key]); - valueAsString = valueAsString.replace(result.importItemRegExpG, importItemMatcher.bind(this)); - return "\t" + JSON.stringify(key) + ": " + valueAsString; - }.bind(this)).join(",\n"); - exportJs = "module.exports = {\n" + exportJs + "\n};"; + var exportJs = compileExports(result, importItemMatcher.bind(this), camelCaseKeys); + if (exportJs) { + exportJs = "module.exports = " + exportJs; } + callback(null, exportJs); }.bind(this)); };