bevacqua / dragula

:ok_hand: Drag and drop so simple it hurts
https://bevacqua.github.io/dragula/
MIT License
22.07k stars 1.97k forks source link

Angular 7: Uncaught ReferenceError: global is not defined when adding package #602

Open 3xLogicJamesTays opened 5 years ago

3xLogicJamesTays commented 5 years ago

I am building an Angular 7 app, and when i add a packagenpm install dragula and import this into thepollyfills.tsfile i get this error:

index.js:2 Uncaught ReferenceError: global is not defined at Object../node_modules/custom-event/index.js (index.js:2) at webpack_require (bootstrap:83) at Object../node_modules/crossvent/src/crossvent.js (crossvent.js:3) at webpack_require (bootstrap:83) at Object../node_modules/dragula/dragula.js (dragula.js:4) at webpack_require (bootstrap:83) at Module../src/polyfills.ts (polyfills.ts:1) at webpack_require (bootstrap:83) at Object.1 (polyfills.ts:92) at webpack_require (bootstrap:83)

When I googled it everyone says to add this(window as any).global = window; to pollyfills.ts I have done this and I still get the error. I also ready to delete the node_modules folder and npm iI have done this as well.

I do not know what else to do here. can anyone please tell me some sugestions or at least explain why this would happen?

This may not be relevant but I'm going to add it as well. There is another error which wasnt there before I imported them into pollyfills.ts

accordion-group.component.ts:9 Uncaught ReferenceError: global is not defined at Module../src/app/components/accordion/accordion-group.component.ts (accordion-group.component.ts:9) at webpack_require (bootstrap:83) at Module../src/app/components/accordion/accordion.module.ts (accordion.component.ts:10) at webpack_require (bootstrap:83) at Module../src/app/shared/shared.module.ts (window.extensions.ts:15) at webpack_require (bootstrap:83) at Module../src/app/app.module.ts (app.constants.ts:17) at webpack_require (bootstrap:83) at Module../src/main.ts (main.ts:1) at webpack_require (bootstrap:83)

  • [ ] Read the contributing guidelines
  • [ ] Bug reports containing repro steps are likely to be fixed faster
  • [ ] Feature requests should be multi-purpose, describe use cases
  • [ ] For support requests or questions, please refer to our Slack channel
hijoncon commented 5 years ago

Add this in your polyfills.ts

if (typeof (window as any).global === 'undefined') {
  (window as any).global = window;
}
Mwoagh commented 5 years ago

Same problem, I tried the suggestion by hijoncon but it doesn't solve the problem. BTW, like me, 3xLogicJamesTays already had (window as any).global = window; I don't see how adding the if-statement would help.

dcantatore commented 4 years ago

@3xLogicJamesTays Can you provide a working example of this?

hexcowboy commented 3 years ago

Fixed by adding this to vite.config.ts

export default defineConfig({
  ...
  define: {
    "global": {},
  },
});
jamesjessian commented 2 years ago

Just to follow a bit further on hexcowboy's solution, for those who don't have a vite.config.js already, this is what I used:

import { defineConfig } from 'vite'

export default defineConfig({
  define: {
    global: {},
  },
})
adenta commented 2 years ago

@jamesjessian @hexcowboy This page seems to indicate global should not be defined this way šŸ¤” .

Any thoughts? Like this solution seemingly works locally, but I get issues when I build for production.

hexcowboy commented 2 years ago

@jamesjessian @hexcowboy This page seems to indicate global should not be defined this way šŸ¤” .

Any thoughts? Like this solution seemingly works locally, but I get issues when I build for production.

Honestly I have no idea, I gave up this framework after trying to solve this issue for so long. The global object should be of type Window in a browser, so @hijoncon answer should work in production builds.

yarapolana commented 2 years ago

Having the same issue, using the solution @hexcowboy gave, works only in development mode. When I try to build for the production version, it gives all sorts of errors, but if I remove the implementation it builds normally.

xingorg1 commented 2 years ago

I encountered the same problem šŸ˜­šŸ˜­šŸ˜­, and finally solved it with the following code :

<!-- your index.html -->
<script>
/**
 * this is a hack for dragula
 * error: global is not defined
 */
var global = global || window
</script>
geneshairzan commented 2 years ago
import { defineConfig } from 'vite'

export default defineConfig({
  define: {
    global: {},
  },
})

it doesnt cause error when build on me. my config :

import { defineConfig } from 'vite'

export default defineConfig({
  define: {
    global: "window",
  },
})
isimmons commented 1 year ago

Can't do this one when using storybook

import { defineConfig } from 'vite'

export default defineConfig({
  define: {
    global: {},
  },
})

storybook 7 at least, has a long list of errors when building for production

I placed the following in my main.ts file. Solution Here

window.global ||= window;
amk221 commented 10 months ago

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis

<script>
  globalThis.global = globalThis;
</script>
ItaloCobains commented 6 months ago

@amk221 this work to me. thank you