12

Let I have a file index.js with content

var a = 1;

I have index.html file which include index.js using <script> tag. When I open index.html page in browser, then the a variable can be accessed directly in browser console. Because a have global scope and it is global variable.

Now I am using npm and webpack. My package.json file content is

"scripts": {
  "build": "webpack"
},

and webpack.config.js file content is

module.exports = {
entry: './index.js',
output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
}

Now I run npm build then new file is created in dist folder named bundle.js.

Now I replace index.js from script tag of index.html file with dist/bundle.js .

Now I run index.html in browser, but variable a is no longer access in browser console directly. It is not a global variable now.

My question is : Is there a way by which we can access variable a globally just like we access initially?

I have not found exact answer on internet. I found a loader expose-loader but it also can't solve my problem.

AnilRedshift
  • 7,937
  • 7
  • 35
  • 59
Meraj Ahmed
  • 268
  • 1
  • 6
  • 14

1 Answers1

11

When webpack bundles your javascript it wraps all of your individual files/modules in functions so they are no longer run in the global scope, therefore if you want to make a variable global you have to explicitly set it on the window object, i.e.

window.a = 1;

This will make a accessible from the browser console in index.html.

pretzelhammer
  • 13,874
  • 15
  • 47
  • 98
  • 7
    I have many variable and functions defined globally in many files. By this way I have to change at many places of all javascript file. Is there any simple way – Meraj Ahmed Jul 16 '18 at 06:54
  • Don't know why I didn't think of this. ‍♂️ Sometimes the best answers are the simplest and most obvious. Thank you! :) – rinogo Oct 16 '21 at 23:41