Skip to content

Commit efb2dd4

Browse files
committed
choose defaults by target
browser field is on by default, fixes webpack#151
1 parent 78810b9 commit efb2dd4

File tree

3 files changed

+84
-14
lines changed

3 files changed

+84
-14
lines changed

lib/WebpackOptionsApply.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ var ModuleAsDirectoryPlugin = require("enhanced-resolve/lib/ModuleAsDirectoryPlu
4343
var ModuleAliasPlugin = require("enhanced-resolve/lib/ModuleAliasPlugin");
4444
var DirectoryDefaultFilePlugin = require("enhanced-resolve/lib/DirectoryDefaultFilePlugin");
4545
var DirectoryDescriptionFilePlugin = require("enhanced-resolve/lib/DirectoryDescriptionFilePlugin");
46+
var DirectoryDescriptionFileFieldAliasPlugin = require("enhanced-resolve/lib/DirectoryDescriptionFileFieldAliasPlugin");
4647
var FileAppendPlugin = require("enhanced-resolve/lib/FileAppendPlugin");
4748
var DirectoryResultPlugin = require("enhanced-resolve/lib/DirectoryResultPlugin");
4849

lib/WebpackOptionsDefaulter.js

Lines changed: 69 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,80 @@ function WebpackOptionsDefaulter() {
3636
this.set("resolve.fastUnsafe", []);
3737
this.set("resolveLoader.fastUnsafe", []);
3838

39-
this.set("resolve.modulesDirectories", ["web_modules", "node_modules"]);
40-
this.set("resolveLoader.modulesDirectories", ["web_loaders", "web_modules", "node_loaders", "node_modules"]);
41-
42-
this.set("resolveLoader.moduleTemplates", ["*-webpack-loader", "*-web-loader", "*-loader", "*"]);
43-
4439
this.set("resolve.alias", {});
4540
this.set("resolveLoader.alias", {});
4641

47-
this.set("resolve.extensions", ["", ".webpack.js", ".web.js", ".js"]);
48-
this.set("resolveLoader.extensions", ["", ".webpack-loader.js", ".web-loader.js", ".loader.js", ".js"]);
49-
50-
this.set("resolve.packageMains", ["webpack", "browser", "web", "browserify", ["jam", "main"], "main"]);
51-
this.set("resolveLoader.packageMains", ["webpackLoader", "webLoader", "loader", "main"]);
52-
53-
this.set("resolve.packageAlias", false);
54-
5542
this.set("optimize.occurenceOrderPreferEntry", true);
5643
}
5744
module.exports = WebpackOptionsDefaulter;
5845

5946
WebpackOptionsDefaulter.prototype = Object.create(OptionsDefaulter.prototype);
47+
48+
WebpackOptionsDefaulter.prototype.constructor = WebpackOptionsDefaulter;
49+
50+
WebpackOptionsDefaulter.prototype.process = function(options) {
51+
OptionsDefaulter.prototype.process.call(this, options);
52+
53+
if(options.resolve.packageAlias === undefined) {
54+
if(options.target === "web" || options.target === "webworker")
55+
options.resolve.packageAlias = "browser";
56+
}
57+
58+
function defaultByTarget(value, web, webworker, node, def) {
59+
if(value !== undefined) return value;
60+
switch(options.target) {
61+
case "web": return web;
62+
case "webworker": return webworker;
63+
case "node": case "async-node": return node;
64+
default: return def;
65+
}
66+
}
67+
68+
options.resolve.modulesDirectories = defaultByTarget(options.resolve.modulesDirectories,
69+
["web_modules", "node_modules"],
70+
["webworker_modules", "web_modules", "node_modules"],
71+
["node_modules"],
72+
["node_modules"]);
73+
74+
options.resolveLoader.modulesDirectories = defaultByTarget(options.resolveLoader.modulesDirectories,
75+
["web_loaders", "web_modules", "node_loaders", "node_modules"],
76+
["webworker_loaders", "web_loaders", "web_modules", "node_loaders", "node_modules"],
77+
["node_loaders", "node_modules"],
78+
["node_modules"]);
79+
80+
options.resolve.packageMains = defaultByTarget(options.resolve.packageMains,
81+
["webpack", "browser", "web", "browserify", ["jam", "main"], "main"],
82+
["webpackWorker", "webworker", "webpack", "browser", "web", "browserify", ["jam", "main"], "main"],
83+
["webpackNode", "node", "main"],
84+
["main"]);
85+
86+
options.resolve.packageAlias = defaultByTarget(options.resolve.packageAlias,
87+
"browser",
88+
"browser",
89+
false,
90+
false);
91+
92+
options.resolveLoader.packageMains = defaultByTarget(options.resolveLoader.packageMains,
93+
["webpackLoader", "webLoader", "loader", "main"],
94+
["webpackWorkerLoader", "webworkerLoader", "webLoader", "loader", "main"],
95+
["webpackNodeLoader", "nodeLoader", "loader", "main"],
96+
["loader", "main"]);
97+
98+
options.resolve.extensions = defaultByTarget(options.resolve.extensions,
99+
["", ".webpack.js", ".web.js", ".js"],
100+
["", ".webpack-worker.js", ".webworker.js", ".web.js", ".js"],
101+
["", ".webpack-node.js", ".js", ".node"],
102+
["", ".js"]);
103+
104+
options.resolveLoader.extensions = defaultByTarget(options.resolveLoader.extensions,
105+
["", ".webpack-loader.js", ".web-loader.js", ".loader.js", ".js"],
106+
["", ".webpack-worker-loader.js", ".webpack-loader.js", ".webworker-loader.js", ".web-loader.js", ".loader.js", ".js"],
107+
["", ".webpack-node-loader.js", ".loader.js", ".js"],
108+
["", ".js"]);
109+
110+
options.resolveLoader.moduleTemplates = defaultByTarget(options.resolveLoader.moduleTemplates,
111+
["*-webpack-loader", "*-web-loader", "*-loader", "*"],
112+
["*-webpack-worker-loader", "*-webworker-loader", "*-web-loader", "*-loader", "*"],
113+
["*-webpack-node-loader", "*-node-loader", "*-loader", "*"],
114+
["*-loader", "*"]);
115+
};

test/TestCases.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,17 @@ describe("TestCases", function() {
6464
path: outputDirectory,
6565
filename: "bundle.js"
6666
},
67+
resolve: {
68+
modulesDirectories: ["web_modules", "node_modules"],
69+
packageMains: ["webpack", "browser", "web", "browserify", ["jam", "main"], "main"],
70+
extensions: ["", ".webpack.js", ".web.js", ".js"],
71+
packageAlias: "browser"
72+
},
73+
resolveLoader: {
74+
modulesDirectories: ["web_loaders", "web_modules", "node_loaders", "node_modules"],
75+
packageMains: ["webpackLoader", "webLoader", "loader", "main"],
76+
extensions: ["", ".webpack-loader.js", ".web-loader.js", ".loader.js", ".js"]
77+
},
6778
module: {
6879
loaders: [
6980
{ test: /\.json$/, loader: "json" },
@@ -77,7 +88,9 @@ describe("TestCases", function() {
7788
};
7889
webpack(options, function(err, stats) {
7990
if(err) return done(err);
80-
var jsonStats = stats.toJson();
91+
var jsonStats = stats.toJson({
92+
errorDetails: true
93+
});
8194
if(checkArrayExpectation(testDirectory, jsonStats, "error", "Error", done)) return;
8295
if(checkArrayExpectation(testDirectory, jsonStats, "warning", "Warning", done)) return;
8396
var exportedTest = 0;

0 commit comments

Comments
 (0)