Skip to content

Instantly share code, notes, and snippets.

@dantman
Last active August 28, 2018 00:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dantman/81ab0e3f823ce287d1bd8b2a65b4ad52 to your computer and use it in GitHub Desktop.
Save dantman/81ab0e3f823ce287d1bd8b2a65b4ad52 to your computer and use it in GitHub Desktop.
Demonstration of the "Duplicate declaration" error in Babel.
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": 8
}
}
]
],
"plugins": [
["@babel/plugin-proposal-decorators", {"legacy": true}]
]
}

babel-duplicate-definition-error

Demonstration of the "Duplicate declaration" error in Babel.

git clone https://gist.github.com/81ab0e3f823ce287d1bd8b2a65b4ad52.git
cd 81ab0e3f823ce287d1bd8b2a65b4ad52/
npm install
npm start
TypeError: .../babel-duplicate-definition-error/index.js: Duplicate declaration "Foo"
  3 | export default function wrap() {
  4 |   return function() {
> 5 |           class Foo {
    |                 ^
  6 |                   @autobind
  7 |                   method() {}
  8 |           }
    at File.buildCodeFrameError (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/core/lib/transformation/file/file.js:259:12)
    at Scope.checkBlockScopedCollisions (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/scope/index.js:347:22)
    at Scope.registerBinding (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/scope/index.js:504:16)
    at Scope.registerDeclaration (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/scope/index.js:444:14)
    at Object.BlockScoped (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/scope/index.js:189:28)
    at Object.newFn (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/visitors.js:230:17)
    at NodePath._call (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/path/context.js:53:20)
    at NodePath.call (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/path/context.js:36:14)
    at NodePath.visit (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/path/context.js:88:12)
    at TraversalContext.visitQueue (/private/tmp/babel-duplicate-definition-error/node_modules/@babel/traverse/lib/context.js:118:16)
import {autobind} from 'core-decorators';
export default function wrap() {
return function() {
class Foo {
@autobind
method() {}
}
return Foo;
};
}
{
"name": "babel-duplicate-definition-error",
"version": "1.0.0",
"scripts": {
"start": "babel index.js"
},
"author": "Daniel Friesen <d@danf.ca>",
"license": "MIT",
"devDependencies": {
"@babel/cli": "^7.0.0",
"@babel/core": "^7.0.0",
"@babel/plugin-proposal-decorators": "^7.0.0",
"@babel/preset-env": "^7.0.0"
},
"dependencies": {
"core-decorators": "^0.20.0"
},
"private": true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment