外部

时间:2017-05-31 06:48:17

标签: google-closure-compiler

我正在尝试为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函数名?

1 个答案:

答案 0 :(得分:0)

我将原始源代码更改为现在看起来像这样:

  

electron.remote' getGlobal'

编译器将保留名称。这是因为编译器始终保持字符串不变。编译代码现在看起来像这样:

console.log(a.remote.getGlobal("sharedObject"));

尽管编译器没有识别extern文件中的getGlobal函数,但仍然是个谜。也许它只能处理嵌套在其根对象一层深处的函数(而在这里,它是两个级别)。另一个原因可能与编译器如何执行其多相编译有关,这在处理嵌套函数时存在一些缺陷。