web-dev-qa-db-fra.com

Comment revenir au niveau 1 dossier avec __dirname?

J'utilise gulp-karma et je suis confronté à un problème simple mais ne semble pas trouver ce que je fais mal.

gulp.task('test', function (done) {
    karma.start({
        configFile: __dirname + '..\\test\\' +'\karma.conf.js',
        singleRun: true
    }, done);
});

Voici le code que j'utilise et je n'arrive pas à remonter d'un niveau dans le répertoire des dossiers. Quand je fais ce qui précède, il suffit d'ajouter le ..\ dans le dossier direcotry sans remonter d'un niveau (ce qui est l'usage habituel de ..\). Voici la structure des dossiers.

parent|
      test|karma.conf.js
      webapirole|gulpfile.js

et mon dossier se trouve dans le dossier webapirole . je veux revenir en arrière 1 dossier en arrière et aller dans le dossier de test qui contient le fichier karma.conf.js. quelqu'un peut-il me faire comprendre ce que je fais mal ici?

erreur que j'obtiens

[18:06:32] Starting 'tdd'...
ERROR [config]: File C:\Users\Documents\WebApiRole..\test\karma.conf.js does not exist
16
Malik

J'utilise (chemin) NPM pour l'utilisation ci-dessus ......

nécessite simplement chemin npm dans le fichier js.

let reqPath = path.join(__dirname, '../../../');//It goes three folders or directories back from given __dirname.
18
Vemula Abilash

__dirname n'est qu'une chaîne. vous pouvez utiliser ../ pour parcourir la structure du dossier et path.join pour résoudre le chemin

path = require('path')

configFile: path.join(__dirname, '../test/karma.conf.js'),
10
Vikash Anand

du répertoire racine

(path.join(__dirname , 'views' ,'main.html')) -> will return Root:/views/main.html

à partir de n'importe quel sous-dossier de Root

(path.join(__dirname , '../views/main.html')) -> same as above
3
dan brown

Essayez de mettre un \\ avant le ..\\.

Sans cela, le chemin de votre génération a un dossier appelé WebApi... en fait partie. Vous pouvez le voir dans le chemin en cours de sortie du message d'erreur.

Comme ça:

gulp.task('test', function (done) { 
  karma.start({ configFile: __dirname + '\\..\\test\\' +'\karma.conf.js', singleRun: true }, done); 
});

Vous pouvez également envisager d'utiliser la bibliothèque path de npm. Il facilite la combinaison de chemins en gérant l'ajout et la suppression de caractères de séparation de chemin supplémentaires si nécessaire.

2
Jim Simon

si vous envoyez le chemin sous forme de chaîne,

configFile: path.join(__dirname+'../test/karma.conf.js'),

ça ne marche pas.

Au lieu de cela, vous devez utiliser une virgule (le signe plus concatène les deux chaînes)

configFile: path.join(__dirname, '../test/karma.conf.js'),
2
dilanSachi

ajoutez simplement \ avant ..\test.

0
Vasu Ch

TL; DR

Utilisez path.join(__dirname, '..', 'test', 'karma.conf.js'). Empêchez l'utilisation de barres obliques.

Réponse longue

Comme beaucoup de réponses l'ont souligné, l'utilisation du module path est probablement le meilleur moyen. Cependant, la plupart des solutions ici ont recommencé à utiliser des barres obliques comme:

path.join(__dirname+'../test/karma.conf.js')

Cependant, en faisant cela, vous battez l'objectif d'utiliser path. On utilise le chemin pour effectuer des opérations quel que soit le système d'exploitation sous-jacent (Linux, Windows, etc.). Juste pour donner un aperçu, vous pouvez effectuer les opérations de chemin directement en tant qu'opérations de chaîne (comme __dirname + '../test/karma.conf.js'. Vous ne le faites pas car Linux utilise des barres obliques (/), Windows utilise des barres obliques (\). Cette rend votre application sujette aux erreurs lorsque vous la portez sur plusieurs systèmes d'exploitation.

Ainsi, la meilleure façon serait:

path.join(__dirname, '..', 'test', 'karma.conf.js')

Et bien sûr, revenez - empêchez l'utilisation de barres obliques dans votre path.join, À la place répartissez vos paramètres.

0
Pranav Totla