Skip to content

Commit 8972224

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2255: Clean up :npm-deps
1 parent e6ad026 commit 8972224

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

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

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,12 +215,33 @@
215215
(binding [ana/*cljs-warning-handlers* (:warning-handlers opts ana/*cljs-warning-handlers*)]
216216
(closure/watch source opts compiler-env stop))))
217217

218-
(defn node-module-deps
219-
"EXPERIMENTAL: return the foreign libs entries as computed by running
220-
the module-deps package on the supplied JavaScript entry point. Assumes
221-
that the module-deps NPM package is either locally or globally installed."
222-
[entry]
223-
(closure/node-module-deps entry))
218+
;; =============================================================================
219+
;; Node.js / NPM dependencies
220+
221+
(defn install-node-deps!
222+
"EXPERIMENTAL: Install the supplied dependencies via NPM. dependencies must be
223+
a map of name to version."
224+
([dependencies]
225+
(install-node-deps! dependencies
226+
(when-not (nil? env/*compiler*)
227+
(:options @env/*compiler*))))
228+
([dependencies opts]
229+
{:pre [(map? dependencies)]}
230+
(closure/maybe-install-node-deps! (merge opts {:npm-deps dependencies}))))
231+
232+
(defn get-node-deps
233+
"EXPERIMENTAL: Get the Node.js dependency graph of the supplied dependencies.
234+
Dependencies must be a sequence of strings or symbols naming packages or paths
235+
within packages (e.g. [react \"react-dom/server\"]. Assumes dependencies have
236+
been been previously installed, either by `cljs.build.api/install-node-deps!`
237+
or by an NPM client, and reside in the `node_modules` directory."
238+
([dependencies]
239+
(get-node-deps dependencies
240+
(when-not (nil? env/*compiler*)
241+
(:options @env/*compiler*))))
242+
([dependencies opts]
243+
{:pre [(sequential? dependencies)]}
244+
(closure/index-node-modules dependencies opts)))
224245

225246
(comment
226247
(node-module-deps

src/test/clojure/cljs/build_api_tests.clj

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,3 +415,33 @@
415415
(.delete (io/file "package.json"))
416416
(.delete (io/file "package-lock.json"))
417417
(test/delete-node-modules))
418+
419+
(deftest test-deps-api-cljs-2255
420+
(test/delete-node-modules)
421+
(spit (io/file "package.json") "{}")
422+
(build/install-node-deps! {:left-pad "1.1.3"})
423+
(is (.exists (io/file "node_modules/left-pad/package.json")))
424+
(test/delete-node-modules)
425+
(spit (io/file "package.json") "{}")
426+
(build/install-node-deps! {:react "15.6.1"
427+
:react-dom "15.6.1"})
428+
(let [modules (build/get-node-deps '[react "react-dom/server"])]
429+
(is (true? (some (fn [module]
430+
(= module {:module-type :commonjs
431+
:file (.getAbsolutePath (io/file "node_modules/react/react.js"))
432+
:provides ["react"
433+
"react/react.js"
434+
"react/react"]}))
435+
modules)))
436+
(is (true? (some (fn [module]
437+
(= module {:module-type :commonjs
438+
:file (.getAbsolutePath (io/file "node_modules/react/lib/React.js"))
439+
:provides ["react/lib/React.js" "react/lib/React"]}))
440+
modules)))
441+
(is (true? (some (fn [module]
442+
(= module {:module-type :commonjs
443+
:file (.getAbsolutePath (io/file "node_modules/react-dom/server.js"))
444+
:provides ["react-dom/server.js" "react-dom/server"]}))
445+
modules))))
446+
(test/delete-node-modules)
447+
(.delete (io/file "package.json")))

0 commit comments

Comments
 (0)