Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: webpack_runner.js

Issue 29549786: Issue 5535 - Replace our module system with webpack (Closed)
Patch Set: Expose stats Object Created Oct. 3, 2017, 3:50 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« packagerChrome.py ('K') | « webpack.config.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webpack_runner.js
diff --git a/webpack.config.js b/webpack_runner.js
similarity index 55%
rename from webpack.config.js
rename to webpack_runner.js
index 3e061af1b2a4a25c60a261bd31ba91db127f05f5..39c75a40158384a6c0bca13282f11aad74b05ab0 100644
--- a/webpack.config.js
+++ b/webpack_runner.js
@@ -16,14 +16,60 @@
*/
const path = require("path");
+const process = require("process");
+
+const MemoryFS = require("memory-fs");
+const webpack = require("webpack");
let {EXTENSION_PATH, ENTRY_POINTS, OUTPUT_PATH, BUNDLE_NAME,
- RESOLVE_PATHS, INFO_PATH} = require("process").env;
+ RESOLVE_PATHS} = require("process").env;
+
+// Copied from adblockpluscore/test_runner.js
+function webpackInMemory(bundleFilename, options)
+{
+ return new Promise((resolve, reject) =>
+ {
+ // Based on this example
+ // https://webpack.js.org/api/node/#custom-file-systems
+ let memoryFS = new MemoryFS();
+
+ options.output = {filename: bundleFilename, path: "/"};
+ let webpackCompiler = webpack(options);
+ webpackCompiler.outputFileSystem = memoryFS;
-module.exports = {
+ webpackCompiler.run((err, stats) =>
+ {
+ // Error handling is based on this example
+ // https://webpack.js.org/api/node/#error-handling
+ if (err)
+ {
+ let reason = err.stack || err;
+ if (err.details)
+ reason += "\n" + err.details;
+ reject(reason);
+ }
+ else if (stats.hasErrors())
+ reject(stats.toJson().errors);
+ else
+ {
+ let bundle = memoryFS.readFileSync("/" + bundleFilename, "utf-8");
+ memoryFS.unlinkSync("/" + bundleFilename);
+ resolve([bundle, stats]);
+ }
+ });
+ });
+}
+
+webpackInMemory(BUNDLE_NAME, {
context: EXTENSION_PATH,
- devtool: "source-map",
+ devtool: "inline-source-map",
entry: ENTRY_POINTS.split(" "),
+ module: {
+ rules: [{
+ include: path.join(EXTENSION_PATH, "lib", "info.js"),
Wladimir Palant 2017/10/04 10:38:07 This looks like we are supposed to do require("./i
kzar 2017/10/04 13:13:25 I originally tried `test: /^info$/` but it turned
Wladimir Palant 2017/10/09 10:54:54 I tried this as well and it seems that module reso
kzar 2017/10/09 13:52:14 Cool idea, Done.
kzar 2017/10/10 13:51:04 I've just noticed a down-side to this approach, it
Wladimir Palant 2017/10/10 16:33:15 Well, if we really want it to show up as info.js w
kzar 2017/10/10 17:03:38 Done.
+ use: ["info-loader"]
+ }]
+ },
output: {
path: OUTPUT_PATH,
filename: BUNDLE_NAME
@@ -31,7 +77,6 @@ module.exports = {
resolve: {
modules: RESOLVE_PATHS.split(" "),
alias: {
- info$: INFO_PATH,
// Prevent builtin Node.js modules from being used instead of our own when
// the names clash. Once relative paths are used this won't be necessary.
url$: "url.js",
@@ -71,19 +116,23 @@ module.exports = {
}
]
},
- stats: {
- assets: false,
- children: false,
- chunks: false,
- errorDetails: true,
- errors: true,
- hash: false,
- modules: false,
- publicPath: false,
- reasons: false,
- source: false,
- timings: false,
- version: false,
- warnings: true
+ resolveLoader: {
+ modules: [path.resolve(__dirname)]
+ }
+}).then(
+ ([bundle, stats]) =>
+ {
+ console.log(bundle);
+ },
+ e =>
Wladimir Palant 2017/10/04 10:38:07 I prefer a separate .catch() callback, it makes co
kzar 2017/10/04 13:13:25 Done.
+ {
+ // I would prefer to simply leave the exception unhandled, since we want the
+ // script to end in that case. Unfortunatley though Node.js displays a
+ // deprecation warning if we do:
+ // "[DEP0018] DeprecationWarning: Unhandled promise rejections are
+ // deprecated. In the future, promise rejections that are not handled
+ // will terminate the Node.js process with a non-zero exit code."
Wladimir Palant 2017/10/04 10:38:07 Well, Node correctly objects to unhandled rejectio
kzar 2017/10/04 13:13:25 Done.
+ console.error(e.join("\n"));
+ process.exit(1);
}
-};
+);
« packagerChrome.py ('K') | « webpack.config.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld