Jsdom: ReferenceError: globalThis não está definido

Criado em 14 jan. 2020  ·  13Comentários  ·  Fonte: jsdom/jsdom

Informação básica:

  • Versão Node.js: v10.16.1 (na verdade, todas as versões v10)
  • versão jsdom

Caso de reprodução mínima

const { JSDOM } = require("jsdom");

const options = {
  runScripts: "dangerously"
};
const dom = new JSDOM(``, options);

Então você verá o erro, uma vez que Node.js não oferece suporte a globalThis, mas js-globals.json inclui globalThis e runInContext('globalThis', windowInstance) é executado em https://github.com/jsdom /jsdom/blob/master/lib/jsdom/browser/Window.js#L48

ReferenceError: globalThis is not defined
    at evalmachine.<anonymous>:1:1
    at Script.runInContext (vm.js:133:20)
    at Object.runInContext (vm.js:311:6)
    at setupWindow (/Users/clark/projects/nuxt.js/node_modules/jsdom/lib/jsdom/browser/Window.js:49:55)
    at new Window (/Users/clark/projects/nuxt.js/node_modules/jsdom/lib/jsdom/browser/Window.js:105:3)
    at new JSDOM (/Users/clark/projects/nuxt.js/node_modules/jsdom/lib/api.js:36:20)
    at repl:1:1
    at Script.runInThisContext (vm.js:122:20)
    at REPLServer.defaultEval (repl.js:332:29)
    at bound (domain.js:402:14)

Comentários muito úteis

Olá, @domenic , ainda
Configurar:

  • nó: v10.20 (aplica-se a 10x)
  • jsdom: v16.2.2
  • jest: v26.0.0
evalmachine.<anonymous>:1
    globalThis
    ^

    ReferenceError: globalThis is not defined

      at evalmachine.<anonymous>:1:1
      at setupWindow (../../node_modules/jsdom/lib/jsdom/browser/Window.js:51:55)
      at new Window (../../node_modules/jsdom/lib/jsdom/browser/Window.js:107:3)
      at exports.createWindow (../../node_modules/jsdom/lib/jsdom/browser/Window.js:38:10)
      at new JSDOM (../../node_modules/jsdom/lib/api.js:36:20)

Alguma ideia?

Todos 13 comentários

Obrigado por encontrar isso! Isso provavelmente funcionará no Node.js v13, mas pretendemos oferecer suporte à v10, então este é um bug. Tentaremos consertá-lo o mais rápido possível.

Parece que globalThis é compatível com a v8 7.0 e introduzida a partir do Node v11.

Obrigado pela resposta rápida 😃

BTW, eu gerei e comparei js-globals.json entre o Node v10 e um ao vivo atual, a única diferença é globalThis

Enfrentando o mesmo bug aqui.

Olá, @domenic , ainda
Configurar:

  • nó: v10.20 (aplica-se a 10x)
  • jsdom: v16.2.2
  • jest: v26.0.0
evalmachine.<anonymous>:1
    globalThis
    ^

    ReferenceError: globalThis is not defined

      at evalmachine.<anonymous>:1:1
      at setupWindow (../../node_modules/jsdom/lib/jsdom/browser/Window.js:51:55)
      at new Window (../../node_modules/jsdom/lib/jsdom/browser/Window.js:107:3)
      at exports.createWindow (../../node_modules/jsdom/lib/jsdom/browser/Window.js:38:10)
      at new JSDOM (../../node_modules/jsdom/lib/api.js:36:20)

Alguma ideia?

Você precisará postar um novo problema semelhante ao do OP, incluindo o caso de reprodução mínima (não envolvendo outra tecnologia como Jest).

FWIW, isso reproduz o problema:

// polyfill globalThis for older nodes
globalThis = global;
const { JSDOM } = require('jsdom');
new JSDOM('', {runScripts: 'dangerously'});

Definir globalThis para qualquer coisa irá reproduzir, eu apenas escolhi global para ser um tanto realista. Um polyfill ainda mais realista pode ser require('core-js'); que também quebrará, e _pode_ (eu não verifiquei) ser inserido por @babel/preset-env e / ou @babel/runtime .

Não tenho certeza se é necessariamente algo que precisa ser corrigido / alterado no JSDOM, mas pode ser mais robusto * ? De qualquer forma, espero que isso ajude as pessoas com esse problema a rastreá-lo. Não é o próprio Jest que faz isso.

* ) por exemplo, filtrar vm.runInContext('this', windowInstance) vez de global no contexto externo. Isso pode não ser viável, eu não brinquei com isso.

@clarkdo
global.globalThis = xxx
Eu uso essa maneira para corrigir esse problema no nó v.10.x. meu ambiente é o node v.10.x e há muitos aplicativos, não consigo atualizar a versão do node .... (estou com medo de fazer ....)

@clarkdo
global.globalThis = xxx
Eu uso essa maneira para corrigir esse problema no nó v.10.x. meu ambiente é o node v.10.x e há muitos aplicativos, não consigo atualizar a versão do node .... (estou com medo de fazer ....)

oi, onde (qual arquivo) você definiu esta linha:

global.globalThis = xxx

@pawellesniowski você pode incluir um arquivo js e definir esta linha no arquivo js.

globalthis / polyfill de https://github.com/es-shims/globalIsso resolve o problema para mim

meu caminho .... global.globalThis = global; ....

A solução para mim é usar esta biblioteca https://www.npmjs.com/package/jest-environment-jsdom que cria um ambiente jest jsdom com a versão jsdom de qualquer versão jest.

Por exemplo, usando jest-environment-jsdom versão 25, você usará o jsdom desta versão. E na brincadeira 25, a versão jsdom ainda era compatível com o nó 10

// package.jsom
    "jest-environment-jsdom": "25.5",
// jest config
      displayName: 'dom',
      testEnvironment: 'jest-environment-jsdom',
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mitar picture mitar  ·  4Comentários

jacekpl picture jacekpl  ·  4Comentários

lehni picture lehni  ·  4Comentários

tolmasky picture tolmasky  ·  4Comentários

JacksonGariety picture JacksonGariety  ·  4Comentários