|
| 1 | +# example.js |
| 2 | + |
| 3 | +``` javascript |
| 4 | +// Polyfill require for node.js usage of loaders |
| 5 | +require = require("../../require-polyfill")(require.valueOf()); |
| 6 | + |
| 7 | +// use our loader |
| 8 | +console.dir(require("./loader!./file")); |
| 9 | + |
| 10 | +// use buildin json loader |
| 11 | +console.dir(require("./test.json")); // default by extension |
| 12 | +console.dir(require("json!./test.json")); // manual |
| 13 | +``` |
| 14 | + |
| 15 | +# file.js |
| 16 | + |
| 17 | +``` javascript |
| 18 | +exports.foo = "bar"; |
| 19 | +``` |
| 20 | + |
| 21 | +# loader.js |
| 22 | + |
| 23 | +``` javascript |
| 24 | +module.exports = function(contents, options, callback) { |
| 25 | + |
| 26 | + if(contents.length !== 1) |
| 27 | + throw new Error("loader takes exactly one file as parameter"); |
| 28 | + |
| 29 | + if(callback) { |
| 30 | + // compile for web |
| 31 | + callback(null /* no error */, |
| 32 | + "exports.answer = 42;\n" + |
| 33 | + contents[0]); |
| 34 | + } else { |
| 35 | + // execute for node.js |
| 36 | + var Module = require("module"); |
| 37 | + var m = new Module(options.request); |
| 38 | + m.exports.answer = 42; |
| 39 | + m._compile(contents[0], options.filename); |
| 40 | + return m.exports; |
| 41 | + } |
| 42 | + |
| 43 | +} |
| 44 | +``` |
| 45 | + |
| 46 | +# test.json |
| 47 | + |
| 48 | +``` javascript |
| 49 | +{ |
| 50 | + "foobar": 1234 |
| 51 | +} |
| 52 | +``` |
| 53 | + |
| 54 | +# js/output.js |
| 55 | + |
| 56 | +``` javascript |
| 57 | +/******/(function(modules) { |
| 58 | +/******/ var installedModules = {}; |
| 59 | +/******/ function require(moduleId) { |
| 60 | +/******/ if(typeof moduleId !== "number") throw new Error("Cannot find module '"+moduleId+"'"); |
| 61 | +/******/ if(installedModules[moduleId]) |
| 62 | +/******/ return installedModules[moduleId].exports; |
| 63 | +/******/ var module = installedModules[moduleId] = { |
| 64 | +/******/ exports: {} |
| 65 | +/******/ }; |
| 66 | +/******/ modules[moduleId](module, module.exports, require); |
| 67 | +/******/ return module.exports; |
| 68 | +/******/ } |
| 69 | +/******/ require.ensure = function(chunkId, callback) { |
| 70 | +/******/ callback(require); |
| 71 | +/******/ }; |
| 72 | +/******/ return require(0); |
| 73 | +/******/}) |
| 74 | +/******/({ |
| 75 | +/******/0: function(module, exports, require) { |
| 76 | + |
| 77 | +// Polyfill require for node.js usage of loaders |
| 78 | +require = require(/* ../../require-polyfill */3)(require.valueOf()); |
| 79 | + |
| 80 | +// use our loader |
| 81 | +require(/* __webpack_console */1).dir(require(/* ./loader!./file */2)); |
| 82 | + |
| 83 | +// use buildin json loader |
| 84 | +require(/* __webpack_console */1).dir(require(/* ./test.json */4)); // default by extension |
| 85 | +require(/* __webpack_console */1).dir(require(/* json!./test.json */4)); // manual |
| 86 | + |
| 87 | +/******/}, |
| 88 | +/******/ |
| 89 | +/******/1: function(module, exports, require) { |
| 90 | + |
| 91 | +var console = window.console; |
| 92 | +exports.log = (console && console.log) || function() {}; |
| 93 | +exports.info = (console && console.info) || function() {}; |
| 94 | +exports.error = (console && console.error) || function() {}; |
| 95 | +exports.warn = (console && console.warn) || function() {}; |
| 96 | +exports.dir = (console && console.dir) || function() {}; |
| 97 | +exports.time = (console && console.time) || function(label) { |
| 98 | + times[label] = Date.now(); |
| 99 | +}; |
| 100 | +exports.timeEnd = (console && console.timeEnd) || function() { |
| 101 | + var duration = Date.now() - times[label]; |
| 102 | + exports.log('%s: %dms', label, duration); |
| 103 | +}; |
| 104 | +exports.trace = (console && console.trace) || function() {}; |
| 105 | +exports.assert = (console && console.assert) || function() {}; |
| 106 | + |
| 107 | +/******/}, |
| 108 | +/******/ |
| 109 | +/******/2: function(module, exports, require) { |
| 110 | + |
| 111 | +exports.answer = 42; |
| 112 | +exports.foo = "bar"; |
| 113 | + |
| 114 | +/******/}, |
| 115 | +/******/ |
| 116 | +/******/3: function(module, exports, require) { |
| 117 | + |
| 118 | +// No polyfill needed when compiled with webpack |
| 119 | +module.exports = function(r){return r} |
| 120 | + |
| 121 | +/******/}, |
| 122 | +/******/ |
| 123 | +/******/4: function(module, exports, require) { |
| 124 | + |
| 125 | +module.exports = {"foobar":1234} |
| 126 | + |
| 127 | +/******/}, |
| 128 | +/******/ |
| 129 | +/******/}) |
| 130 | +``` |
| 131 | + |
| 132 | +# Info |
| 133 | + |
| 134 | +## Uncompressed |
| 135 | + |
| 136 | +``` |
| 137 | +Chunks: 1 |
| 138 | +Modules: 5 |
| 139 | +Modules including duplicates: 5 |
| 140 | +Modules pre chunk: 5 |
| 141 | +Modules first chunk: 5 |
| 142 | + output.js: 2279 characters |
| 143 | +output.js |
| 144 | + 0 [...]\examples\loader\example.js |
| 145 | + main |
| 146 | + 1 [...]\buildin\__webpack_console.js |
| 147 | + require (3x) from [...]\examples\loader\example.js |
| 148 | + 2 [...]\examples\loader\loader.js![...]\examples\loader\file.js |
| 149 | + require (1x) from [...]\examples\loader\example.js |
| 150 | + 3 [...]\require-polyfill.web.js |
| 151 | + require (1x) from [...]\examples\loader\example.js |
| 152 | + 4 [...]\node_modules\json-loader.js![...]\examples\loader\test.json |
| 153 | + require (1x) from [...]\examples\loader\example.js |
| 154 | + require (1x) from [...]\examples\loader\example.js |
| 155 | +``` |
0 commit comments