В моем коде ClojureScript мне требуется модуль JavaScript с именем seedrandom
, который находится в папке node_modules
, например:
(ns something.core
(:require ["seedrandom" :as rnd]))
(js/console.log (.quick (rnd "x")))
Согласно документации seedrandom
он предназначен для обоихnodejs и браузер, и я ранее включил и успешно использовал его в коде ClojureScript через тег <script>
, подтверждая, что он работает в браузере.
Запуск этого файла cljs в lumo
в командной строкеработает хорошо и выдает детерминированное случайное число.
Когда я пытаюсь использовать этот же файл cljs в моем проекте внешнего интерфейса Reagent, я вижу следующую ошибку:
Compiling build :app to "public/js/app.js" from ["src" "env/dev/cljs"]...
events.js:183
throw er; // Unhandled 'error' event
^
Error: module not found: "crypto" from file /home/chrism/dev/something/node_modules/seedrandom/seedrandom.js
at onresolve (/home/chrism/dev/something/node_modules/@cljs-oss/module-deps/index.js:181:30)
...
Внутри seedrandom.js
мы видимследующее:
// When in node.js, try using crypto package for autoseeding.
try {
nodecrypto = require('crypto');
} catch (ex) {}
Очевидно, этот код предназначен для игнорирования встроенного модуля nodejs crypto
при работе в браузере.Проблема, насколько я могу судить, заключается в том, что компилятор ClojureScript этого не знает - он видит это require('crypto')
и пытается перевести его в фазу компиляции, но не может найти его, потому что он встроен в nodejs.
Есть ли какой-нибудь способ, которым я могу сказать компилятору игнорировать это конкретное требование?Или я могу как-то подкрутить крипто модуль?Какой самый простой способ решить эту проблему?
Примечание. Ранее я сталкивался с такой же проблемой с модулями JavaScript, которые проверяют наличие модуля узла fs
.Надеюсь, что мы сможем найти общее решение для использования снова в будущем.Спасибо!
Соответствующие версии: [org.clojure/clojurescript "1.10.520"]
и [reagent "0.8.1"]
.
Этот ответ связан с аналогичным вопросом с точки зрения Google Closure, который использует ClojureScript, но я ищу ответ, который я могу использовать специально с cljs.