2017-03-29 3 views
3

Ich lese viel über browserify und electron und die GUI-Browser Ausgabe noch gibt es ein Problem mit browserify, sagen "fs.existsSync ist keine Funktion", und „erforderlich ist, nicht definiert“Elektron, nach browserify, fs.existsSync ist keine Funktion

* die ganze Geschichte * i einfache gui erstellt mit Elektronen, gibt es die package.json Datei, die main.js und die Datei index.html + 3,4 hTML-Dateien , wo ich will einfach erstellen "laden Show speichern Fenster", die mit benötigen

Diese Funktion arbeitete in der index.html-Datei y et funktioniert nicht richtig in der load.html Datei, so dass ich browserify die main.js mit den Befehlen

var fs = require('electron') 
 
//console.log(require('fs').existsSync); 
 
var remote = require('electron').remote; 
 
// var remote = require('remote'); 
 
var dialog = require('electron').remote

in main.bundle3.js, mit (in der cmd)

browserify main.js > main.bundle3.js 

noch, dann rief der load.html Datei, und

> main.bundle3.js:6945 Uncaught TypeError: fs.existsSync is not a function 
    at Object.<anonymous> (main.bundle3.js:6945) 
    at Object.require.36.fs (main.bundle3.js:6951) 
    at s (main.bundle3.js:1) 
    at main.bundle3.js:1 
    at Object.<anonymous> (main.bundle3.js:6794) 
    at Object.require.35._process (main.bundle3.js:6937) 
    at s (main.bundle3.js:1) 
    at e (main.bundle3.js:1) 
    at main.bundle3.js:1 
(anonymous) @ main.bundle3.js:6945 
require.36.fs @ main.bundle3.js:6951 
s @ main.bundle3.js:1 
(anonymous) @ main.bundle3.js:1 
(anonymous) @ main.bundle3.js:6794 
require.35._process @ main.bundle3.js:6937 
s @ main.bundle3.js:1 
e @ main.bundle3.js:1 
(anonymous) @ main.bundle3.js:1 
nicht definieren erforderlich ist

Die package.json

{ 
 
    "name": "RDF", 
 
    "version": "0.1.0", 
 
    "main": "main.js", 
 
    "scripts": { 
 
    "test": "mocha -u exports -R spec test/index" 
 
    }, 
 
    "devDependencies": { 
 
    "electron": "^1.6.2", 
 
    "electron-packager": "^8.6.0", 
 
    "html-browserify": "0.0.6", 
 
    "jquery": "^3.2.1" 
 
    } 
 
}
und load.html Datei

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <meta charset="UTF-8"> 
 
    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script> 
 
<!--<script src="main.js"></script>--> 
 
    <script src="main.bundle3.js"></script> 
 
    <!-- <script type="text/javascript" src="main.js"></script> --> 
 
     <script type="text/javascript" src="./lib/jquery-1.7.2.min.js"></script> 
 
</head> 
 
     <body> 
 
<h3>LOAD</h3> 
 
<p>load the data</p> 
 
<!-- 
 
<input type="button" value="Details" onclick="javascript:$('#mainContainer').load('index.html');"/><br> 
 
