我正在尝试在基于Reagent的应用程序中使用http://react-components.com中的组件(例如react-youtube),但可能我的天真方法不正确。我尝试使用lein-npm
模块安装NPM软件包,在html页面中包含脚本,并通过reagent/adapt-react-class
使用它们,如同this SO问题。但是除了这个样本我没有成功。
通常我会收到“未定义require / import / module”或“未定义Youtube”等错误(通过(def yt-test [] (r/adapt-react-class js/Youtube))
。我对需要做什么很困惑。我读了一些关于webpack / browserify的内容,看到cljsjs包 - 是为了使这个工作所需的那些?
答案 0 :(得分:7)
我写了一篇关于如何使用webpack实现这一目标的分步指南: blob.tomerweller.com/reagent-import-react-components-from-npm
一般概念与@scttnlsn建议相同:将所有npm包捆绑在外部JS文件中,并通过全局window
对象公开它们。
答案 1 :(得分:3)
这些组件打包为CommonJS模块。从ClojureScript访问CommonJS模块的一种方法是将它们捆绑到一个可以包含在ClojureScript构建中的JavaScript文件中。
您需要创建一个JavaScript入口点文件,该文件需要您的各种NPM依赖项并将它们公开给ClojureScript(例如,通过在index.js
上设置它们)。创建一个文件(让我们称之为window.YouTube = require('react-youtube');
),其中包含:
npm install -g browserify
browserify index.js --standalone window > bundle.js
然后使用像Browserify这样的工具捆绑您的入口点文件及其所需的所有依赖项:
bundle.js
在您的ClojureScript版本中加入js/YouTube
,您就可以通过{{1}}