我正在尝试为Google Closure Compiler使用的Electron创建一个extern。这是我的外观看起来像:
var electron = {};
electron.dialog = function() {};
electron.app = function() {};
electron.ipcRenderer = function() {};
electron.on = function() {};
electron.send = function() {};
electron.remote = function(){}; // {return{getGlobal: function(){}}};
electron.remote.getGlobal = function(a){};
electron.require = function() {};
electron.buildFromTemplate = function() {};
electron.popup = function() {};
electron.getCurrentWindow = function() {};
electron.showErrorBox = function() {};
electron.setTitle = function() {};
electron.setRepresentedFilename = function() {};
electron.showMessageBox = function() {};
electron.getPath = function() {};
electron.showSaveDialog = function() {};
electron.showOpenDialog = function() {};
var process = {
platform: {}
};
我遇到的问题是编译器没有保留getGlobal函数的函数名。我的原始源代码如下所示:
const electron = require('electron');
electron.remote.getGlobal('sharedObject')
运行编译器后,它最终看起来像这样:
var a = require("electron");
console.log(a.remote.D("sharedObject"));
a.remote.D应该是a.remote.getGlobal
如何让编译器保留getGlobal函数名?
答案 0 :(得分:0)
我将原始源代码更改为现在看起来像这样:
electron.remote' getGlobal'
编译器将保留名称。这是因为编译器始终保持字符串不变。编译代码现在看起来像这样:
console.log(a.remote.getGlobal("sharedObject"));
尽管编译器没有识别extern文件中的getGlobal函数,但仍然是个谜。也许它只能处理嵌套在其根对象一层深处的函数(而在这里,它是两个级别)。另一个原因可能与编译器如何执行其多相编译有关,这在处理嵌套函数时存在一些缺陷。