<div id="mainContainer"> </div>--> 
 

 
<div id="tab33"> 
 
    <div> 
 
     <div style="text-align:center;"> 
 
      <input type="text" placeholder="just select a file" id="actual-file" disabled="disabled"/> 
 
      <input type="button" value="Choose a file" id="select-file"/> 
 
     </div> 
 
     <br><br> 
 
     <textarea id="content-editor" rows="5"></textarea><br><br> 
 
     <input type="button" id="save-changes" value="Save changes"/> 
 
     <input type="button" id="delete-file" value="Delete file"/> 
 
    </div> 
 
    <hr> <div style="text-align:center;"> 
 
     <p> he file content will be the same as the editor. </p> 
 
     <input type="button" value="Choose a file" id="create-new-file"/> 
 
    </div> 
 
     <script> 
 
     var fs = require('fs') 
 
     var {remote} = require('electron').remote ; 
 
     var {dialog} = require('electron').remote 
 

 
     document.getElementById('select-file').addEventListener('click',function(){ 
 
      dialog.showOpenDialog(function (fileNames) { 
 
       if(fileNames === undefined){ 
 
        console.log("No file selected"); 
 
       }else{ 
 
        document.getElementById('actual-file').value = fileNames[0]; 
 
        readFile(fileNames[0], fileReadComplete); 
 
       } 
 
      }); 
 
     },false); 
 
    // 
 
      document.getElementById('save-changes').addEventListener('click',function(){ 
 
      var actualFilePath = document.getElementById("actual-file").value; 
 

 
      if(actualFilePath){ 
 
       saveChanges(actualFilePath,document.getElementById('content-editor').value); 
 
      }else{ 
 
       alert("just select a file first"); 
 
      } 
 
     },false); 
 
    // 
 
     document.getElementById('delete-file').addEventListener('click',function(){ 
 
      var actualFilePath = document.getElementById("actual-file").value; 
 

 
      if(actualFilePath){ 
 
       deleteFile(actualFilePath); 
 
       document.getElementById("actual-file").value = ""; 
 
       document.getElementById("content-editor").value = ""; 
 
      }else{ 
 
       alert("just select a file first"); 
 
      } 
 
     },false); 
 

 
     document.getElementById('create-new-file').addEventListener('click',function(){ 
 
      var content = document.getElementById("content-editor").value; 
 

 
      dialog.showSaveDialog(function (fileName) { 
 
       if (fileName === undefined){ 
 
        console.log("You didn't save the file"); 
 
        return; 
 
       } 
 

 
       fs.writeFile(fileName, content, function (err) { 
 
        if(err){ 
 
         alert("An error ocurred creating the file "+ err.message) 
 
        } 
 

 
        alert("The file has been succesfully saved"); 
 
       }); 
 
      }); 
 
     },false); 
 
      function fileReadComplete(data) { 
 
      myData = data; 
 
      // Do whatever you want 
 
     } 
 
     function readFile(filepath, callback) { 
 
     fs.readFile(filepath, 'utf-8', function (err, data) { 
 
      if(err){ 
 
       alert("An error ocurred reading the file :" + err.message); 
 
       return; 
 
      } 
 
      callback(data); 
 
      document.getElementById("content-editor").value = data; 
 
     }); 
 
    } 
 

 
     function deleteFile(filepath){ 
 
      fs.exists(filepath, function(exists) { 
 
       if(exists) { 
 
        // File exists deletings 
 
        fs.unlink(filepath,function(err){ 
 
         if(err){ 
 
          alert("An error ocurred updating the file"+ err.message); 
 
          console.log(err); 
 
          return; 
 
         } 
 
        }); 
 
       } else { 
 
        alert("This file doesn't exist, cannot delete"); 
 
       } 
 
      }); 
 
     } 
 

 
     function saveChanges(filepath,content){ 
 
      fs.writeFile(filepath, content, function (err) { 
 
       if(err){ 
 
        alert("An error ocurred updating the file"+ err.message); 
 
        console.log(err); 
 
        return; 
 
       } 
 

 
       alert("The file has been succesfully saved"); 
 
      }); 
 
     } 
 
    </script> 
 
    </div> 
 

 
<!-- <script data-main="main" src="require.js"></script>--> 
 
</body> 
 
</html>

die die main.js Datei in voller

//console.log(require('fs')); 
 
console.log(require('module').globalPaths); 
 
const { 
 
    electron 
 
} = require('electron'); 
 
const { 
 
    BrowserWindow 
 
} = require('electron') 
 
const { 
 
    app 
 
} = require('electron'); 
 
// @show(app) 
 
const path = require('path') 
 
//console.log(process.env.PATH); 
 
// (D:\electron-v1.6.1-win32-x64\resources\default_app.asr\main.js:325:5) 
 
//const BrowserWindow = require('browser-window') 
 
const url = require('url') 
 
var html = require('html-browserify'); 
 
var fs = require('electron') 
 
//console.log(require('fs').existsSync); 
 
var remote = require('electron').remote; 
 
// var remote = require('remote'); 
 
var dialog = require('electron').remote 
 
//dialog = require('electron').dialog 
 
//dialog =remote.require('dialog') 
 

 
//var load_=require('./load_.js') 
 
// broserify html 
 
var through = require('through'); 
 
var htmlclean = require('htmlclean'); 
 

 
module.exports = function(file, options) { 
 

 
    options = options || {}; 
 
    options.htmlclean = 
 
    typeof options.htmlclean !== 'undefined' 
 
     ?  options.htmlclean : true; 
 

 
    var buffer = ''; 
 

 
    if (!/\.(tpl|html)/.test(file)) { 
 

 
    return through(); 
 

 
    } else { 
 

 
    return through(function(chunk) { 
 

 
     return buffer += chunk.toString(); 
 

 
    }, function() { 
 

 
     var jst = buffer.toString(); 
 

 
     if (options.htmlclean) { 
 
     //options.htmlclean is truthy 
 

 
     if (typeof options.htmlclean === 'object') { 
 
      //options.htmlclean is an options object for the htmlclean module 
 
      jst = htmlclean(jst, options.htmlclean); 
 
     } else { 
 
      //otherwise, clean using default options 
 
      jst = htmlclean(jst); 
 
     } 
 
     } 
 

 
     var compiled = 'module.exports = '; 
 
     compiled += JSON.stringify(jst); 
 
     compiled += ';\n'; 
 

 
     this.queue(compiled); 
 
     return this.queue(null); 
 

 
    }); 
 

 
    } 
 

 
} 
 
