Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用_dirname返回1个文件夹级别?_Javascript_Node.js_Directory_Path_Gulp - Fatal编程技术网

Javascript 如何使用_dirname返回1个文件夹级别?

Javascript 如何使用_dirname返回1个文件夹级别?,javascript,node.js,directory,path,gulp,Javascript,Node.js,Directory,Path,Gulp,我正在使用和面对一个简单的问题,但似乎无法找到我做错了什么 gulp.task('test', function (done) { karma.start({ configFile: __dirname + '..\\test\\' +'\karma.conf.js', singleRun: true }, done); }); 这是我正在使用的代码,我似乎无法回到文件夹目录中的1级。当我执行上述操作时,它只将。\附加到文件夹direcotry,

我正在使用和面对一个简单的问题,但似乎无法找到我做错了什么

gulp.task('test', function (done) {
    karma.start({
        configFile: __dirname + '..\\test\\' +'\karma.conf.js',
        singleRun: true
    }, done);
});
这是我正在使用的代码,我似乎无法回到文件夹目录中的1级。当我执行上述操作时,它只
。\
附加到文件夹direcotry,而不返回一级(这是
。\
的常用用法)。下面是文件夹结构

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

尝试将
\\
放在
之前。\\

如果没有它,生成的路径将包含一个名为
WebApi…
的文件夹。您可以在从错误消息输出的路径中看到这一点

像这样:

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

您可能还希望研究如何使用npm中的库。通过根据需要添加和删除额外的路径分隔符,它使组合路径变得更加容易。

\uu dirname
只是一个字符串。您可以使用
。/
向上遍历文件夹结构和路径。join可解析路径

path = require('path')

configFile: path.join(__dirname, '../test/karma.conf.js'),
我正在使用(路径)NPM进行上述使用

只需在js文件中要求pathnpm,然后使用

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

如果以字符串形式发送路径

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

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

从根目录

(path.join(__dirname , 'views' ,'main.html')) -> will return Root:/views/main.html
从根目录的任何子文件夹

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

使用
path.join(uuu dirname,“…”,“test”,“karma.conf.js”)
。防止使用斜杠

长答案

正如许多答案所指出的,使用
path
模块可能是最好的方法。 但是,这里的大多数解决方案都使用了斜杠,如:

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

但是,通过这样做,您就超出了使用
path
的目的。无论底层操作系统(Linux、Windows等)如何,都可以使用
path
执行操作。为了让您了解一些情况,您可以直接将路径操作作为字符串操作(如
\uu dirname+'../test/karma.conf.js'
)来执行。您不这样做是因为Linux使用正向斜杠(/),Windows使用反向斜杠(\)。这使得您的应用程序在跨操作系统移植时容易出错

因此,更好的方法是:

path.join(uuu dirname,“…”,“test”,“karma.conf.js”)


当然,回来-防止在
路径中使用斜杠。加入
,而不是分散参数。

以下是有关相对文件路径的所有信息:

从/开始返回根目录并从那里开始

从..开始/向后移动一个目录并从那里开始

从.././开始向后移动两个目录并从那里开始(依此类推…)


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

您可以使用如下路径

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

这将使您返回2个目录,而不考虑任何操作系统:

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

感谢您的回复。但是没有成功。这是我得到的关于
错误[config]:文件C:\Users\Documents\WebApiRole\..\test\karma.conf.js不存在的输出!
如您所见,它仍然认为..\是字符串路径的一部分,可能重复
import { join, sep } from 'path';
join(__dirname, sep, "..", sep, "..");