closure-webpack-plugin
closure-webpack-plugin copied to clipboard
Error `Closure primitive methods (goog.provide, goog.require, goog.define, etc) must be called at file scope.`
Package version: 2.5.0 Node version: 14.15.0 OS: Ubuntu
Minimal example: https://github.com/BeksOmega/closure-webpack-bug
Reproduction steps
- Clone the linked repro.
-
npm install
-
npm run make-deps
-
npm run webpack
- 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!
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