作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个 cljs
包含以下内容的文件:
(ns foo)
(defn add [x y]
(+ x y))
clj -m cljs.main -c foo
goog.require
)。我可以将目标设置为
none
与
-t
标志(与浏览器或节点相反),并且......不能解决这个问题。将其设置为
node
也不能解决问题:否
index.js
(它在 Java 中称为 main),没有
module.exports = blah blah
.似乎它面向独立的全节点应用程序,而不是库。
--help
错误的?
最佳答案
这假设您已经安装了 ClojureScript 和 Node.js
鉴于:
math101
|-- package.json
|-- src
| `-- com
| `-- example
| `-- math.cljs
{
"name": "math101",
"version": "1.0.0",
"main": "dist/index.js",
"license": "MIT",
"devDependencies": {
"shadow-cljs": "^2.8.52",
"source-map-support": "^0.5.13"
}
}
dist/index.js
- 这将包含我们转换为 JavaScript shadow-cljs
- 我们需要的构建(和依赖管理)工具source-map-support
- Required to run ClojureScript on Node.js (ns com.example.math)
(defn add [x y]
(+ x y))
math101
的根目录下运行
yarn shadow-cljs init
.
shadow-cljs.edn
的文件。使用一些默认设置:
;; shadow-cljs configuration
{:source-paths
["src/dev"
"src/main"
"src/test"]
:dependencies
[]
:builds
{}}
{:source-paths
["src"]
:dependencies
[]
:builds
{}}
;; shadow-cljs configuration
{:source-paths
["src"]
:dependencies
[]
:builds
{:math101 {:target :node-library
:output-to "dist/index.js"
:exports-var com.example.math/add}}}
:math101
- 这是我们稍后将使用的构建 ID :target :node-library
- 这告诉 shadow-cljs
你打算创作一个图书馆:output-to "dist/index.js"
- 您打算发布的代码:exports-var com.example.math/add
- 您打算发布的函数的“完全限定名称”。这将产生一个默认导出。 The :target :node-library emits code that can be used (via require) as a standard node library, and is useful for publishing your code for re-use as a compiled Javascript artifact.
:npm-module
目标可用但到目前为止
:node-library
已为我检查了所有框。
yarn shadow-cljs compile math101
.
shadow-cljs
会下载一堆东西。最终它会完成,当它完成时......
$ node
> var add = require('./dist')
> add(40, 2)
42
subtract
:
(ns com.example.math)
(defn add [x y]
(+ x y))
(defn subtract [x y]
(- x y))
;; shadow-cljs configuration
{:source-paths
["src"]
:dependencies
[]
:builds
{:math101 {:target :node-library
:output-to "dist/index.js"
:exports {:add com.example.math/add
:subtract com.example.math/subtract}}}}
yarn shadow-cljs compile math101
再次,当它完成时:
$ node
> var math101 = require('./dist')
> math101.add(40, 2)
42
> math101.subtract(44, 2)
42
shadow-cljs compile
生成非生产代码(即它没有被缩小,死代码没有被删除 AFAIK 并且 Google Closure 还没有运行任何优化)。
shadow-cljs release
但你可能想在之前调整你的构建配置。
关于clojurescript - 如何在 ClojureScript 中编写不可知的 JavaScript 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894430/
我是一名优秀的程序员,十分优秀!