簡體   English   中英

ClojureScript NodeJS程序不會接受控制台參數

[英]ClojureScript NodeJS Program Won't Accept Console Arguments

考慮以下簡單的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代碼並不完全是通常的路徑,並且可能不會導致顯着的性能改進。 我能想到的唯一有效理由是混淆代碼。

無論如何,您可以使用extern文件(如您所知),或者您可以使用*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

默認的extern文件就在那里 您還可以在此處查看此變量的示例。

此外,剛剛編輯了Node.jsClojureScript Wiki以反映:

注意:在Node.js下,沒有理由使用高級優化。 雖然高級優化確實應用了與性能相關的優化,但現在很大程度上可以通過現代JavaScript虛擬機(如V8,SpiderMonkey和JavaScriptCore)中的優化來避免這些優化。 對於Node.js,:simple或:none optimizations足夠並且使用它們不需要額外的步驟,如提供externs文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM