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)
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:
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',
Comentários muito úteis
Olá, @domenic , ainda
Configurar:
Alguma ideia?