所以我在layout.jade文件的顶部有这段Jade代码:
doctype html
html
head
include ./../jade/includes/head
这会产生错误
ENOENT,没有这样的文件或目录'[项目 根] /jade/jade/includes/head.jade'
注意'jade'的双重实例。
文件夹结构如下:
[project home]
app/
jade/
layouts/
layout.jade
includes/
head.jade
BTW,这会产生同样的错误:
include ../jade/includes/head
这是一个相当标准的WSK项目(使用Gulp),使用gulp-accord编译Jade。请参阅下面的gulp文件中的代码段:
// Compile Jade files.
gulp.task('jade', function () {
return gulp.src('app/jade/**/*.jade')
.pipe($.accord('jade', { pretty: true }))
.pipe(gulp.dest('.tmp'))
.pipe(gulp.dest('dist'));
});
通过在gulpfile中指定'basedir'(“app /”)作为gulp-accord的选项并使用它来解决问题:
include /jade/includes/head
也许这只是更好的练习,但我仍然想知道错误发生的原因。
编辑:
我已经把头撞了一会儿,我错过了一个非常重要的部分,就是这个:
include ./../includes/head
它会引发错误:
ENOENT,没有这样的文件或目录'[project home] /app/includes/head.jade
如果你这样做,那就太该死了,如果你不这样做,该死的......
答案 0 :(得分:1)
通过进一步测试,问题在于布局既可以单独呈现,也可以通过extends
在其他文件中使用。证据在于,根据路径不同文件会引发错误:一个用于jade/jade/
,另一个用于在编辑中退出一步到远的时候。
结构中其他文件的路径需要在这两个上下文中存活,即使用绝对路径(如include /jade/includes/head
)并在gulpfile中设置basedir
选项(值为“app”,在我特定的WSK案例中)。或者您需要确保通过从gulp.src()
中排除部分和布局来确保它们不被编译。在我的文件夹结构的情况下:
gulp.task('jade', function () {
return gulp.src(['app/jade/**/*.jade',
'!app/jade/layouts{,/**}',
'!app/jade/includes{,/**}'])
.pipe($.accord('jade', { pretty: true, basedir: "app" }))
.pipe(gulp.dest('.tmp'))
.pipe(gulp.dest('dist'));
});
使用basedir
和绝对路径,您不必担心将来会添加更多文件夹。但是你可能不想将布局和部分编译成HTML,所以为什么不这两个呢?
排除的一个很好的演练是here。
答案 1 :(得分:0)
您包含的路径将相对于当前文件/app/jade/layouts
的目录layout.jade
。这就是为什么你只需要遍历目录树(../
)一次,最终进入/app/jade
目录。从这里你试图再次进入jade目录(jade/
),该目录不存在(/app/jade/jade
不存在)。而是直接转到includes/head
。
下面的包含代码应该可以正常运行:
include ./../includes/head