3.6 KiB
3.6 KiB
example.js
// Polyfill require for node.js usage of loaders
require = require("../../require-polyfill")(require.valueOf());
// use our loader
console.dir(require("./loader!./file"));
// use buildin json loader
console.dir(require("./test.json")); // default by extension
console.dir(require("json!./test.json")); // manual
file.js
exports.foo = "bar";
loader.js
module.exports = function(contents, options, callback) {
if(contents.length !== 1)
throw new Error("loader takes exactly one file as parameter");
if(callback) {
// compile for web
callback(null /* no error */,
"exports.answer = 42;\n" +
contents[0]);
} else {
// execute for node.js
var Module = require("module");
var m = new Module(options.request);
m.exports.answer = 42;
m._compile(contents[0], options.filename);
return m.exports;
}
}
test.json
{
"foobar": 1234
}
js/output.js
/******/(function(modules) {
/******/ var installedModules = {};
/******/ function require(moduleId) {
/******/ if(typeof moduleId !== "number") throw new Error("Cannot find module '"+moduleId+"'");
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ var module = installedModules[moduleId] = {
/******/ exports: {}
/******/ };
/******/ modules[moduleId](module, module.exports, require);
/******/ return module.exports;
/******/ }
/******/ require.ensure = function(chunkId, callback) {
/******/ callback(require);
/******/ };
/******/ return require(0);
/******/})
/******/({
/******/0: function(module, exports, require) {
/******/ /* WEBPACK FREE VAR INJECTION */ (function(console) {
// Polyfill require for node.js usage of loaders
require = require(/* ../../require-polyfill */1)(require.valueOf());
// use our loader
console.dir(require(/* ./loader!./file */3));
// use buildin json loader
console.dir(require(/* ./test.json */4)); // default by extension
console.dir(require(/* json!./test.json */4)); // manual
/******/ /* WEBPACK FREE VAR INJECTION */ }(require(/* __webpack_console */2)))
/******/},
/******/
/******/1: function(module, exports, require) {
// No polyfill needed when compiled with webpack
module.exports = function(r){return r}
/******/},
/******/
/******/2: function(module, exports, require) {
var console = window.console;
module.exports = console;
for(var name in {log:1, info:1, error:1, warn:1, dir:1, trace:1, assert:1})
if(!console[name])
console[name] = function() {};
if(!console.time)
console.time = function(label) {
times[label] = Date.now();
};
if(!console.timeEnd)
console.timeEnd = function() {
var duration = Date.now() - times[label];
console.log('%s: %dms', label, duration);
};
/******/},
/******/
/******/3: function(module, exports, require) {
/******/},
/******/
/******/4: function(module, exports, require) {
module.exports = {
"foobar": 1234
}
/******/},
/******/
/******/})
Console output
Prints in node.js (node example.js
) and in browser:
{ answer: 42, foo: 'bar' }
{ foobar: 1234 }
{ foobar: 1234 }
Info
Uncompressed
Chunks: 1
Modules: 5
Modules including duplicates: 5
Modules pre chunk: 5
Modules first chunk: 5
output.js: 2048 characters
output.js
0 .\example.js
main
1 (webpack)\require-polyfill.web.js
require (1x) from .\example.js
2 (webpack)\buildin\__webpack_console.js
require (3x) from .\example.js
3 .\loader.js!.\file.js
require (1x) from .\example.js
4 (webpack)\node_modules\json-loader\index.js!.\test.json
require (1x) from .\example.js
require (1x) from .\example.js