请参与2024 Clojure状态调查!

欢迎!请参阅关于页面以了解有关此信息的一些更多信息。

0
ClojureScript
我推测以下内容不起作用,因为在REPL中require时没有用到Closure。

{code:title=co.edn}
{:output-dir "out"
 :output-to "out/main.js"
 :optimizations :none
$ npm install
 :npm-deps {:react "15.6.1"}
            :react-dom "15.6.1"}}


{code:title=src/example/core.cljs}
(ns example.core
  (:require [react :refer [createElement]]
            ["react-dom/server" :as ReactDOMServer :refer [renderToString]]))

(js/console.log (renderToString (createElement "div" nil "Hello World!")))


这可以正常工作


clj -m cljs.main -co co.edn -c example.core -r


在浏览器控制台中记录此信息


[日志] <div data-reactroot="" data-reactid="1" data-react-checksum="1309021079">Hello World!</div> (core.js, line 6)


但是,如果您从头开始(没有{{out}}、{{node_modules}}、{{package.json}}和{{package-lock.json}})并执行以下操作


clj -m cljs.main -co co.edn -r


然后在REPL中继续以下操作


(require 'example.core)


REPL控制台不会显示任何错误,但JavaScript控制台会显示很多错误。

我认为要满足此问题,可以通过某种方式使之“正常工作”,或者也许可以检测到问题并抛出{{ex-info}}异常,让用户知道这样不会正常工作。

以下是记录的错误


[错误] 参考错误:找不到变量:process
    全局代码 (警告.js:4)
[错误] 参考错误:找不到变量:process
    全局代码 (canDefineProperty.js:2:170)
[错误] 参考错误:找不到变量:process
    全局代码 (emptyObject.js:2:153)
[错误] 参考错误:找不到变量:process
    全局代码 (invariant.js:4:192)
[错误] 参考错误:找不到变量:process
    全局代码 (lowPriorityWarning.js:3)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactBaseClasses.js:16)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactPropTypeLocationNames.js:2:185)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactDOMFactories.js:5)
[错误] 参考错误:找不到变量:process
    全局代码 (checkPropTypes.js:10)
[错误] 参考错误:找不到变量:process
    createChainableTypeChecker (factoryWithTypeCheckers.js:12:305)
    createPrimitiveTypeChecker (factoryWithTypeCheckers.js:17:102)
    (匿名函数) (factoryWithTypeCheckers.js:10:535)
    (匿名函数) (factory.js:3:441)
    全局代码 (ReactPropTypes.js:5:149)
[错误] 参考错误:找不到变量:process
    全局代码 (factory.js:34:317)
[错误] 参考错误:找不到变量:process
    全局代码 (React.js:18)
[错误] 参考错误:找不到变量:process
    全局代码 (EventPluginRegistry.js:16:218)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactErrorUtils.js:5)
[错误] 参考错误:找不到变量:process
    全局代码 (EventPluginUtils.js:12)
[错误] 类型错误:未定义的不是一个对象 (评估 'module$private timeval$node MessageType:"npmdom'$lib'EventPluginRegistry['default'].injectEventPluginOrder')
    全局代码 (EventPluginHub.js:16:199)
[错误] 类型错误:未定义的不是一个对象 (评估 'module$private timeval$node MessageType:"npmdom'$lib'EventPluginHub['default'].getListener')
    全局代码 (EventPropagators.js:9:167)
[错误] 参考错误:找不到变量:process
    全局代码 (SyntheticEvent.js:18)
错误] 错误类型:'undefined' 不是一个函数(在 '...module$private$tmp$island$node_modules$react_dom$lib$SyntheticEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticCompositionEvent.js:4:393)
错误] 错误类型:'undefined' 不是一个函数(在 '...module$private$tmp$island$node_modules$react_dom$lib$SyntheticEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticInputEvent.js:4:203)
[错误] 参考错误:找不到变量:process
    全局代码 (DOMProperty.js:14:471)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp$island$node_modules$react_dom$lib$DOMProperty["default"].ID_ATTRIBUTE_NAME')
    全局代码 (ReactDOMComponentTree.js:7:516)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactInvalidSetStateWarningHook.js:4)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactInstrumentation.js:4)
