Javascript 通过管道传递参数

Javascript 通过管道传递参数,javascript,gulp,html-pdf,Javascript,Gulp,Html Pdf,场景:我正在迭代几个.md文件,首先在HTML中转换它们,然后在PDF中转换它们。 我需要一个管道上的文件路径(即pdfone),但我不知道怎么做 编辑: 我不需要重命名这些文件,因为它们是通过管道传输的 我想获取pdf管道上已处理文件的文件路径, 因为我想在管道中使用它(如代码所示) var pdf=require('gulp-html-pdf'); 返回gulp.src(path.join(config.ROOT,***/docs/***.md')) //做事情。。。 .pipe(gulp.

场景:我正在迭代几个
.md
文件,首先在
HTML
中转换它们,然后在
PDF
中转换它们。 我需要一个管道上的文件路径(即
pdf
one),但我不知道怎么做

编辑:

  • 我不需要重命名这些文件,因为它们是通过管道传输的
  • 我想获取
    pdf
    管道上已处理文件的文件路径, 因为我想在管道中使用它(如代码所示)
  • var pdf=require('gulp-html-pdf');
    返回gulp.src(path.join(config.ROOT,***/docs/***.md'))
    //做事情。。。
    .pipe(gulp.dest(函数(文件)){
    返回file.base;
    }))
    //将其转换为PDF
    .烟斗(
    //我需要这里的文件路径,以便将其用于PDF选项
    pdf({
    “格式”:“A4”,
    “边界”:{
    “顶部”:“0cm”,//默认值为0,单位:mm、cm、in、px
    “右”:“2.5cm”,
    “底部”:“0厘米”,
    “左”:“2.5厘米”
    },
    “标题”:{
    “高度”:“3cm”,
    “内容”:“”+文件路径+“”
    },
    “页脚”:{
    “高度”:“3cm”,
    “目录”:“页面:{{Page}/{{Page}”
    },
    “幻影图像”:[]
    }))
    //保存PDF
    .pipe(gulp.dest(函数(文件)){
    var fileName=file.path.substr(file.path.lastIndexOf('docs\\')+5);
    log(“…创建”,文件名);
    返回file.base;
    }));
    
    根据您的代码,您似乎正在尝试重命名文件,因为这些文件通过管道从HTML传输到pdf

    如果是这样的话,那么几乎可以肯定的是,这个包裹就是你想要的

    编辑

    gulp html pdf不支持逐文件选项,因此无法直接使用它

    您可以使用gulp each和html pdf包(在引擎盖下的gulp html pdf中使用)推出自己的解决方案。像这样的事情很可能会让你达到目的:

    var gulp = require('gulp')
    var each = require('gulp-each')
    var pdf = require('html-pdf')
    var rename = require('gulp-rename')
    
    gulp.task('toPDF', function() {
       return gulp.src('*.html')
           .pipe(each(function(content, file, callback) {
            // path name is:
            var path = file.path
            // create pdf with options and convert back to buffer
            pdf.create(content, {/* file by file options*/})
                .toBuffer(function (err,buffer){
                    if(err){
                        //pass error back
                        callback(err, null)
                    }
               // return the buffer     
               callback(null, buffer);
            })
           }))
           // change file extention
           .pipe(rename( function (path) { path.extname = '.pdf'}))
           .pipe(gulp.dest('output'));
    });
    

    您试图获取文件名的哪一部分?我假设您试图返回它的一部分以提供该文件的目录,这就是gulp.dest中的函数所做的。看看“路径”插件,它使这些东西更容易使用。例如,path.basename(文件名,'.pdf'可能是您正在寻找的,但我不确定您到底想要实现什么。多了解一点信息会有帮助。path.basename(文件名,'.pdf')要正确-您不需要substr内容。您需要var path=require('path'))为了让它工作。嘿@Mark!我需要的是提供pdf方法的文件路径,gulp html pdf模块将使用该路径作为生成的pdf的标题页。无论如何,感谢substr提示;)嗨!不,不需要重命名文件。我只想获得处理过的文件的路径,并将其输入到
    pdf
    方法;)抱歉,看到您编辑的答案太晚了。我试试看,谢谢!太好了@Dyd666。我注意到在gulp rename函数中不需要返回。我将编辑我的答案以澄清。
    var gulp = require('gulp')
    var each = require('gulp-each')
    var pdf = require('html-pdf')
    var rename = require('gulp-rename')
    
    gulp.task('toPDF', function() {
       return gulp.src('*.html')
           .pipe(each(function(content, file, callback) {
            // path name is:
            var path = file.path
            // create pdf with options and convert back to buffer
            pdf.create(content, {/* file by file options*/})
                .toBuffer(function (err,buffer){
                    if(err){
                        //pass error back
                        callback(err, null)
                    }
               // return the buffer     
               callback(null, buffer);
            })
           }))
           // change file extention
           .pipe(rename( function (path) { path.extname = '.pdf'}))
           .pipe(gulp.dest('output'));
    });