【发布时间】:2015-09-07 12:29:14
【问题描述】:
所以我的 layout.jade 文件顶部有这段 Jade 代码:
doctype html
html
head
include ./../jade/includes/head
这会产生错误
ENOENT,没有这样的文件或目录 '[project 根]/jade/jade/includes/head.jade'
注意'jade'的双重实例。
文件夹结构是这样的:
[project home]
app/
jade/
layouts/
layout.jade
includes/
head.jade
顺便说一句,这会产生同样的错误:
include ../jade/includes/head
这是一个相当标准的 WSK 项目(使用 Gulp),使用 gulp-accord 编译 Jade。请参阅下面 gulp 文件中的 sn-p:
// 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
所以,如果你这样做,那就该死,如果你不这样做,该死的......
【问题讨论】:
-
你确定你没有
[project home]/app/jade/layout.jade的玉文件或者没有清理的东西吗?也许它被复制而不是移动到layouts文件夹中? -
您可能应该更改您的 gulp 任务以仅接收来自
app/jade/layouts/*.jade的文件。没有理由编译其他任何东西,对吧? -
好吧,布局并不是真正的 html 页面,它们被例如 app/jade/jade-test.jade 使用,如下所示:
extends /jade/layouts/article-layout.jade来获取jade-test.html服务的根目录(.tmp 或 dist)。 -
你的评论让我思考,不过。似乎问题在于布局文件被编译了两次;一次是独立的,一次是作为扩展它的玉文件的一部分。
include似乎将代码粘贴到其中,然后解析任何扩展(可能包括),这意味着我们有不同的上下文。