question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

frustrated with the global variable like $!!!

See original GitHub issue

fist of all ,thanks for your effort to the great tool

and then there is an question frustrating me for a long time; here it is : global variable for this cli-tool; for example: if we want to use $ variable as in global way, the suggestion way of our cli is editing the “script:[]” in the file “.angular-cli.json”; in this senario: we can get a script.bundel.js when server running; but the the ‘$’ is limtted in the script.bundel.js,not be shared,it’s a ‘fake global’; that’s say if we use other libary based on jquery ‘$’ not included in the ‘script:[]’,the ‘$’ can’t be accessed!we have to do some work like ’ import * as $ from jquery’ but in this way,we will get an error like ‘$ is not defined’;

so,we have to leave the ‘script:[]’ empty.and then verything is go well,but the $ is not global; that’s to say:either we include all the libary in the ‘script:[…]’ or left it empty; they can never coexist; to say the least,even ,we can included all the libary files in the ‘script:[]’ the script.bundel.js file may very large size ,that’s not good idea;

IMHO,I know we create this cli too not for expert,just for out of the box using; so maybe we don’t encurage to do more complex job on config webpack. i really agree with this!

In sum,we just want to find a way to set ‘real global’ variable like config setting in webpack.config.js:

plugins:[new webpack.ProvidePlugin({
		  jQuery: 'jquery',
		  $: 'jquery',
		  jquery: 'jquery'
		}) ];

so,how we go through this question?

thank you again.

Issue Analytics

  • State:closed
  • Created 7 years ago
  • Reactions:2
  • Comments:9 (3 by maintainers)

github_iconTop GitHub Comments

3reactions
afontainecommented, Mar 1, 2017

You can run ng eject which ejects the webpack configuration, allowing you to modify it and add a ProvidePlugin.

2reactions
filipesilvacommented, Mar 2, 2017

Regarding webpack.ProvidePlugin, there are no plans to add it in the CLI. It requires outside information that cannot be easily inferred, and doesn’t provide as strong interop as global script support.

Supporting global script interop with typescript is rather easy and intuitive (imho), especially for people that aren’t webpack wizards. And if you are a webpack wizard and 100% must have ProvidePlugin, then eject is just perfect for you.

I’m going to cross post my answer (https://github.com/angular/angular-cli/pull/3814#issuecomment-283630346) to your other comment here for visibility:


Ah so semantic is a jquery plugin? You never told me that 😃

Then it really depends on how that plugin functions unfortunately.

The global and local jquery instances are completely separate as that is the only way to ensure functionality.

When you add jquery to scripts it’s exactly the same as adding it as a script tag in index.html. jquery is then on the global scope.

But when you import it via an import statement, you get a second local copy, that is not the same as the one on the global scope. This is intended by design, since ES6 modules are isolated.

The local copy does not have that semantic plugin. It’s up to the plugin to provide import semantics compatibility. If that plugin only works by detecting jquery on the global scope then it cannot be used as a ES6 module.

For interop with packages that aren’t meant to be used as ES6 modules your best bet is to work with the global scope. That means that you add jquery and all those plugins to the script array, and never import them in your TS code.

Then you create a src/typings.d.ts file and add declare var $: any there. If you have the real jquery type use that instead of any. That basically tells TypeScript to just assume there is a variable called $ in the global scope.

Then when you use it in your code you are using the global one and not a locally imported one. That global one has all the legacy jquery plugins you added.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Global Variables and States: Why So Much Hate?
Global variables are a common pitfall many developers fall into. Let's take a look why, and how we can fix this problem.
Read more >
Global Variables are Evil and Unsafe - ForrestTheWoods
It is my opinion that global variables are evil and unsafe and should be avoided. Using globals introduces bugs, complexity, and unwarranted ...
Read more >
What exactly makes global variables so bad? : r/Python - Reddit
However, the community opinion seems to be that any usage of global variables is a bad thing, and I'm having a hard time...
Read more >
When is it ok to use a global variable in C? - Stack Overflow
It is misleading to suggest that global variables are a liability in multi-threaded applications as ANY variable, regardless of scope, is a ...
Read more >
Global Variables | Why Use Them? - Codecademy
It seems that the rule of thumb is to avoid global variables by using var to ... and carefully write our code so...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found