How to go back 1 folder level with __dirname?

Javascriptnode.jsDirectoryPathGulp

Javascript Problem Overview


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

Javascript Solutions


Solution 1 - Javascript

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 - Javascript

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 - Javascript

__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 - Javascript

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'),

Solution 5 - Javascript

from Root directory

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

from any sub-folder of Root

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

Solution 6 - Javascript

You can use Path like this

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

Solution 7 - Javascript

Like Pranav Totla said, hardcode the path with forward slashes ( "/" ) or backward slashes ( "" ) makes the application prone to errors when you port it across operating systems.

// To go down on the three from index.html:
path.join(__dirname, 'css', 'style.css')

// To go up on the three from style.css:
path.join(__dirname, '..', 'img', 'cat.jpg')

// Three
root/
| |_css/
| |_img/
|
|_index.html

Solution 8 - Javascript

Try putting a \\ before the ..\\.

Without it, the path your generating has a folder called WebApi... as part of it. You can see this in the path being output from the error message.

Like this:

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

You may also want to look into using the path library from npm. It makes combining paths a lot easier by handling adding and removing extra path separator characters as needed.

Solution 9 - Javascript

Here is all you need to know about relative file paths:

Starting with / returns to the root directory and starts there

Starting with ../ moves one directory backward and starts there

Starting with ../../ moves two directories backward and starts there (and so on...)

To move forward, just start with the first sub directory and keep moving forward.

Solution 10 - Javascript

this will move you 2 directory back irrespective of any operating system:

import { join, sep } from 'path';
join(__dirname, sep, "..", sep, "..");

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMalikView Question on Stackoverflow
Solution 1 - JavascriptPranav TotlaView Answer on Stackoverflow
Solution 2 - JavascriptVemula AbilashView Answer on Stackoverflow
Solution 3 - JavascriptVikash AnandView Answer on Stackoverflow
Solution 4 - JavascriptdilanSachiView Answer on Stackoverflow
Solution 5 - Javascriptdan brownView Answer on Stackoverflow
Solution 6 - JavascriptHitesh SubnaniView Answer on Stackoverflow
Solution 7 - JavascriptZynchoView Answer on Stackoverflow
Solution 8 - JavascriptJim SimonView Answer on Stackoverflow
Solution 9 - Javascriptsuv1shView Answer on Stackoverflow
Solution 10 - Javascriptdipesh patidarView Answer on Stackoverflow