如何从外部引入参数传给gulp-ejs?

发布于 2022-09-01 13:09:21 字数 1583 浏览 11 评论 0

gulp-ejs官网上有如此使用示例:

javascriptvar ejs = require("gulp-ejs");

gulp.src("./templates/*.ejs")
    .pipe(ejs({
        msg: "Hello Gulp!"
    }))
    .pipe(gulp.dest("./dist"));

会得到如此效果:

html<!-- input: -->
<div><%= msg %></div>
<!-- output: -->
<div>Hello Gulp!</div>

出于某种需要,我把需要的ejs参数(data)放在了一个外部文件中:

json// config.json
{
    "content_includes":{
        "title":"Hello"
    }
}
html<!-- content_includes.ejs -->
<h1><%= title %></h1>
javascript// gulpfile.js
var gulp = require('gulp');
var gutil = require('gulp-util');
var ejs = require('gulp-ejs');
var rename = require('gulp-rename');
var path = require('path');
var cfg = require('./config.json');

var tmp = {}

gulp.task('compile',function() {

    gulp.src("./html/**/[^_]*.ejs")
        .pipe(rename(function(path){
            var basename = path.basename;

            // 判断相应的key是否存在
            if(cfg.hasOwnProperty(basename)){

                // 若存在则缓存这个key的value,即需要传给ejs的参数
                tmp = cfg[basename];
            }else{
                tmp = {};
            }

        }))
        .pipe(ejs(tmp))
        .on('error',gutil.log)
        .pipe(rename(function(path){
            path.extname = ".html";
        }))
        .pipe(gulp.dest('./dest'));
});

结果,提示参数未传入:

title is not defined

请问应该怎么做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只是偏爱你 2022-09-08 13:09:21

用gulp-data试试

var data = require('gulp-data');

var getJsonData = function(file) {
  return require('./examples/' + path.basename(file.path) + '.json');
};
gulp.task('taskname',function(){
    return gulp.src()
    .pipe(data(getJsonData))
     .pipe(gulp.dest('./dest'));
});
别再吹冷风 2022-09-08 13:09:21
tmp = cfg[basename];

改成

for (var a in cfg[basename]) {
    tmp[a] = cfg[basename][a];
}

类似这种形式。

因为在.pipe(ejs(tmp))这里,
已经事先取到了声明tmpvar tmp = {}时引用的Object,
所以再对tmp直接赋值也改变不了ejs引用的tmp。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文