mirror of https://github.com/webpack/webpack.git
bugfixes, css and style loader
This commit is contained in:
parent
b40a43f37b
commit
295be3d5bc
|
|
@ -183,10 +183,12 @@ The following loaders are included as optional dependencies:
|
|||
* `json` (default at `.json`): Loads file as JSON
|
||||
* `jade` (default at `.jade`): Loads jade template and returns a function
|
||||
* `coffee` (default at `.coffee`): Loads coffee-script like javascript
|
||||
* `css`: Loads css file with resolved imports
|
||||
* `style`: Adds result of javascript execution to DOM
|
||||
* `.css` defaults to `style!css` loader, so all css rules are added to DOM
|
||||
|
||||
TODO
|
||||
|
||||
* `css`: CSS rules are added to DOM on require
|
||||
* `less`, `sass`: like `css` but compiles
|
||||
|
||||
## TL;DR
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ function execLoaders(request, loaders, filenames, contents, options, callback) {
|
|||
},
|
||||
web: true,
|
||||
debug: options.debug,
|
||||
minimize: options.minimize,
|
||||
values: undefined,
|
||||
options: options
|
||||
};
|
||||
|
|
@ -108,7 +109,7 @@ function execLoaders(request, loaders, filenames, contents, options, callback) {
|
|||
if(!async)
|
||||
nextLoader(retVal === undefined ? new Error("loader did not return a value") : null, retVal);
|
||||
} catch(e) {
|
||||
callback(err);
|
||||
callback("Loader throwed exeception: " + e);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -75,13 +75,13 @@ function doResolve(context, identifier, options, type, callback) {
|
|||
options.paths = [];
|
||||
if(!options.alias)
|
||||
options.alias = {};
|
||||
var identifiers = identifier.split(/!/g);
|
||||
if(identifiers.length === 1) {
|
||||
var identifiers = identifier.replace(/^!|!$/g, "").replace(/!!/g, "!").split(/!/g);
|
||||
if(identifier.indexOf("!") === -1) {
|
||||
var resource = identifiers.pop();
|
||||
for(var i = 0; i < options.loaders.length; i++) {
|
||||
var line = options.loaders[i];
|
||||
if(line.test.test(resource)) {
|
||||
identifiers.push(line.loader);
|
||||
Array.prototype.push.apply(identifiers, line.loader.split(/!/g));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ module.exports = function(context, moduleName, options, callback) {
|
|||
options.resolve.loaders.push({test: /\.coffee$/, loader: "coffee"});
|
||||
options.resolve.loaders.push({test: /\.json$/, loader: "json"});
|
||||
options.resolve.loaders.push({test: /\.jade$/, loader: "jade"});
|
||||
options.resolve.loaders.push({test: /\.css$/, loader: "style!css"});
|
||||
buildDeps(context, moduleName, options, function(err, depTree) {
|
||||
if(err) {
|
||||
callback(err);
|
||||
|
|
|
|||
|
|
@ -8,14 +8,14 @@ module.exports = function(module, options) {
|
|||
var extensions = (options.resolve && options.resolve.extensions) || [".web.js", ".js"];
|
||||
var extensionsAccess = [];
|
||||
extensions.forEach(function(ext) {
|
||||
extensionsAccess.push("||map[name+\"");
|
||||
extensionsAccess.push(ext.replace(/\\/g, "\\\\").replace(/"/g, "\\\""));
|
||||
extensionsAccess.push("\"]");
|
||||
extensionsAccess.push("map[name+\"" +
|
||||
ext.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") +
|
||||
"\"]");
|
||||
});
|
||||
|
||||
return "/***/module.exports = function(name) {\n" +
|
||||
"/***/\tvar map = " + JSON.stringify(module.requireMap) + ";\n" +
|
||||
"/***/\treturn require(map[name]" + extensionsAccess.join("") + "||name);\n" +
|
||||
"/***/\treturn require(" + extensionsAccess.join("||") + "||name);\n" +
|
||||
"/***/};";
|
||||
}
|
||||
return;
|
||||
|
|
@ -171,7 +171,7 @@ module.exports = function(module, options) {
|
|||
result = ["eval(", JSON.stringify(result.join("")), ")"];
|
||||
}
|
||||
result.unshift.apply(result, modulePrepends.reverse());
|
||||
result.push.apply(result, moduleAppends);
|
||||
result.push.apply(result, moduleAppends);
|
||||
return result.join("");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,9 @@
|
|||
"raw-loader": "0.1.x",
|
||||
"json-loader": "0.1.x",
|
||||
"jade-loader": "0.1.x",
|
||||
"coffee-loader": "0.1.x"
|
||||
"coffee-loader": "0.1.x",
|
||||
"css-loader": "0.1.x",
|
||||
"style-loader": "0.1.x"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ module.exports = function(req) {
|
|||
var oldReq = req;
|
||||
req = function(name) {
|
||||
if(name.indexOf("!") !== -1) {
|
||||
var items = name.split(/!/g);
|
||||
var items = name.replace(/^!|!$/g, "").replace(/!!/g, "!").split(/!/g);
|
||||
var resource = oldReq.resolve(items.pop());
|
||||
var resolved = [];
|
||||
items.forEach(function(item, index) {
|
||||
|
|
@ -30,7 +30,7 @@ module.exports = function(req) {
|
|||
relative = true;
|
||||
var tries = [];
|
||||
if(!relative) {
|
||||
postfixes.forEach(function(postfix) {
|
||||
module.exports.options.resolve.loaderPostfixes.forEach(function(postfix) {
|
||||
if(item.indexOf("/") !== -1)
|
||||
tries.push(item.replace("/", postfix+"/"));
|
||||
else
|
||||
|
|
@ -38,6 +38,7 @@ module.exports = function(req) {
|
|||
});
|
||||
}
|
||||
tries.push(item);
|
||||
var extensions = module.exports.options.resolve.loaderExtensions;
|
||||
for(var i = 0; i < tries.length; i++) {
|
||||
for(var ext = 0; ext < extensions.length; ext++) {
|
||||
try {
|
||||
|
|
@ -80,6 +81,10 @@ module.exports = function(req) {
|
|||
err = content.shift();
|
||||
values = context.values;
|
||||
},
|
||||
options: module.exports.options,
|
||||
minimize: module.exports.options.minimize,
|
||||
debug: module.exports.options.debug,
|
||||
web: false,
|
||||
inputValues: values,
|
||||
values: undefined
|
||||
};
|
||||
|
|
@ -94,8 +99,16 @@ module.exports = function(req) {
|
|||
if(values !== undefined)
|
||||
return values[0];
|
||||
return exec(content[0], cacheLine);
|
||||
} else
|
||||
} else {
|
||||
var resolved = oldReq.resolve(name);
|
||||
var match = false;
|
||||
var loaders = module.exports.resolve.loaders;
|
||||
for(var i = 0; i < loaders.length; i++)
|
||||
if(loaders[i].test.test(resolved))
|
||||
return req(loader.loader + "!" + name);
|
||||
|
||||
return oldReq(name);
|
||||
}
|
||||
};
|
||||
req.__proto__ = oldReq;
|
||||
req.webpackPolyfill = true;
|
||||
|
|
@ -114,5 +127,15 @@ module.exports = function(req) {
|
|||
}
|
||||
return req;
|
||||
}
|
||||
var extensions = [".webpack-loader.js", ".loader.js", ".js", ""];
|
||||
var postfixes = ["-webpack-loader", "-loader", ""]
|
||||
var options = module.exports.options = {
|
||||
resolve: {
|
||||
loaders: [
|
||||
{test: /\.coffee$/, loader: "coffee"},
|
||||
// {test: /\.json$/, loader: "json"}, // This works out of the box in node.js
|
||||
{test: /\.jade$/, loader: "jade"},
|
||||
{test: /\.css$/, loader: "style!css"}
|
||||
],
|
||||
loaderExtensions: [".webpack-loader.js", ".loader.js", ".js", ""],
|
||||
loaderPostfixes: ["-webpack-loader", "-loader", ""]
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
@import url(./stylesheet-import2.css);
|
||||
|
||||
.rule-import1 {
|
||||
background: green;
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
.rule-import2 {
|
||||
background: green;
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
@import url(./stylesheet-import1.css);
|
||||
|
||||
.rule-direct {
|
||||
background: green;
|
||||
}
|
||||
|
|
@ -121,6 +121,11 @@ window.test(require("json!../../../package.json").name === "webpack", "Buildin '
|
|||
window.test(require("../../../package.json").name === "webpack", "Buildin 'json' loader, by ext");
|
||||
window.test(require("coffee!../resources/script.coffee") === "coffee test", "Buildin 'coffee' loader");
|
||||
window.test(require("../resources/script.coffee") === "coffee test", "Buildin 'coffee' loader, by ext");
|
||||
window.test(require("css!../css/stylesheet.css").indexOf(".rule-direct") !== -1, "Buildin 'css' loader, direct content");
|
||||
window.test(require("css!../css/stylesheet.css").indexOf(".rule-import1") !== -1, "Buildin 'css' loader, imported rule");
|
||||
window.test(require("css!../css/stylesheet.css").indexOf(".rule-import2") !== -1, "Buildin 'css' loader, double imported rule");
|
||||
// Buildin 'style' loader adds css to document
|
||||
require("../css/stylesheet.css");
|
||||
|
||||
// Loader & Context
|
||||
var abc = "abc", scr = "script.coffee";
|
||||
|
|
|
|||
|
|
@ -23,9 +23,18 @@
|
|||
};
|
||||
window.writing = false;
|
||||
</script>
|
||||
<style>
|
||||
span {
|
||||
background: red;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<p>
|
||||
<span class="rule-direct">Buildin 'style' loader, direct content</span>
|
||||
<span class="rule-import1">Buildin 'style' loader, imported rule</span>
|
||||
<span class="rule-import2">Buildin 'style' loader, double imported rule</span>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue