How to go back 1 folder level with __dirname?

78,144

Solution 1

TL;DR

Use path.join(__dirname, '..', 'test', 'karma.conf.js'). Prevent use of slashes.

Long Answer

As a lot of answers have pointed out, using path module is probably the best way. However, most of the solutions here have gone back to using slashes like:

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

However, by doing this, you're beating the purpose of using path. One uses path to do operations irrespective of the underlying OS (Linux, Windows etc). Just to give a bit of insight, you can do the path operations directly as string operations (like __dirname + '../test/karma.conf.js'. You do not do this because Linux uses forward slashes ( / ), Windows uses backward slashes ( \ ). This makes your application prone to errors when you port it across operating systems.

Thus, the better way would be:

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

And of course, coming back - prevent use of slashes in your path.join, instead spread out your params.

Solution 2

I am using (path) NPM for the above usage......

simply require path npm in js file.Then use

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

Solution 3

__dirname is just a string. you can use ../ to traverse up the folder structure and path.join to resolve the path

path = require('path')

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

Solution 4

You can use Path like this

const path = require('path'); 
path.join(__dirname, "../");

Solution 5

if you are sending the path as a string,

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

this doesn't work.

Instead you have to use a comma, (the plus sign concatenates the two strings)

configFile: path.join(__dirname, '../test/karma.conf.js'),
Share:
78,144
Malik
Author by

Malik

Updated on July 30, 2021

Comments

  • Malik
    Malik almost 3 years

    I am using gulp-karma and facing a simple problem but cannot seems to find what i am doing wrong .

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

    Here is the code i am using and i cannot seems to go 1 level back in the folder directory . When i do the above it just append the ..\ to the folder direcotry without going 1 level back (which is the usual use of ..\). Following is the folder structure .

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

    and my folder is inside the webapirole folder . i want to go back 1 folder back and go inisde the test folder which contains the karma.conf.js file. can anyone make me understand what i am doing wrong here ?

    error i am getting

    [18:06:32] Starting 'tdd'...
    ERROR [config]: File C:\Users\Documents\WebApiRole..\test\karma.conf.js does not exist
    
  • Malik
    Malik about 9 years
    thank you for your response . however it didn't work out . this is the output i am getting for that ERROR [config]: File C:\Users\Documents\WebApiRole\..\test\karma.conf.js does not exist! as you can see it still considers ..\ as part of the path string
  • 17xande
    17xande over 2 years
    This is the best answer.
  • rishi
    rishi over 2 years
    using slashes with the path module, defeats the purpose of using path. please see @Pranav Totla's answer below stackoverflow.com/a/61056875/14393584