2017-01-24 49 views
4

我正在嘗試谷歌封閉編譯器作爲webpack的替代品。 目前我使用下面的編譯我的前端文件夾內的所有文件:谷歌封閉編譯器進程node_modules

java -jar closure-compiler.jar --process_common_js_modules --js_output_file=static/out.js 'lib/js/src/frontend/*.js'" 

的問題是這些文件中的一個需要作出反應& ReactDOM。 我得到以下錯誤:

lib/js/src/frontend/app.js:7: ERROR - Failed to load module "react" 
var React = require("react"); 
      ^^^^^^^^^^^^^^^^ 

lib/js/src/frontend/app.js:8: ERROR - Failed to load module "react-dom" 
var ReactDom = require("react-dom"); 
      ^^^^^^^^^^^^^^^^^^^^ 

如何確保在谷歌關閉編譯器的內部結構是node_modules找到相關的第三方模塊?

回答

3

最近版本的Closure-Compiler支持節點模塊。

編譯器不會發現源文件 - 您必須將每個模塊的源代碼傳遞給編譯器。另外,您還需要使用--js node_modules/react/package.json將包中的任何package.json文件傳遞給編譯器。

如果您在整個項目中使用模塊,則可能需要使用dependency management flags,以便編譯器自動爲您分類源文件。

根據你上面的例子,你的編譯命令可能是這樣的:

java -jar closure-compiler.jar --process_common_js_modules 
    --dependency_mode=STRICT 
    --module_resolution=NODE 
    --entry_point="lib/js/src/frontend/app" 
    --js_output_file=static/out.js 
    --js='node_modules/react/package.json' 
    --js='node_modules/react/**/*.js' 
    --js='node_modules/react-dom/package.json' 
    --js='node_modules/react-dom/**/*.js' 
    --js='lib/js/src/frontend/*.js' 

完整的文檔和一些額外的工具來利用這些功能在未來發布後不久將可用。

+0

我試過了,但得到了'node_modules/assert/package.json:2:錯誤 - 解析錯誤。分號預計版本:1.0-SNAPSHOT建立於:2017-04-25 17:19 – daurnimator

+0

您現在還需要添加'--module_resolution'標誌。我已經更新了答案。 –