|
2386 | 2386 | "Given all Cljs sources (build inputs and dependencies in classpath) |
2387 | 2387 |
|
2388 | 2388 | - index all the node node modules |
2389 | | - - process the JS modules (preprocess + convert to Closure JS)o |
| 2389 | + - process the JS modules (preprocess + convert to Closure JS) |
2390 | 2390 | - save js-dependency-index for compilation" |
2391 | | - [{:keys [npm-deps target] :as opts} js-sources compiler-env] |
2392 | | - (let [;; Find all the top-level Node packages and their files |
2393 | | - top-level-modules (reduce (fn [acc m] |
2394 | | - (reduce (fn [acc p] |
2395 | | - (assoc acc p m)) |
2396 | | - acc |
2397 | | - (:provides m))) |
2398 | | - {} |
2399 | | - (index-node-modules-dir)) |
2400 | | - requires (set (mapcat deps/-requires js-sources)) |
2401 | | - ;; Select Node files that are required by Cljs code, |
2402 | | - ;; and create list of all their dependencies |
2403 | | - required-node-modules (set/intersection (set (keys top-level-modules)) requires)] |
2404 | | - (if-not (= target :nodejs) |
2405 | | - (let [opts (-> opts |
2406 | | - (update :foreign-libs |
2407 | | - (fn [libs] |
2408 | | - (into (index-node-modules required-node-modules) |
2409 | | - (expand-libs libs)))) |
2410 | | - process-js-modules)] |
2411 | | - (swap! compiler-env assoc :js-dependency-index (deps/js-dependency-index opts)) |
2412 | | - opts) |
2413 | | - (do |
2414 | | - (swap! compiler-env update-in [:node-module-index] (fnil into #{}) (map str required-node-modules)) |
2415 | | - opts)))) |
| 2391 | + ([opts js-sources compiler-env] |
| 2392 | + (handle-js-modules opts js-sources compiler-env true)) |
| 2393 | + ([{:keys [npm-deps target] :as opts} js-sources compiler-env only-required?] |
| 2394 | + (let [;; Find all the top-level Node packages and their files |
| 2395 | + top-level (reduce |
| 2396 | + (fn [acc m] |
| 2397 | + (reduce (fn [acc p] (assoc acc p m)) acc (:provides m))) |
| 2398 | + {} (index-node-modules-dir)) |
| 2399 | + requires (set (mapcat deps/-requires js-sources)) |
| 2400 | + ;; Select Node files that are required by Cljs code, |
| 2401 | + ;; and create list of all their dependencies |
| 2402 | + node-required (if only-required? |
| 2403 | + (set/intersection (set (keys top-level)) requires) |
| 2404 | + (keys top-level))] |
| 2405 | + (if-not (= target :nodejs) |
| 2406 | + (let [opts (-> opts |
| 2407 | + (update :foreign-libs |
| 2408 | + (fn [libs] |
| 2409 | + (into (index-node-modules node-required) |
| 2410 | + (expand-libs libs)))) |
| 2411 | + process-js-modules)] |
| 2412 | + (swap! compiler-env assoc :js-dependency-index |
| 2413 | + (deps/js-dependency-index opts)) |
| 2414 | + opts) |
| 2415 | + (do |
| 2416 | + (swap! compiler-env update-in [:node-module-index] |
| 2417 | + (fnil into #{}) (map str node-required)) |
| 2418 | + opts))))) |
2416 | 2419 |
|
2417 | 2420 | (defn build |
2418 | 2421 | "Given a source which can be compiled, produce runnable JavaScript." |
|
0 commit comments