angular-meteor
angular-meteor copied to clipboard
`AOT=1 meteor` broken for Angular versions ≥ 13
Steps to reproduce:
-
git clone [email protected]:domq/angular-meteor-base.git
-
cd angular-meteor-base; meteor npm i
-
env AOT=1 meteor
→ behavior OK, see below -
git checkout upgrade/angular-12 && env AOT=1 meteor
→ behavior OK -
git checkout upgrade/angular-13 && env AOT=1 meteor
→ failure, see below
where
- “behavior OK” means that when
AOT=1
, the server starts up without complaining, and the browser's developer tools show that no HTML downloads occur. - “failure” means
@angular/compiler and @angular/compiler-cli must be installed for AOT compilation! AOT compilation disabled! Ignore this if you are using AngularJS 1.X
By applying #1987, it becomes clear that the issue is that Meteor is unable to load the @angular/compiler
module:
Error: Cannot find module '/Users/quatrava/Dev/angular-meteor-base/node_modules/@angular/compiler'Require stack:
- /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/isobuild/bundler.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/isobuild/compiler.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/package-client.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/catalog/catalog-remote.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/catalog/catalog.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/tropohouse.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/meteor-services/config.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/meteor-services/auth.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/utils/http-helpers.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/warehouse.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/cli/main.js - /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/index.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:931:15) at Function.Module._load (internal/modules/cjs/loader.js:774:27) at Module.require (internal/modules/cjs/loader.js:1003:19) at require (internal/modules/cjs/helpers.js:107:18) at Object.require (/tools/isobuild/bundler.js:2196:22) at makeInstallerOptions.fallback (packages/modules-runtime.js:712:18) at Module.require (packages/modules-runtime.js:244:14) at require (packages/modules-runtime.js:258:21) at module (packages/Angular Compilers/plugin/register.js:26:16) at fileEvaluate (packages/modules-runtime.js:336:7) at Module.require (packages/modules-runtime.js:238:14) at require (packages/modules-runtime.js:258:21) at:84:1 at :89:3 at __bottom_mark__ (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/utils/tools/utils/parse-stack.ts:92:14) at /Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/fs/tools/fs/files.ts:1160:7 at Function.time (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/tool-env/tools/tool-env/profile.ts:284:30) at Object.runJavaScript (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/fs/tools/fs/files.ts:1037:18) at /tools/isobuild/bundler.js:2254:15 at Function.each (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/lib/node_modules/underscore/underscore-node-f-pre.js:1316:7) at JsImage.load (/tools/isobuild/bundler.js:2114:7) at /tools/isobuild/isopack.js:476:16 at Object.enterJob (/tools/utils/buildmessage.js:388:12) at /tools/isobuild/isopack.js:466:20 at Function.each (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/lib/node_modules/underscore/underscore-node-f-pre.js:1321:7) at Isopack.ensurePluginsInitialized (/tools/isobuild/isopack.js:454:7) at /tools/isobuild/compiler.js:381:16 at Array.forEach ( ) at /tools/isobuild/compiler.js:380:26 at Object.enterJob (/tools/utils/buildmessage.js:388:12) at /tools/isobuild/compiler.js:376:16 at /tools/isobuild/compiler.js:186:28 at Slot.withValue (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/lib/node_modules/@wry/context/lib/context.esm.js:69:29) at Object.withCache (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/fs/tools/fs/files.ts:1543:39) at /tools/isobuild/compiler.js:185:11 at Function.each (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/lib/node_modules/underscore/underscore-node-f-pre.js:1316:7) at Object.compile (/tools/isobuild/compiler.js:180:5) at /tools/isobuild/isopack-cache.js:353:30 at Object.enterJob (/tools/utils/buildmessage.js:388:12) at IsopackCache._loadLocalPackage (/tools/isobuild/isopack-cache.js:308:18) at /tools/isobuild/isopack-cache.js:242:16 at Function.time (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/tool-env/tools/tool-env/profile.ts:284:30) at /tools/isobuild/isopack-cache.js:241:17 at Object.enterJob (/tools/utils/buildmessage.js:388:12) at IsopackCache._ensurePackageLoaded (/tools/isobuild/isopack-cache.js:232:20) at /tools/isobuild/isopack-cache.js:74:14 at /tools/packaging/package-map.js:57:7 at Function.each (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/lib/node_modules/underscore/underscore-node-f-pre.js:1321:7) at exports.PackageMap.eachPackage (/tools/packaging/package-map.js:49:7) at IsopackCache.buildLocalPackages (/tools/isobuild/isopack-cache.js:73:24) at /tools/project-context.js:961:25 at Object.enterJob (/tools/utils/buildmessage.js:388:12) at ProjectContext._buildLocalPackages (/tools/project-context.js:960:18) at /tools/project-context.js:365:35 at Object.enterJob (/tools/utils/buildmessage.js:388:12) at ProjectContext._completeStagesThrough (/tools/project-context.js:355:18) at /tools/project-context.js:347:12 at Function.run (/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/tool-env/tools/tool-env/profile.ts:289:14) at ProjectContext.prepareProjectForBuild (/tools/project-context.js:346:13) at /tools/cli/commands-packages.js:2290:20 at Object.capture (/tools/utils/buildmessage.js:283:5) at Command.func (/tools/cli/commands-packages.js:2289:27) at /tools/cli/main.js:1534:15 { code: 'MODULE_NOT_FOUND', requireStack: [ '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/isobuild/bundler.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/isobuild/compiler.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/package-client.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/catalog/catalog-remote.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/catalog/catalog.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/tropohouse.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/meteor-services/config.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/meteor-services/auth.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/utils/http-helpers.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/packaging/warehouse.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/cli/main.js', '/Users/quatrava/.meteor/packages/meteor-tool/.2.11.0.1px97s8.nn7t++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/tools/index.js' ] } @angular/compiler and @angular/compiler-cli must be installed for AOT compilation! AOT compilation disabled! Ignore this if you are using AngularJS 1.X
The error is caused by some kind of ES Module mishap in version 13:
$ rm node_modules; ln -s node_modules-v13 node_modules
$ meteor node -e 'require("@angular/compiler")'
internal/modules/cjs/loader.js:977
throw new ERR_REQUIRE_ESM(filename);
^
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/quatrava/Dev/angular-meteor-base/node_modules-v13/@angular/compiler/fesm2015/compiler.mjs
at new NodeError (internal/errors.js:322:7)
at Module.load (internal/modules/cjs/loader.js:977:11)
at Function.Module._load (internal/modules/cjs/loader.js:819:12)
at Module.require (internal/modules/cjs/loader.js:1003:19)
at require (internal/modules/cjs/helpers.js:107:18)
at [eval]:1:1
at Script.runInThisContext (vm.js:134:12)
at Object.runInThisContext (vm.js:310:38)
at internal/process/execution.js:81:19
at [eval]-wrapper:6:22 {
code: 'ERR_REQUIRE_ESM'
}
$ rm node_modules; ln -s node_modules-v12 node_modules
$ meteor node -e 'require("@angular/compiler")'
$ rm node_modules; ln -s node_modules-v13 node_modules
$ meteor node -e 'require("@angular/compiler")'
internal/modules/cjs/loader.js:977
throw new ERR_REQUIRE_ESM(filename);
^
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/quatrava/Dev/angular-meteor-base/node_modules-v13/@angular/compiler/fesm2015/compiler.mjs
at new NodeError (internal/errors.js:322:7)
at Module.load (internal/modules/cjs/loader.js:977:11)
at Function.Module._load (internal/modules/cjs/loader.js:819:12)
at Module.require (internal/modules/cjs/loader.js:1003:19)
at require (internal/modules/cjs/helpers.js:107:18)
at [eval]:1:1
at Script.runInThisContext (vm.js:134:12)
at Object.runInThisContext (vm.js:310:38)
at internal/process/execution.js:81:19
at [eval]-wrapper:6:22 {
code: 'ERR_REQUIRE_ESM'
}
$ rm node_modules; ln -s node_modules-v12 node_modules
$ meteor node -e 'require("@angular/compiler")'
$
I pinned this down to the fact that Angular v13's @angular/compiler
started putting an exports
field in its (generated) package.json
, which Meteor doesn't support.
I'm having trouble digging down any further, precisely because the package.json
in @angular/compiler
releases appears to be generated by a combination of things called “Bazel“, “bazelisk”, “Ivy” and more.