如何返回1个文件夹级别wih __dirname?

时间:2015-06-15 12:39:20

标签: directory gulp karma-runner directory-structure gulp-karma

我正在使用gulp-karma并面临一个简单的问题,但似乎无法找到我做错了什么。

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

这是我正在使用的代码,我似乎无法在文件夹目录中返回1级。当我执行上述操作时,只需追加 ..\到文件夹目录,而不会返回1级(这是..\的常用用法)。以下是文件夹结构。

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

我的文件夹位于 webapirole 文件夹中。我想返回1个文件夹并进入包含karma.conf.js文件的 test 文件夹。谁能让我明白我在这里做错了什么?

错误我正在

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

11 个答案:

答案 0 :(得分:18)

TL; DR

使用path.join(__dirname, '..', 'test', 'karma.conf.js')。禁止使用斜杠。

长期回答

正如许多答案所指出的那样,使用path模块可能是最好的方法。 但是,这里的大多数解决方案已回到使用斜杠之类的方式:

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

但是,通过这样做,您实现了使用path的目的。无论底层操作系统(Linux,Windows等)如何,都可以使用path进行操作。只是为了提供一些见解,您可以直接将路径操作作为字符串操作(例如__dirname + '../test/karma.conf.js'。您不要这样做,因为Linux使用正斜杠(/),Windows使用反斜杠(\)。这使得跨操作系统移植时,您的应用程序容易出错。

因此,更好的方法是:

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

当然要回来了-避免在path.join中使用斜杠,而散布到参数中。

答案 1 :(得分:15)

我正在使用(路径)NPM用于上述用法......

在js文件中只需要路径 npm。然后使用

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

答案 2 :(得分:8)

__dirname只是一个字符串。您可以使用../遍历文件夹结构和path.join来解析路径

path = require('path')

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

答案 3 :(得分:2)

尝试在\\之前加..\\

如果没有它,您生成的路径会有一个名为WebApi...的文件夹作为其中的一部分。您可以在从错误消息输出的路径中看到这一点。

像这样:

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

您可能还想查看使用npm的path库。通过根据需要添加和删除额外的路径分隔符,可以更轻松地组合路径。

答案 4 :(得分:2)

从根目录

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

来自Root的任何子文件夹

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

答案 5 :(得分:1)

你可以像这样使用路径

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

答案 6 :(得分:0)

如果您将路径作为字符串发送,

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

这不起作用。

相反,你必须使用逗号,(加号连接两个字符串)

Select *
from List1 CROSS JOIN
List2 CROSS JOIN
List3;

答案 7 :(得分:0)

只需将\附加在..\test之前。

答案 8 :(得分:0)

您需要了解有关相对文件路径的所有信息:

以/开头,然后返回到根目录并从那里开始

以../开头向后移动一个目录,然后从那里开始

以../../开头向后移动两个目录,然后从那里开始(依此类推...)

要前进,只需从第一个子目录开始,然后继续前进。

答案 9 :(得分:0)

无论使用何种操作系统,这都会将您移回 2 个目录:

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

答案 10 :(得分:0)

Pranav Totla 所说,使用正斜杠 ("/") 或反斜杠 ("") 对路径进行硬编码会使应用程序在跨操作系统移植时容易出错。

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