//requirejs.config({ 
 
//By default load any module IDs from js/lib 
 
// baseUrl: 'js/lib', 
 
//except, if the module ID starts with "app", 
 
//load it from the js/app directory. paths 
 
//config is relative to the baseUrl, and 
 
//never includes a ".js" extension since 
 
//the paths config could be for a directory. 
 
//paths: { 
 
// app: ' ' 
 
//} 
 
//}); 
 

 
// Start the main app logic. 
 
//requirejs(['jquery', 'canvas', 'app/sub'], 
 
//function ($,  canvas, sub) { 
 
//jQuery, canvas and the app/sub module are all 
 
//loaded and can be used here now. 
 
//}); 
 
//const fs = require('fs'); 
 
//const app = require('electron').app. 
 
//const remote = require('electron').remote; 
 

 
    
 
// be closed automatically when the JavaScript object is garbage collected. 
 
let win 
 

 
function createWindow() { 
 
    // Create the browser window. 
 
    win = new BrowserWindow({ 
 
    width: 1050, 
 
    height: 814 
 
    }) 
 

 
    // and load the index.html of the app. 
 
    win.loadURL(url.format({ 
 
    pathname: path.join(__dirname, 'index.html'), 
 
    protocol: 'file:', 
 
    slashes: true 
 
    })) 
 

 
    // Open the DevTools. 
 
    win.webContents.openDevTools() 
 

 
    // Emitted when the window is closed. 
 
    win.on('closed',() => { 
 
    // Dereference the window object, usually you would store windows 
 
    // in an array if your app supports multi windows, this is the time 
 
    // when you should delete the corresponding element. 
 
    win = null 
 
    }) 
 
} 
 

 
// This method will be called when Electron has finished 
 
// initialization and is ready to create browser windows. 
 
// Some APIs can only be used after this event occurs. 
 
app.on('ready', createWindow) 
 

 
// Quit when all windows are closed. 
 
app.on('window-all-closed',() => { 
 
    // On macOS it is common for applications and their menu bar 
 
    // to stay active until the user quits explicitly with Cmd + Q 
 
    if (process.platform !== 'darwin') { 
 
    app.quit() 
 
    } 
 
}) 
 

 
app.on('activate',() => { 
 
    // On macOS it's common to re-create a window in the app when the 
 
    // dock icon is clicked and there are no other windows open. 
 
    if (win === null) { 
 
    createWindow() 
 
    } 
 
}) 
 

 
// In this file you can include the rest of your app's specific main process 
 
// code. You can also put them in separate files and require them here.

+0

Haben Sie keine Antwort - aber ist 'browserfy' relevant für eine Desktop-App? –

+0

in Elektron basiert die Anwendung auf dem Browser; Probleme mit "require (modul)" sind die gleichen Probleme, über die Leute in anderen browserbasierten Anwendungen sprechen, Anwendungen im Browser, z. B. Websites usw –

Antwort

1

Die konzeptionelle Lösung für dieses Problem: in "Elektron",
"{dialog} = require (Elektron)" (zB) in Tabs, wird nicht funktionieren

Dies ist, wie sie Elektron gebaut. wahrscheinlich die Stabilität zu erhöhen oder einfach nur ein Teil des Problems, das auf Chrom

im Hauptprozess basiert, können wir (Elektron) erfordern, wobei in Tabs, sind wir npm Module mit browserify *** überprüfen zum Beispiel erfordern what modules work where in electron

1

in Ordnung den Befehl

npm install browserify-fs 

und dann die

browserify -fs main.js >main.bundle.js 

löste das "fs.existsSnc keine Funktion", aber nicht das Problem. wahrscheinlich nur die fs aus dem problem entfernen. (Der Grund, dies zu präsentieren: diese Antwort in question about fs and browserify erschienen)

0

*** die technischen Lösung ist Dateien einen nach dem anderen aus der index.html-Datei zu verknüpfen, wo in jedem gibt es js Dateien, die mit

erfordern arbeiten

*** Der Fehler "fs.existsSync ist keine Funktion" ist ein allgemeiner Fehler. Erscheint dort, wo Probleme mit request() in Dateien auftreten, die nicht direkt mit den Hauptdateien (index.html und main) verbunden sind.js)

*** alle andere Lösungen fehlgeschlagen (viele werden im Internet von browserify, webpack, webview, requirejs und anderen)

1

Das Problem hat etwas mit der Methode zu tun. Um es zu beheben, sollten Sie window.require verwenden.

1

Wenn Sie stattdessen declare const window: any; bevor Sie Elektron benötigen, können Sie "Fenster" hinzufügen. zu Ihrer Anforderung aka const {...} = window.require('electron')...;