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

欢迎!请查看关于页面,以了解更多此平台的工作方式。

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 提出)
...