javascriptnode.jsecmascript-6es6-moduleses6-module-loader

Modifying an imported variable causes 'Assignment to constant variable' even if it is not a constant


I have two files, file1 exports a variable 'not a constant' var x=1 and file2 which imports this variable from it

the problem is that I canno't modify that imported variable even it is not a constant!

file1.js

export var x=1 //it is defined as a variable not a constant

file2.js

import {x} from 'file1.js'
console.log(x) //1
x=2 //Error: Assignment to constant variable

Solution

  • That's an effect of the immutable exported module values. You can override that with another function in the same module

    In your file 1 :

    export let x = 1;
    export function modifyX( value ) { x = value; }
    

    In your file 2

    import { x, modifyX } from "file1.js"
    
    console.log( x ) // 1;
    modifyX( 2 );
    console.log( x ) // 2;