错误] 错误类型:'undefined' 不是一个函数(在 '...module$private$tmp$island$node_modules$react_dom$lib$SyntheticEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticUIEvent.js:7:93)
[错误] 错误类型:'undefined' 不是一个函数(在 '...module$private.tmp$island$node_modules$react_dom$lib$SyntheticUIEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticMouseEvent.js:9:95)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp$island$node_modules$react_dom$lib$DOMProperty["default"].injection')
    全局代码 (HTMLDOMPropertyConfig.js:3:425)
[错误] 参考错误:找不到变量:process
    全局代码 (DOMChildrenOperations.js:21)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp$island$node_modules$react_dom$lib$DOMChildrenOperations["default"].dangerouslyReplaceNodeWithMarkup')
    全局代码 (ReactComponentBrowserEnvironment.js:5:349)
[错误] 参考错误:找不到变量:process
    全局代码 (CSSPropertyOperations.js:17)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp须知ilib$react_dom$lib$DOMProperty["default"].ATTRIBUTE_NAME_START_CHAR')
    全局代码 (DOMPropertyOperations.js:9:200)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp须知ilib$react$lib$React["default"].isValidElement')
    全局代码 (LinkedValueUtils.js:9:533)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactPropTypeLocationNames.js:2:193)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactCompositeComponent.js:21:366)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactMultiChild.js:21)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactServerRenderingTransaction.js:10:126)
[错误] 参考错误:找不到变量:process
    全局代码 (validateDOMNesting.js:7)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp须知ilib$react_dom$lib$EventPluginHub["default"].deleteListener')
    全局代码 (ReactDOMComponent.js:42:171)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp$island$node_modules$react_dom$lib$DOMProperty["default"].injection')
    全局代码 (ReactInjection.js:13:279)
[错误] 参考错误:找不到变量:process
    全局代码 (ReactReconcileTransaction.js:18)
错误] 错误类型:'undefined' 不是一个函数(在 '...module$private$tmp$island$node_modules$react_dom$lib$SyntheticEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticAnimationEvent.js:4:256)
错误] 错误类型:'undefined' 不是一个函数(在 '...module$private$tmp$island$node_modules$react_dom$lib$SyntheticEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticClipboardEvent.js:4:303)
[错误] 错误类型:'undefined' 不是一个函数(在 '...module$private.tmp$island$node_modules$react_dom$lib$SyntheticUIEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticFocusEvent.js:4:214)
[错误] 错误类型:'undefined' 不是一个函数(在 '...module$private.tmp$island$node_modules$react_dom$lib$SyntheticUIEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticKeyboardEvent.js:10:95)
[错误] 错误类型:'undefined' 不是一个函数(在 '...module$private.tmpischemodules$react_dom$lib$SyntheticMouseEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticDragEvent.js:4:214)
[错误] 错误类型:'undefined' 不是一个函数(在 '...module$private.tmp$island$node_modules$react_dom$lib$SyntheticUIEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticTouchEvent.js:6:95)
错误] 错误类型:'undefined' 不是一个函数(在 '...module$private$tmp$island$node_modules$react_dom$lib$SyntheticEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticTransitionEvent.js:4:257)
[错误] 错误类型:'undefined' 不是一个函数(在 '...module$private.tmpischemodules$react_dom$lib$SyntheticMouseEvent["default"].augmentClass...' 附近)
    全局代码 (SyntheticWheelEvent.js:5:98)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp须知ilib$react_dom$lib$ReactInjection["default"].EventEmitter')
    注入 (ReactDefaultInjection.js:22:383)
    全局代码 (ReactDOMServer.js:6:257)
[错误] 错误类型:'undefined' 不是一个对象(在评估 'module$privateCACACACACACACACACAC.tmp须知erver["default"].renderToString')
    全局代码 (core.js:6)

2 个答案

0

由 dnolen 发表的评论

如果您打算使用{{:npm-deps}},则必须设置{{:output-dir}}。如果我们能想出一种方法使其工作,那么即使没有提供{{:output-dir}},也需要与Node.js兼容。

0
by
参考资料:https://clojure.atlassian.net/browse/CLJS-2677(由mfikes报告)
...