如何获取正在执行的jade脚本的文件名

8

是否有一个全局对象可以在jade模板中访问,其中包含各种参数?

是否有一个全局变量,其中包含当前正在执行的jade文件的路径?

!!! 5
html
  head
    title Test
  body
    //- I want to be able to know what the current script file is...
    p Hello, I am: #{globals.scriptfilename}
3个回答

6
如果您正在使用gulp-jade,请将gulp-data添加到混合物中,并使用此代码:
var jade = require('gulp-jade');
var data = require('gulp-data');

gulp.src('**/*.jade')
    .pipe(data(function (file) {
        return {
            relativePath: file.history[0].replace(file.base, '')
        };
    }))
    .pipe(jade())

这将为您的jade模板提供一个类似于“about/index.jade”的relativePath,相对于基本文件夹。
我不确定file.history是如何/在哪里生成的,但在我的情况下,[0]指向原始文件名(带有其在磁盘上的绝对路径)。

你如何在模板中访问 relativePath - dopatraman
它将成为一个全局变量,所以只需在任何地方键入'relativePath'即可。 - fregante
对我来说它很好用:下载演示项目。如果您遇到问题,请参考gulp-data的文档。 - fregante

1
我的解决方案:
//gulpfile.js

var $path = require('path'),
    jade  = require('gulp-jade'),
    isProduction = process.env.ENV == 'production';

gulp.task('watch', function() {
    gulp.watch("**/*.jade")
        .on('change', function(event) {
            compileJade(event.path, isProduction);
        });
});

function compileJade(path, isCompress) {
    gulp.src(path)
        .pipe(jade({
            pretty: !isCompress,
            locals: {
                _path_: path,
                _basename_: $path.basename(path)
            }
        }));
}

在Jade文件中,您可以像这样使用_path_和_basename_:
<!-- #{_path_}, #{_basename_} -->

还有一件事需要注意:在jade注释中,字符串插值不起作用。因此,以下代码将不会在结果HTML文件中被插值:

// #{path}

0

有一个全局变量。您可以使用Node的util.inspect(object)查看其内容。

它会自动用“[Circular]”替换循环引用,而不像JSON.stringify()

使用一个样板Express应用程序,我发现了以下内容:

  • global.process.argv == ['node','/Users/mike/Development/test/web.js']
  • global.process.mainModule.filename == '/Users/mike/Development/test/web.js'

3
在建议编辑时,请确保修复帖子中的所有问题,不要挑选需要修复的部分。如果要向问题添加新标签,请确保同时修复语法、拼写等问题。 - Taryn
感谢您的反馈。 - Mike Causer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接