谷歌闭包编译器处理node_modules

6

我正在尝试使用Google Closure Compiler作为webpack的替代方案。目前,我正在使用以下代码编译前端文件夹中的所有文件:

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

问题是其中一个文件需要 React 和 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");
           ^^^^^^^^^^^^^^^^^^^^

我该如何确保Google Closure Compiler查找node_modules文件夹以寻找相关的第三方模块?

1个回答

4
最近的Closure-Compiler版本支持node模块。
编译器不会自动发现源文件 - 您需要将每个模块的源代码传递给编译器。此外,您还需要使用--js node_modules/react/package.json将任何来自软件包的package.json文件传递给编译器。
如果您在整个项目中都使用模块,则可能希望使用依赖管理标志,以便编译器自动为您排序源文件。
根据您上面的示例,您的编译命令可能如下所示:
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'

在下一个版本发布后不久,将提供完整的文档和一些额外的工具来利用这些功能。


我尝试了这个,但是出现了 node_modules/assert/package.json:2: ERROR - Parse error. Semi-colon expected 的错误。版本:1.0-SNAPSHOT。构建时间:2017年4月25日17:19。 - daurnimator
现在您还需要添加 --module_resolution 标志。我已经更新了答案。 - Chad Killingsworth
你知道为什么必须提供 package.json 文件吗?(只是好奇) - customcommander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接