gpt4 book ai didi

node.js - ClojureScript NodeJS 程序不接受控制台参数

转载 作者:搜寻专家 更新时间:2023-10-31 23:17:02 25 4
gpt4 key购买 nike

考虑以下简单的 clojurescript 程序:

(ns node-test.core
(:require [cljs.nodejs :as node]))

(defn -main [& args]
(println "args: " args)
(let [one (first args) two (second args)]
(println "one: " one)
(println "two: " two)))

(set! *main-cli-fn* -main)

问题:如果我在没有优化的情况下编译它,这个程序会按预期工作。示例:

$ node program.js 1 2
=> args: (1, 2)
one: 1
two: 2

如果我使用高级优化编译程序,那么我的程序无法识别参数:

$ node program.js 1 2
=> args: nil
one: nil
two: nil

这可能是什么原因造成的?

编辑: 添加以下外部组件似乎可以解决问题:

var node = {};
node.process = {};
node.process.argv = {};

另外,去掉node父对象,只用process也可以修复:

var process = {};
process.argv = {};

不过我不太确定我是否理解我自己的解决方案。我想在幕后 clojurescript 正在将 node.process.argv 传递给 -main?

最佳答案

正如我在评论中所说,最小化 Node.JS 代码并不完全是通常的路径,并且可能不会带来显着的性能改进。我能想到的唯一正当理由是混淆代码。

无论如何,您可以使用外部文件(如您所见),或者您可以使用 *main-cli-fn*

如此处所述:http://www.matthewstump.com/misc/2012/06/04/writing-nodejs-modules-in-clojurescript/

(ns sample.core
(:require [cljs.nodejs :as node]))

(defn blargl
[]
(println "blargl!"))

(set! *main-cli-fn* blargl)

并使用以下选项编译它:

cljsc src '{:optimizations :simple :pretty-print true :target :nodejs}' > lib/sample.js

默认的外部文件是there .您还可以看到使用此变量的示例 there .

另外,ClojureScript Wiki for Node.js刚刚被编辑以反射(reflect):

Note: Under Node.js there is little reason to use advanced optimizations. While advanced optimizations does apply performance related optimizations, these are now largely obviated by optimizations present in modern JavaScript virtual machines like V8, SpiderMonkey, and JavaScriptCore. For Node.js, :simple or :none optimizations suffice and using them removes the need for extra steps like supplying an externs file.

关于node.js - ClojureScript NodeJS 程序不接受控制台参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34641241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com