2012-09-04 37 views
8

是否有一個全局對象可以從具有各種參數的玉模板中訪問?如何獲取正在執行的玉文件的文件名

是否有一個全局變量與當前正在執行的玉文件的路徑?

!!! 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} 

回答

0

有一個全局變量。您可以使用節點的util.inspect(object)查看它的內容。

它不像JSON.stringify()那樣用「[Circular]」自動替換循環引用。

使用樣板快速的應用程序,我發現這些:

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

當提示編輯時,確保您正在修改帖子中的所有內容,請不要選擇要修復的內容。如果在問題中添加新標籤,請確保您也修復語法,拼寫等。 – Taryn

+0

感謝您的反饋 –

+0

爲什麼選擇此選項? – dopatraman

4

如果」請使用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]指出,原來的文件名(與磁盤上的絕對路徑)

+0

你如何訪問模板中的'relativePath'? – dopatraman

+0

這將是一個全局變量,所以只要在任何地方輸入'relativePath'即可。 –

+0

不,不確定。 – dopatraman

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) 
      } 
     })); 
} 

在玉文件,你可以使用_path_和_basename_這樣的:

<!-- #{_path_}, #{_basename_} --> 

還有一兩件事要注意:字符串插不JAD工作e評論。所以下面的代碼將不會在結果html文件中插值:

// #{path} 
相關問題