2017-05-31 1 views
0

J'essaie de créer un extern pour Electron qui est utilisé par le compilateur Google Closure. C'est ce que mes externs ressemblent:Fermeture Fonction de renommage du compilateur en externe

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: {} 
}; 

Le problème que j'ai est que le compilateur ne conserve pas le nom de la fonction pour la fonction getGlobal. Mon code source original ressemble à ceci:

const electron = require('electron'); 
electron.remote.getGlobal('sharedObject') 

Après avoir exécuté le compilateur, il finit par ressembler à ceci:

var a = require("electron"); 
console.log(a.remote.D("sharedObject")); 

a.remote.D devrait vraiment être a.remote.getGlobal

Comment puis-je obtenir le compilateur pour conserver le nom de la fonction getGlobal?

Répondre

0

j'ai changé mon code source d'origine pour ressembler à ceci:

electron.remote'getGlobal »

Le compilateur conservera le nom. C'est parce que le compilateur garde toujours les chaînes intactes. Le code de compilation ressemble maintenant à ceci:

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

Il est encore un mystère bien pourquoi le compilateur ne reconnaît pas la fonction getGlobal dans le fichier extern. Peut-être ne peut-il gérer que des fonctions imbriquées à un niveau de profondeur de leur objet racine (alors qu'ici, il s'agit de deux niveaux). Une autre raison peut être liée à la façon dont le compilateur effectue sa compilation multiphase, ce qui est quelque peu biaisé dans le traitement des fonctions imbriquées.