Skip to content

Commit 577d87d

Browse files
committed
Fixes requirejs#136, write out package config'ed modules correctly
so that it works in both require.js and almond situations, which do not know of package config.
1 parent d26f3ef commit 577d87d

File tree

11 files changed

+131
-2
lines changed

11 files changed

+131
-2
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ build/tests/lib/nestedHas/main-builtNeedD.js
3232
build/tests/lib/nestedHas/main-builtNested.js
3333
build/tests/lib/onBuildRead/main-built.js
3434
build/tests/lib/onBuildWrite/main-built.js
35+
build/tests/lib/packages/main-built.js
3536
build/tests/lib/pathsNoCopy/js-built
3637
build/tests/lib/plugins/main-built.js
3738
build/tests/lib/plugins/main-builtPluginFirst.js

build/jslib/build.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,7 @@ function (lang, logger, file, parse, optimize, pragma,
10901090
stubModulesByName = (config.stubModules && config.stubModules._byName) || {},
10911091
context = layer.context,
10921092
path, reqIndex, fileContents, currContents,
1093-
i, moduleName, shim,
1093+
i, moduleName, shim, packageConfig,
10941094
parts, builder, writeApi;
10951095

10961096
//Use override settings, particularly for pragmas
@@ -1119,6 +1119,14 @@ function (lang, logger, file, parse, optimize, pragma,
11191119
path = layer.buildFilePaths[i];
11201120
moduleName = layer.buildFileToModule[path];
11211121

1122+
//If the moduleName is for a package main, then update it to the
1123+
//real main value.
1124+
packageConfig = layer.context.config.pkgs &&
1125+
layer.context.config.pkgs[moduleName];
1126+
if (packageConfig) {
1127+
moduleName += '/' + packageConfig.main;
1128+
}
1129+
11221130
//Figure out if the module is a result of a build plugin, and if so,
11231131
//then delegate to that plugin.
11241132
parts = context.makeModuleMap(moduleName);
@@ -1167,6 +1175,13 @@ function (lang, logger, file, parse, optimize, pragma,
11671175

11681176
currContents = build.toTransport(namespace, moduleName, path, currContents, layer);
11691177

1178+
if (packageConfig) {
1179+
currContents = addSemiColon(currContents) + '\n';
1180+
currContents += namespaceWithDot + "define('" +
1181+
packageConfig.name + "', ['" + moduleName +
1182+
"'], function (main) { return main; });\n";
1183+
}
1184+
11701185
if (config.onBuildWrite) {
11711186
currContents = config.onBuildWrite(moduleName, path, currContents);
11721187
}

build/tests/builds.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,4 +1151,25 @@ define(['build', 'env!env/file'], function (build, file) {
11511151
);
11521152
doh.run();
11531153

1154+
//Confirm package config builds correctly so that it works in both
1155+
//require.js and almond, which does not know about package config.
1156+
//https://github.com/jrburke/r.js/issues/136
1157+
doh.register("packages",
1158+
[
1159+
function packages(t) {
1160+
file.deleteFile("lib/packages/main-built.js");
1161+
1162+
build(["lib/packages/build.js"]);
1163+
1164+
t.is(nol(c("lib/packages/expected.js")),
1165+
nol(c("lib/packages/main-built.js")));
1166+
1167+
require._buildReset();
1168+
}
1169+
1170+
]
1171+
);
1172+
doh.run();
1173+
1174+
11541175
});

build/tests/lib/dotpackage/scripts/main-expected.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11

2-
define('sample',{
2+
define('sample/main',{
33
name: 'sample'
44
});
55

66

7+
define('sample', ['sample/main'], function (main) { return main; });
8+
79
define('main',['sample'], function (sample) {
810
return {
911
name: 'main',

build/tests/lib/packages/almond.html

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<script src="../../../../../almond/almond.js"></script>
5+
<script src="main-built.js"></script>
6+
<script>
7+
require(['foo'], function (foo) {
8+
console.log('foo === ' + foo.name);
9+
console.log('util === ' + foo.util.name);
10+
});
11+
require(['foo/main'], function (foo) {
12+
console.log('foo === ' + foo.name);
13+
console.log('util === ' + foo.util.name);
14+
});
15+
</script>
16+
</head>
17+
<body>
18+
<h1>Hello World</h1>
19+
</body>
20+
</html>

build/tests/lib/packages/build.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
mainConfigFile: 'main.js',
3+
name: 'main',
4+
out: 'main-built.js',
5+
optimize: 'none'
6+
}

build/tests/lib/packages/expected.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
define('foo/util',{
3+
name: 'util'
4+
});
5+
6+
define('foo/main',['./util'], function (util) {
7+
return {
8+
name: 'foo',
9+
util: util
10+
};
11+
});
12+
13+
define('foo', ['foo/main'], function (main) { return main; });
14+
15+
requirejs.config({
16+
packages: [
17+
{
18+
name: 'foo',
19+
main: 'main'
20+
}
21+
]
22+
});
23+
24+
define('main',['foo'], function (foo) {
25+
return foo;
26+
});

build/tests/lib/packages/foo/main.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
define(['./util'], function (util) {
2+
return {
3+
name: 'foo',
4+
util: util
5+
};
6+
});

build/tests/lib/packages/foo/util.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
define({
2+
name: 'util'
3+
});

build/tests/lib/packages/main.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
requirejs.config({
2+
packages: [
3+
{
4+
name: 'foo',
5+
main: 'main'
6+
}
7+
]
8+
});
9+
10+
define(['foo'], function (foo) {
11+
return foo;
12+
});

0 commit comments

Comments
 (0)