schmod / babel-plugin-angularjs-annotate

Add Angular 1.x dependency injection annotations to ES6 code
http://schmod.github.io/babel-plugin-angularjs-annotate
MIT License
240 stars 29 forks source link

does not work with anonymous function #17

Closed lili21 closed 7 years ago

lili21 commented 7 years ago

2017-01-11 5 56 18

schmod commented 7 years ago

@lili21 Can you post the source code of the function causing problems?

mattdsteele commented 7 years ago

I just ran into this as well.

Problematic code:

export default function ($timeout) {
    'ngInject';
    //etc
}

Seems to resolve with:

const directive = function ($timeout) {
    'ngInject';
    //etc
};

export default directive;
lili21 commented 7 years ago

or resolve with

export default function directive ($timeout) {
  'ngInject';
  ...
}

named function is required if you are using es2015 module.

also can be resolve with

module.exports = function ($timeout) {
  'ngInject';
  ....
mattdsteele commented 7 years ago

Another workaround is to use an arrow function, a la:

export default ($timeout) => {
    'ngInject';
    //etc
};
kfeinUI commented 7 years ago

Ran into this too. It's touchy when it comes to exports.

Would also be helpful if the errors provided a bit more information to help track down the issues. For example, if it doesn't know what to do with a node of a particular type then output the type and any other useful context.

MrSpider commented 7 years ago

I have a fix for this, but it's really hacky because of a bug in babel #5444. As soon as my babel PR gets merged, I am gonna make a PR here to fix this issue.

schmod commented 7 years ago

Thanks @MrSpider, and for tracking down the root bug too!

kfeinUI commented 7 years ago

I ended up taking babel-plugin-transform-export-default-name and extending it to additionally transform all function declarations into a separate named function which is then referenced by the export. By running that first, it makes it play nice with this plugin while also retaining function names

nynexman4464 commented 7 years ago

Ran into this recently. babel-plugin-transform-export-default-name worked. I wanted to paste the stacktrace here because above is an image which made this really hard to google.

ERROR in ./~/security-match-builder/src/match-components/min-date.js
Module build failed: TypeError: /Users/arock/dev/portal-security-config-ui/node_modules/security-match-builder/src/match-components/min-date.js: Cannot read property 'name' of null
    at judgeInjectArraySuspect (/Users/arock/dev/portal-security-config-ui/node_modules/babel-plugin-angularjs-annotate/ng-annotate-main.js:769:58)
    at /Users/arock/dev/portal-security-config-ui/node_modules/babel-plugin-angularjs-annotate/ng-annotate-main.js:588:13
    at Array.forEach (native)
    at judgeSuspects (/Users/arock/dev/portal-security-config-ui/node_modules/babel-plugin-angularjs-annotate/ng-annotate-main.js:560:19)
    at PluginPass.exit (/Users/arock/dev/portal-security-config-ui/node_modules/babel-plugin-angularjs-annotate/babel-ng-annotate.js:148:11)
    at newFn (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/visitors.js:276:21)
    at NodePath._call (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/path/context.js:76:18)
    at NodePath.call (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/path/context.js:48:17)
    at NodePath.visit (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/path/context.js:117:8)
    at TraversalContext.visitQueue (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/context.js:150:16)
    at TraversalContext.visitSingle (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/context.js:108:19)
    at TraversalContext.visit (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/context.js:192:19)
    at Function.traverse.node (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/index.js:114:17)
    at traverse (/Users/arock/dev/portal-security-config-ui/node_modules/babel-traverse/lib/index.js:79:12)
    at File.transform (/Users/arock/dev/portal-security-config-ui/node_modules/babel-core/lib/transformation/file/index.js:558:35)
    at /Users/arock/dev/portal-security-config-ui/node_modules/babel-core/lib/transformation/pipeline.js:50:19
    at File.wrap (/Users/arock/dev/portal-security-config-ui/node_modules/babel-core/lib/transformation/file/index.js:574:16)
    at Pipeline.transform (/Users/arock/dev/portal-security-config-ui/node_modules/babel-core/lib/transformation/pipeline.js:47:17)
    at transpile (/Users/arock/dev/portal-security-config-ui/node_modules/babel-loader/lib/index.js:46:20)
    at Object.module.exports (/Users/arock/dev/portal-security-config-ui/node_modules/babel-loader/lib/index.js:163:20)
 @ ./~/security-match-builder/src/match-components/index.js 11:0-50
 @ ./~/security-match-builder/src/security-match-builder.js
 @ ./src/app.js
schmod commented 7 years ago

fixed in 0.8.0