2024Clojure状态调查中分享您的想法!

欢迎!请查看关于页面以了解更多关于如何使用本站的信息。

0
ClojureScript
使用{{npm-deps}}指定对具有{{es6}}模块的库的依赖项会导致Google Closure出现错误,导致依赖项不可用。

h3. 背景

{{rc-time-picker}}作为一组{{es6}}模块存在于{{es/}}子目录中,同时在{{lib/}}子目录中以"传统"的{{module.exports}}方式存在。{{package.json}}将其分别指定为{{module}}和{{main}}(见https://github.com/react-component/time-picker/blob/master/package.json)。

使用类似于以下内容的{{npm-deps}}在ClojureScript构建中会导致Google Closure选择{{es6}}部分,并随后对文件混合{{goog.provide}}和{{es6}}模块而提出抱怨


(require '[cljs.build.api :as b])

(b/build ["src/"]
         {:main 'my.app
          :output-to "js/app.js"
          :optimizations :simple
          :npm-deps {"react"          "16.2.0",
                     "react-dom"      "16.2.0",
                     "rc-time-picker" "^3.3.1",}
          :install-deps true})


简单的{{app.cljs}}需要{{"rc-time-picker" :as ...}}时,在编译期间产生以下错误


警告:警告 - 文件不能是goog.provide,goog.module和/或ES6模块的组合:.../out/node_modules/rc-time-picker/es/Combobox.js
...
错误:JSC_LANGUAGE_FEATURE。此语言特性只在ECMASCRIPT6模式或更高时受支持:模块。在...out/node_modules/rc-time-picker/es/TimePicker.js第12行:66
...


指定{{:language-in}}和{{:language-out}}没有帮助。

错误信息是由Clojurescript代码引起的,该代码将代码从{{node_modules/rc-time-picker/es/}}复制到{{out/node_modules/rc-time-picker}},并在文件顶部添加各种{{goog.provide}}语句,而文件末尾是{{export default ...}}语句。

1 答案

0
参考: https://clojure.atlassian.net/browse/CLJS-2785(由the-kenny报告)
...