closure-webpack-plugin icon indicating copy to clipboard operation
closure-webpack-plugin copied to clipboard

Error `Closure primitive methods (goog.provide, goog.require, goog.define, etc) must be called at file scope.`

Open BeksOmega opened this issue 2 years ago • 1 comments

Package version: 2.5.0 Node version: 14.15.0 OS: Ubuntu

Minimal example: https://github.com/BeksOmega/closure-webpack-bug

Reproduction steps

  1. Clone the linked repro.
  2. npm install
  3. npm run make-deps
  4. npm run webpack
  5. Observe the errors:
ERROR in ./closure/goog/base.js:698 from closure-compiler: Closure primitive methods (goog.provide, goog.require, goog.define, etc) must be called at file scope.
goog.forwardDeclare('Document');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ERROR in ./closure/goog/base.js:699 from closure-compiler: Closure primitive methods (goog.provide, goog.require, goog.define, etc) must be called at file scope.
goog.forwardDeclare('HTMLScriptElement');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ERROR in ./closure/goog/base.js:700 from closure-compiler: Closure primitive methods (goog.provide, goog.require, goog.define, etc) must be called at file scope.
goog.forwardDeclare('XMLHttpRequest');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ERROR in ./core/blockly.js:10 (originally at line 5) from closure-compiler: Closure primitive methods (goog.provide, goog.require, goog.define, etc) must be called at file scope.
const module = goog.require('testModule');
               ^^^^^^^^^^^^^^^^^^^^^^^^^^

Note that the entry-point file is 'core/blockly.js' because that matches the project I'm trying to convert to using webpack. See the main repository here: https://github.com/google/blockly

Expected behavior

There should be no errors when compiling with the closure-webpack-plugin.

Additional Info

I think this may be related to using a local copy of base.js? But I'm not sure. We would really like to continue using a local copy if possible so that we can remove unnecessary parts of base.js in the future.

Thank you for your time!

BeksOmega avatar Apr 18 '22 20:04 BeksOmega

This is likely due to the fact that base.js is manipulated to support the semantics of webpack. See https://github.com/webpack-contrib/closure-webpack-plugin/blob/master/src/dependencies/goog-base-global.js

I don't really see a path forward to using a custom version of base.js

ChadKillingsworth avatar Aug 09 '22 12:08 ChadKillingsworth