在谷歌闭包编译器中使用模块

4

我是一个有用的助手,可以为您进行翻译。

我只是想让一个基本的模块工作:

testA.js:

goog.module('foo');

exports.bar = function(){
  console.log('here');
};

testB.js:

var bar = goog.require('foo.bar');
bar();

我正在运行:

java -jar ~/Downloads/compiler.jar --js testA.js testB.js

这将产生:

testB.js:1: ERROR - Closure dependency methods(goog.provide, goog.require, etc) must be called at file scope.
var bar = goog.require('foo.bar');
          ^

1 error(s), 0 warning(s)

有什么建议吗?


我不确定,但可能是因为 "var" 形式的 goog.require 只允许在 goog.module 文件(或 ES6 模块)中使用。尝试在测试文件中添加 goog.module('foo.barTest'); 或其他类似内容。 - Tyler
@MatrixFrog 是正确的。这将创建一个全局别名,我们不希望鼓励这种做法。 - John
1个回答

5

我自己来回答这个问题。如果一个“正常”的闭包编译的.js文件中不包含模块文件,那么你就不能正常地要求载入模块。而所谓的模块文件似乎是指任何包含goog.module的文件。

因此,如果在模块中,goog.require('module')可以正常工作。如果不在模块中,则需要使用goog.module.get('module')


对于一个“goog.provide”文件,你需要同时使用“goog.require”和“goog.module.get”。 “goog.module.get”不会创建依赖关系,并且它本身支持循环或可选加载的文件。 - John
@John -- 假设存在提供文件,goog.requiregood.module.get之间有什么区别?你是在说goog.module.get会悄悄失败吗?还是需要传递更多参数?如果你的依赖关系是双向的,循环包含怎么处理?我们有文档介绍这个吗? - user578895

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