generator-angular2-library: Cannot call a namespace ('moment')

My library uses moment import * as moment from 'moment'.

When I run gulp compile I hit this error. Error: Cannot call a namespace ('moment') at error (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:185:14) at Module.error (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:8170:3) at CallExpression.bind (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:6324:17) at eachChild.child (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5674:34) at keys.forEach.key (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5685:5) at Array.forEach (native) at ConditionalExpression.eachChild (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5678:13) at ConditionalExpression.bind (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5674:8) at eachChild.child (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5674:34) at keys.forEach.key (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5685:5)

This SO post suggesting change the import to import moment from 'moment' but it doesn’t work for me because I hit another error Module '"C:/SourceCodeNew/IndConsoleSvcProxy/node_modules/moment/moment"' has no default export.

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 17 (1 by maintainers)

Commits related to this issue

Most upvoted comments

My workarround:

import * as moment_ from 'moment';

const moment = moment_;

😃

FWIW, I ran into a similar problem, and solved it by adding

"esModuleInterop": true,

to my tsconfig.json. That lets you just import library from "library" from CommonJS libraries, instead of import * as library from 'library', and seems to be a little more forgiving to libraries that otherwise give Typescript trouble

Need to add this to tsconfig.es5.json “allowSyntheticDefaultImports”: true

With Angular 6 this workaround no longer works. Why is moment such a pain in the butt to work with in Angular applications!

import * as moment_ from ‘moment’; const moment = moment_;

Cannot call a namespace (‘moment_’) Error: Cannot call a namespace (‘moment_’)

edit: I retract my statement. After testing in a fresh project everything worked fine.

This workaround worked for us with Angular 6, but now broken again in Angular 7.

On a project I’m working on we had luck importing ‘moment’ like this: import moment, {Moment} from 'moment';

Tests run fine, and the command ng build <project> builds fine.

The setup we’re working in is as follows:

  • Angular: 8.2.13
  • Typescript: 3.5.3
  • moment: 2.24.0

this same issue pops up with import * as format from 'date-fns/format'; and the solution is the same:

import * as format_ from 'date-fns/format';
const format = format_;

What is special about moment and date-fns that typescript chokes like this? Like someone said earlier, I thought TS was a superset of JS?

Hi @logic01 , for me it’s working with v6, here. What versions are you using? (ng -v)

screen shot 2018-05-08 at 18 40 21

@Ismaestro @logic01 — Thank you for the update 👍

👍 Yes moment save my days when I have to work with dates…

I’m having the same issue as @KissBalazs with Angular 7