2017-04-11 2 views
0

J'ai deux fichiers js dans Electron (qui utilise Nodejs) et j'essaie d'exporter depuis un et en exiger un autre.Comment exporter un objet avec des méthodes et des propriétés

app.js:

App = { 
server: { 
    host: '192.168.0.5', 
    user: 'root', 
} 
ping: function() { 
} 
} 

exports.App = App 

J'ai essayé tous les moyens possibles d'exportation, y compris module.exports = App, module.exports.App = App et ainsi de suite.

ping.js première tentative:

var App = require('../app.js') // I have also tried adding .App to the end 
console.log(App) // This returns an object which contains the App object 

ping.js seconde tentative:

var App = require('../app.js') 
App.x = 'y' 
console.log(App) // this returns an object which contains the App object and the x property 

Il peut sembler que App contient un autre objet App, mais console.log(App.App) dit qu'il n'existe pas.

Répondre

1

La première chose que je ferais à résoudre ce ne serait pour vous assurer que j'utilise le chemin complet du module requis, comme dans:

const Path = require('path') 
const App = require(Path.join(__dirname,'../app')) // the .js isn't needed here. 

Notez que cela suppose que le fichier est app.js dans le répertoire parent immédiat de celui dans lequel l'application s'exécute. Si cela ne fonctionne pas, je m'assurerais que les fichiers sont là où vous pensez qu'ils sont, et que le processus que vous exécutez est situé dans le système de fichiers où vous pensez que c'est. Vous pouvez déterminer en ajoutant ceci au haut de votre fichier principal de script:

console.log("current working directory:",process.cwd()) 

Ou dans ES6:

console.log(`current working directory: %s`, process.cwd()) 

Si le répertoire imprimé ne correspond pas à vos hypothèses, modifier votre déclaration require en conséquence .

Et pour l'enregistrement, la "bonne" façon d'exporter votre carte App serait de:

const App = { 
    ... 
} 
module.exports = App 

Ou en utilisant ES7:

export default App = { 
    ... 
} 

(Voir export pour plus sur les modules de ES7.)

de toute façon, vous auriez alors besoin du module comme:

const App = require(PATH_TO_APP) 
+0

J'ai trouvé le problème. J'utilisais 'require ('app.js')' depuis index.html, mais 'ping.js' était uniquement requis depuis' app.js'. J'ai ajouté 'require ('ping.js')' dans index.html et cela a fonctionné. – Alex