Electron: demande de fonctionnalité : API pour obtenir le chemin du dossier du code source de l'application

Créé le 16 mai 2015  ·  3Commentaires  ·  Source: electron/electron

Quand je fais par exemple cd myapp/ et electron app.js , la sortie de process.cwd() est /Users/maxogden/myapp .

Cependant, lorsque je package + lance mon application à l'aide d' electron-packager , ce qui signifie que mon application se trouve maintenant dans le dossier Contents/Resources/app dans une copie modifiée du Electron.app officiel de la page des versions , process.cwd() est / .

Je ne sais pas pourquoi Electron décide d'exécuter mon application avec process.cwd défini sur / , mais c'est ainsi que cela fonctionne, et si vous exécutez process.cwd() dans la console dans Atom .app, vous obtiendrez également / .

Mon problème est que je n'ai aucun moyen d'obtenir le chemin d'accès aux fichiers source de l'application, le seul moyen serait de capturer la valeur de __dirname dans le script exécutable principal de l'application, mais ce n'est pas une bonne solution pour des cas comme ma barre de menus de module , où l'API est actuellement celle-ci :

var menubar = require('menubar')
var mb = menubar()
mb.on('ready', function ready () {
  console.log('app is ready')
})

Mais cela ne fonctionne pas lorsqu'il est emballé dans un conteneur d'application, car la barre de menus recherche la page des utilisateurs index.html à charger en utilisant process.cwd() ici , mais parce que process.cwd() est / au lieu de /Users/maxogden/myapp/Example.app/Contents/Resources/app il ne trouve pas index.html et l'application ne se charge pas.

Les applications de nœud en général n'ont pas ce problème car process.cwd() est toujours fiable, le problème est causé par le fait que process.cwd() est défini sur / (cela pourrait être une chose Mac OS X, qui sait).

Pour résoudre ce problème, je peux demander aux utilisateurs qui utilisent la barre de menus de transmettre __dirname , mais ce n'est ni idéal ni convivial.

Je propose l'une de ces solutions pour résoudre ce problème :

  • remplacez le process.cwd() par le dossier réel de l'application
  • ajouter une nouvelle option à app.getPath qui renvoie le chemin du dossier de l'application

Commentaire le plus utile

Découvrez process.resourcesPath , c'est essentiellement ce que vous décrivez pour la 2ème option

Tous les 3 commentaires

Découvrez process.resourcesPath , c'est essentiellement ce que vous décrivez pour la 2ème option

@paulcbetts ahhhhhh merci, je n'avais même pas réalisé https://github.com/atom/electron/blob/cd0aa4a956cb7a13cbe0e12029e6156c3e892924/docs/api/process.md#process -object existait (je ne m'attendais pas à ce que l'électron fasse process monkeypatch

Avait ce problème dans atom où path.resolve('something') se résoudrait à /something . Il a cassé tslint pour moi. Cela a aidé :

ouvrez init.coffee (Atom > Preferences > Init Script...) et ajoutez :

process.chdir(atom.project.getPaths()[0])
Cette page vous a été utile?
0 / 5 - 0 notes