我试图让Ramda库与闭包编译器的高级编译模式一起使用。
它使用在主index.js中导入的许多小模块。
这是我得到的错误:
$ closure-compiler --flagfile closure.conf --debug --formatting PRETTY_PRINT
src/main.js:1: ERROR - required "module$node_modules$ramda$index" namespace never provided
import R from 'ramda';
^^^^^^^^^^^^^^^^^^^^^^
我的src/main.js
文件只是:
import R from 'ramda';
var greet = R.replace('{name}', R.__, 'Hello, {name}!');
const result = greet('Alice'); //=> 'Hello, Alice!'
console.log(result)
我的closure.conf
是
--compilation_level=ADVANCED
--js_output_file=out.js
--warning_level=QUIET
--dependency_mode=STRICT
--module_resolution=NODE
--process_common_js_modules
--js node_modules/ramda/src/**.js
--js node_modules/ramda/index.js
--js src/main.js
--js_module_root=node_modules
--entry_point=src/main
我在node_modules中通过npm安装了ramda:
$ tree node_modules -L 2
node_modules
├── ramda/
│ ├── dist/
│ ├── src/
│ ├── CHANGELOG.md
│ ├── index.js
│ ├── LICENSE.txt
│ ├── package.json
│ └── README.md
└── .yarn-integrity
Closure编译器版本:v20170910
我不明白的是required "module$node_modules$ramda$index" namespace never provided
错误消息。
我肯定提供了node_modules / ramda / index.js路径,你可以在闭包conf文件中清楚地看到。
修改:
根据此PR / bug,这可能是封闭编译器中的现有错误:https://github.com/google/closure-compiler/pull/2641
为了测试修复,我检查了主分支并合并了建议的PR并创建了一个新版本。
这确实让我超越了上述错误信息。
同样在@Scott Sauyet的评论中,我将src/main.js
中的导入修改为:
导入*作为R来自' ramda';
但是现在还有另一条错误消息。
$ closure-compiler --flagfile closure.conf --debug --formatting PRETTY_PRINT
src/main.js:3: ERROR - variable module$node_modules$ramda$index is undeclared
const greet = R.replace('{name}', R.__, 'Hello, {name}!');
^
无论导入是* as R
还是仅R
,都会发生此错误。