Skip to content

Commit b820f90

Browse files
author
huange
committed
feat: add exclude option
1 parent 43179a8 commit b820f90

File tree

1 file changed

+41
-19
lines changed

1 file changed

+41
-19
lines changed

lib/loader.js

+41-19
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ var getImportPrefix = require("./getImportPrefix");
88
var compileExports = require("./compile-exports");
99

1010

11-
module.exports = function(content, map) {
11+
module.exports = function (content, map) {
1212
var callback = this.async();
1313
var query = loaderUtils.getOptions(this) || {};
1414
var moduleMode = query.modules;
1515
var camelCaseKeys = query.camelCase;
1616
var sourceMap = query.sourceMap || false;
17+
var exclude = query.exclude;
18+
var from = loaderUtils.getRemainingRequest(this).split("!").pop();
19+
var to = loaderUtils.getCurrentRequest(this).split("!").pop();
1720

18-
if(sourceMap) {
21+
if (sourceMap) {
1922
if (map) {
2023
if (typeof map === "string") {
2124
map = JSON.stringify(map);
@@ -33,31 +36,50 @@ module.exports = function(content, map) {
3336
map = null;
3437
}
3538

39+
function isExclude(path) {
40+
if (from.indexOf(path) === 0) {
41+
return true;
42+
}
43+
return false;
44+
}
45+
46+
if (Array.isArray(exclude)) {
47+
exclude.forEach(function (p) {
48+
if (isExclude(p)) {
49+
moduleMode = false;
50+
}
51+
});
52+
} else if (typeof exclude === 'string') {
53+
if (isExclude(exclude)) {
54+
moduleMode = false;
55+
}
56+
}
57+
3658
processCss(content, map, {
3759
mode: moduleMode ? "local" : "global",
38-
from: loaderUtils.getRemainingRequest(this).split("!").pop(),
39-
to: loaderUtils.getCurrentRequest(this).split("!").pop(),
60+
from: from,
61+
to: to,
4062
query: query,
4163
loaderContext: this,
4264
sourceMap: sourceMap
43-
}, function(err, result) {
44-
if(err) return callback(err);
65+
}, function (err, result) {
66+
if (err) return callback(err);
4567

4668
var cssAsString = JSON.stringify(result.source);
4769

4870
// for importing CSS
4971
var importUrlPrefix = getImportPrefix(this, query);
5072

5173
var alreadyImported = {};
52-
var importJs = result.importItems.filter(function(imp) {
53-
if(!imp.mediaQuery) {
54-
if(alreadyImported[imp.url])
74+
var importJs = result.importItems.filter(function (imp) {
75+
if (!imp.mediaQuery) {
76+
if (alreadyImported[imp.url])
5577
return false;
5678
alreadyImported[imp.url] = true;
5779
}
5880
return true;
59-
}).map(function(imp) {
60-
if(!loaderUtils.isUrlRequest(imp.url)) {
81+
}).map(function (imp) {
82+
if (!loaderUtils.isUrlRequest(imp.url)) {
6183
return "exports.push([module.id, " +
6284
JSON.stringify("@import url(" + imp.url + ");") + ", " +
6385
JSON.stringify(imp.mediaQuery) + "]);";
@@ -81,22 +103,22 @@ module.exports = function(content, map) {
81103
// helper for ensuring valid CSS strings from requires
82104
var urlEscapeHelper = "";
83105

84-
if(query.url !== false && result.urlItems.length > 0) {
106+
if (query.url !== false && result.urlItems.length > 0) {
85107
urlEscapeHelper = "var escape = require(" + loaderUtils.stringifyRequest(this, require.resolve("./url/escape.js")) + ");\n";
86108

87-
cssAsString = cssAsString.replace(result.urlItemRegExpG, function(item) {
109+
cssAsString = cssAsString.replace(result.urlItemRegExpG, function (item) {
88110
var match = result.urlItemRegExp.exec(item);
89111
var idx = +match[1];
90112
var urlItem = result.urlItems[idx];
91113
var url = urlItem.url;
92114
idx = url.indexOf("?#");
93-
if(idx < 0) idx = url.indexOf("#");
115+
if (idx < 0) idx = url.indexOf("#");
94116
var urlRequest;
95-
if(idx > 0) { // idx === 0 is catched by isUrlRequest
117+
if (idx > 0) { // idx === 0 is catched by isUrlRequest
96118
// in cases like url('webfont.eot?#iefix')
97119
urlRequest = url.substr(0, idx);
98120
return "\" + escape(require(" + loaderUtils.stringifyRequest(this, urlRequest) + ")) + \"" +
99-
url.substr(idx);
121+
url.substr(idx);
100122
}
101123
urlRequest = url;
102124
return "\" + escape(require(" + loaderUtils.stringifyRequest(this, urlRequest) + ")) + \"";
@@ -109,11 +131,11 @@ module.exports = function(content, map) {
109131
}
110132

111133
var moduleJs;
112-
if(sourceMap && result.map) {
134+
if (sourceMap && result.map) {
113135
// add a SourceMap
114136
map = result.map;
115-
if(map.sources) {
116-
map.sources = map.sources.map(function(source) {
137+
if (map.sources) {
138+
map.sources = map.sources.map(function (source) {
117139
return source.split("!").pop().replace(/\\/g, '/');
118140
}, this);
119141
map.sourceRoot = "";

0 commit comments

Comments
 (0)