Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular 10 Upgrade - Fix CommonJS or AMD dependencies can cause optimization bailouts

I am trying to upgrade my Angular 9 app to Angular 10 version, but getting below warning after the upgrade

WARNING in calendar.reducer.ts depends on lodash/keys. CommonJS or AMD dependencies can cause optimization bailouts. 

I have added below line to my angular.json file but issue is not resolved

"allowedCommonJsDependencies": ["lodash"] 

How can I fix above issue.

like image 513
rrr Avatar asked Jun 26 '20 06:06

rrr


People also ask

What is CommonJS angular?

CommonJS is a specification which helps to load modules from one file to other file. Two JavaScript developers will follow CommonJS specifications in order make their module communicate with each other. In order to make it work practically, one file gets exposed while the other file will be using that exposed file.

What are CommonJS modules?

Getting Started. From a structure perspective, a CommonJS module is a reusable piece of JavaScript that exports specific objects made available to any dependent code. Unlike AMD, there are typically no function wrappers around such modules (so we won't see define here, for example).


1 Answers

The npm package lodash itself is not an ECMAScript module and therefore produces the warning. There are multiple ways to fix this:

Replace with ES modulized library (recommended)

Some libraries offer ES modulized builds. In case of lodash, you can replace it with lodash-es.

Run npm install --save lodash-es.

Now replace all imports from lodash with lodash-es.

Also make sure to import the library with ES import statements:

import { keys } from 'lodash-es'; 

Whitelist CommonJS dependency

If there is no ES modulized build available for your library, or if you for some reason don't care, you can allow specific CommonJS dependencies in the angular.json file:

"architect": {   "build": {     "builder": "@angular-devkit/build-angular:browser",     "options": {       "allowedCommonJsDependencies": ["lodash"]     }   } }  

Since Angular CLI Version 10.0.1 you can use globs in allowedCommonJsDependencies. This means that if you pass lodash, the sub-paths (e.g. lodash/keys) will also be allowed.

Docs reference: https://angular.io/guide/build#configuring-commonjs-dependencies

like image 166
JSON Derulo Avatar answered Oct 14 '22 16:10

JSON Derulo