diff --git a/src/Module.js b/src/Module.js index 118dd506c11..7764a08748a 100644 --- a/src/Module.js +++ b/src/Module.js @@ -453,7 +453,12 @@ export default class Module { const declaration = this.declarations[ declarator.id.name ]; if ( declaration.exportName && declaration.isReassigned ) { // `var foo = ...` becomes `exports.foo = ...` - magicString.remove( statement.start, declarator.init ? declarator.start : statement.next ); + if ( declarator.init ) { + magicString.overwrite( statement.start, declarator.init.start, `exports.${declaration.exportName} = ` ); + } else { + magicString.remove( statement.start, declarator.init ? declarator.start : statement.next ); + } + return; } } diff --git a/test/function/disappearing-exported-value/_config.js b/test/function/disappearing-exported-value/_config.js new file mode 100644 index 00000000000..534c5ae06ba --- /dev/null +++ b/test/function/disappearing-exported-value/_config.js @@ -0,0 +1,9 @@ +var assert = require( 'assert' ); + +module.exports = { + description: 'exported values do not mysteriously disappear (#484)', + exports: function ( exports ) { + assert.equal( exports.exportedAnswer, 42 ); + assert.equal( exports.foo(), 42 ); + } +}; diff --git a/test/function/disappearing-exported-value/answer.js b/test/function/disappearing-exported-value/answer.js new file mode 100644 index 00000000000..1cdee138152 --- /dev/null +++ b/test/function/disappearing-exported-value/answer.js @@ -0,0 +1,2 @@ +var answer = 42; +export { answer }; diff --git a/test/function/disappearing-exported-value/main.js b/test/function/disappearing-exported-value/main.js new file mode 100644 index 00000000000..260980c371d --- /dev/null +++ b/test/function/disappearing-exported-value/main.js @@ -0,0 +1,8 @@ +import { answer as importedAnswer } from './answer.js'; +export { answer as exportedAnswer } from './answer.js'; + +export function foo () { + var value; + value = importedAnswer; + return value; +}