Skip to content

Commit 1163381

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2318: module-deps.js doesn't respect the package.json module field
1 parent 5ee5f3f commit 1163381

File tree

6 files changed

+66
-20
lines changed

6 files changed

+66
-20
lines changed

appveyor.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
image: Visual Studio 2017
2+
13
environment:
24
nodejs_version: "6"
35

src/main/cljs/cljs/module_deps.js

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,35 @@
1+
var fs = require('fs');
12
var path = require('path');
23
var mdeps = require('@cljs-oss/module-deps');
34
var nodeResolve = require('resolve');
4-
var browserResolve = require('browser-resolve');
55
var konan = require('konan');
6+
var enhancedResolve = require('enhanced-resolve');
67

78
var target = 'CLJS_TARGET';
8-
var filename = path.resolve(__dirname, 'JS_FILE');
9-
var resolver = target === 'nodejs' ? nodeResolve : browserResolve;
9+
var filename = fs.realpathSync(path.resolve(__dirname, 'JS_FILE'));
10+
var mainFields =
11+
target === 'nodejs' ? ['module', 'main'] : ['module', 'browser', 'main'];
12+
13+
var resolver = enhancedResolve.create({
14+
fileSystem: new enhancedResolve.CachedInputFileSystem(
15+
new enhancedResolve.NodeJsInputFileSystem(),
16+
4000
17+
),
18+
extensions: ['.js', '.json'],
19+
mainFields: mainFields,
20+
moduleExtensions: ['.js', '.json'],
21+
});
1022

1123
var md = mdeps({
1224
resolve: function(id, parentOpts, cb) {
1325
// set the basedir properly so we don't try to resolve requires in the Closure
1426
// Compiler processed `node_modules` folder.
1527
parentOpts.basedir =
16-
parentOpts.filename === filename ? __dirname : path.dirname(parentOpts.filename);
17-
parentOpts.extensions = ['.js', '.json'];
28+
parentOpts.filename === filename
29+
? path.resolve(__dirname)
30+
: path.dirname(parentOpts.filename);
1831

19-
resolver(id, parentOpts, cb);
32+
resolver(parentOpts.basedir, id, cb);
2033
},
2134
filter: function(id) {
2235
return !(target === 'nodejs' && nodeResolve.isCore(id));
@@ -28,6 +41,17 @@ var md = mdeps({
2841
},
2942
});
3043

44+
function getPackageJsonMainEntry(pkgJson) {
45+
for (var i = 0; i < mainFields.length; i++) {
46+
var entry = mainFields[i];
47+
48+
if (pkgJson[entry] != null) {
49+
return pkgJson[entry];
50+
}
51+
}
52+
return null;
53+
}
54+
3155
var pkgJsons = [];
3256
var deps_files = {};
3357

@@ -42,8 +66,9 @@ md.on('package', function(pkg) {
4266
pkgJson.provides = [pkg.name];
4367
}
4468

45-
if (pkg.main != null) {
46-
pkgJson.main = path.join(pkg.__dirname, pkg.main);
69+
var pkgJsonMainEntry = getPackageJsonMainEntry(pkg);
70+
if (pkgJsonMainEntry != null) {
71+
pkgJson.mainEntry = path.join(pkg.__dirname, pkgJsonMainEntry);
4772
}
4873

4974
pkgJsons.push(pkgJson);
@@ -58,8 +83,8 @@ md.on('end', function() {
5883
for (var i = 0; i < pkgJsons.length; i++) {
5984
var pkgJson = pkgJsons[i];
6085

61-
if (deps_files[pkgJson.main] != null && pkgJson.provides != null) {
62-
deps_files[pkgJson.main].provides = pkgJson.provides;
86+
if (deps_files[pkgJson.mainEntry] != null && pkgJson.provides != null) {
87+
deps_files[pkgJson.mainEntry].provides = pkgJson.provides;
6388
}
6489

6590
deps_files[pkgJson.file] = { file: pkgJson.file };

src/main/clojure/cljs/build/api.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,8 @@
275275
(defn node-inputs
276276
"EXPERIMENTAL: return the foreign libs entries as computed by running
277277
the module-deps package on the supplied JavaScript entry points. Assumes
278-
that the `@cljs-oss/module-deps` and `konan` NPM packages are either
279-
locally or globally installed."
278+
that the `@cljs-oss/module-deps`, `enhanced-resolve` and `konan` NPM packages
279+
are either locally or globally installed."
280280
[entries]
281281
(closure/node-inputs entries))
282282

src/main/clojure/cljs/closure.clj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2117,7 +2117,7 @@
21172117
(spit pkg-json "{}"))
21182118
(let [proc (-> (ProcessBuilder.
21192119
(into (cond->> ["npm" "install" "@cljs-oss/module-deps"
2120-
"resolve" "browser-resolve" "konan"]
2120+
"enhanced-resolve" "resolve" "konan"]
21212121
util/windows? (into ["cmd" "/c"]))
21222122
(map (fn [[dep version]] (str (name dep) "@" version)))
21232123
npm-deps))
@@ -2141,8 +2141,8 @@
21412141
(defn node-module-deps
21422142
"EXPERIMENTAL: return the foreign libs entries as computed by running
21432143
the module-deps package on the supplied JavaScript entry point. Assumes
2144-
that the `@cljs-oss/module-deps` and `konan` NPM packages are either
2145-
locally or globally installed."
2144+
that the `@cljs-oss/module-deps`, `enhanced-resolve`, `enhanced-resolve` and
2145+
`konan` NPM packages are either locally or globally installed."
21462146
([entry]
21472147
(node-module-deps entry
21482148
(when env/*compiler*
@@ -2181,8 +2181,8 @@
21812181
(defn node-inputs
21822182
"EXPERIMENTAL: return the foreign libs entries as computed by running
21832183
the module-deps package on the supplied JavaScript entry points. Assumes
2184-
that the `@cljs-oss/module-deps` and `konan` NPM packages are either
2185-
locally or globally installed."
2184+
that the `@cljs-oss/module-deps`, `enhanced-resolve` and `konan` NPM packages
2185+
are either locally or globally installed."
21862186
([entries]
21872187
(node-inputs entries
21882188
(when env/*compiler*

src/test/clojure/cljs/build_api_tests.clj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,8 +405,7 @@
405405
(spit (io/file "package.json") (json/json-str {:dependencies {:left-pad "1.1.3"}
406406
:devDependencies {"@cljs-oss/module-deps" "*"
407407
:konan "*"
408-
:resolve "*"
409-
:browser-resolve "*"}}))
408+
:enhanced-resolve "*"}}))
410409
(apply sh/sh (cond->> ["npm" "install"]
411410
util/windows? (into ["cmd" "/c"])))
412411
(let [ws (atom [])

src/test/clojure/cljs/closure_tests.clj

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@
247247
(spit (io/file "package.json") (json/json-str {:devDependencies {"@cljs-oss/module-deps" "*"
248248
:konan "*"
249249
:resolve "*"
250-
:browser-resolve "*"}}))
250+
:enhanced-resolve "*"}}))
251251
(apply sh/sh (cond->> ["npm" "install"]
252252
util/windows? (into ["cmd" "/c"])))
253253
(let [file (io/file (test/tmp-dir) "cljs-2315-inputs.js")
@@ -260,3 +260,23 @@
260260
:module-type :es6}])))
261261
(.delete (io/file "package.json"))
262262
(test/delete-node-modules))
263+
264+
(deftest test-cljs-2318
265+
(spit (io/file "package.json") "{}")
266+
(let [opts {:npm-deps {:react "15.6.1"
267+
:react-dom "15.6.1"
268+
:react-addons-css-transition-group "15.5.1"
269+
"@blueprintjs/core" "1.24.0"}}
270+
out (util/output-directory opts)]
271+
(test/delete-node-modules)
272+
(test/delete-out-files out)
273+
(closure/maybe-install-node-deps! opts)
274+
(is (true? (some (fn [module]
275+
(= module {:module-type :es6
276+
:file (.getAbsolutePath (io/file "node_modules/tslib/tslib.es6.js"))
277+
:provides ["tslib"
278+
"tslib/tslib.es6.js"
279+
"tslib/tslib.es6"]}))
280+
(closure/index-node-modules ["tslib"] opts))))
281+
(test/delete-node-modules)
282+
(test/delete-out-files out)))

0 commit comments

Comments
 (0)