Я хочу написать плагин babel, который блокирует глобальные переменные, такие как document
и xhr
, из части кода。 Но я не знаю, как определить, принадлежит ли он window
.
Пример:
function queryClass(name){
return document.querySelector(`.${name}`);
// or return window.document.querySelector(`.${name}`)
}
Я надеюсь, что это превращается в это
function queryClass(name){
return noDocument.querySelector(`.${name}`);
// or return window.noDocument.querySelector(`.${name}`)
}
Но я не хочу, чтобы этот код был преобразован:
const document = {querySelector(str){return str + '1'}}
function queryClass(name){
return document.querySelector(`.${name}`);
// or return obj.document.querySelector(`.${name}`)
}
ТакЯ думаю, что я должен научиться судить, если это глобальная переменная.Или есть другой способ помочь мне достичь этого?Это мой простой код Babel:
const babel = require("@babel/core");
const code = `
function queryClass(name){
return window.document.querySelector(\`.\${name}\`);
}
`;
const visitor = {
Identifier(path) {
if(path.isIdentifier({name: 'document'})){
// How to judge if it's a global variable
path.node.name = 'noDocument';
}
}
}
const result = babel.transform(code, {
plugins: [{visitor}]
});