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

时间:2012-09-04 11:46:14

标签: pug

是否可以从具有各种参数的玉石模板中访问全局对象?

是否有一个全局变量,其中包含当前正在执行的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 个答案:

答案 0 :(得分:5)

如果您使用的是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())

相对于基本文件夹,这会在relativePath模板中为jade提供类似about/index.jade的内容。

我不完全确定file.history在哪里/如何生成,但在我的情况下[0]指向原始文件名(在磁盘上有绝对路径)

答案 1 :(得分: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}

答案 2 :(得分:0)

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

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

使用样板Express应用程序,我找到了这些:

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