看似简单的导入模块案例没有使用'命名空间从未提供'错误

时间:2017-09-26 15:30:09

标签: javascript node.js google-closure-compiler ramda.js

我试图让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文件中清楚地看到。

  1. '模块的内容'错误消息中的前缀?
  2. 为什么闭包编译器无法解析模块位置?
  3. 修改:

    根据此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,都会发生此错误。

0 个答案:

没有答案