【发布时间】:2016-01-06 19:30:30
【问题描述】:
考虑以下简单的 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 的代码。无论如何,这是个好问题。
-
等等——你不应该在定位 nodejs 时使用高级编译选项吗?为什么会这样?
-
高级编译是为了减少生成的.js的大小,这在浏览器中非常重要,因为它会在页面加载时下载,但在服务器端几乎没有用处
-
我想,除了减小 .js 的大小之外,它对性能的提升也非同小可?
-
@user1770201 对节点执行此操作的通常原因是混淆代码,而不是提高性能。
标签: node.js clojure clojurescript