Gruntjs Grunt递归动态地将标记转换为pdf
我一直在写一个Gruntfile,它的目标是将一堆降价文件动态转换为PDF。提供当前文件夹层次结构:Gruntjs Grunt递归动态地将标记转换为pdf,gruntjs,Gruntjs,我一直在写一个Gruntfile,它的目标是将一堆降价文件动态转换为PDF。提供当前文件夹层次结构: root/ |_subfolder1 | |_filename1.md |_subfolder2 |_filename2.md ... |_node_modules |_subfolderN |filenameN.md 我想运行一个标记为PDF的任务,该任务将处理md文件并在同一输出目录中输出一个具有匹配文件名的PDF文件 我确实创建了一
root/
|_subfolder1
| |_filename1.md
|_subfolder2
|_filename2.md
...
|_node_modules
|_subfolderN
|filenameN.md
我想运行一个标记为PDF的任务,该任务将处理md文件并在同一输出目录中输出一个具有匹配文件名的PDF文件
我确实创建了一个自定义任务,该任务正在解析当前目录,忽略mode_modules文件夹并获取标记文件,但我不知道如何使用良好的属性配置md2pdf任务以反映动态文件夹映射
以下是我当前的Grunfile文件:
module.exports = function(grunt) {
// 1 - Configuration
grunt.initConfig({
md2pdf: {
}
});
// 2 - Plugins
grunt.loadNpmTasks('grunt-md2pdf');
// 3 - Task registering
grunt.registerTask('default', 'Get Subfolders', function() {
grunt.file.recurse('.', callback);
function callback(abspath, rootdir, subdir, filename) {
var filenameOutExt;
// if current occurence is a file subdir == undefined
// checking subdir to true means it's not undefined and
// the current path is a directory
if(subdir) {
// excluding node_modules folder
if (!subdir.match('node_modules')) {
// only process markdown files
if(filename.match('.md')) {
filenameOutExt = filename.split('.')[0];
// now for each markdown files, run md2pdf task
// and ouput filenameOutExt.pdf in same folder
// as the input files
}
}
}
}
});
};
我正在使用这个插件:
所以我的问题是,我应该如何配置md2pdf任务,以便将标记文件传递给它,并在同一目录中生成匹配的文件名pdf输出
输出应为:
root/
|_subfolder1
| |_filename1.md
|_filename1.pdf
|_subfolder2
|_filename2.md
|_filename2.pdf
...
|_node_modules
|_subfolderN
|filenameN.md
|_filenameN.pdf
非常感谢好的,我想好了
module.exports = function(grunt) {
// 2 - Plugins
grunt.loadNpmTasks('grunt-md2pdf');
grunt.registerTask('default', 'Dynamically generate PDF from MD', function() {
grunt.file.expand("./**/*.md").forEach( function(file) {
if(!file.match('./node_modules')) {
var md2pdf = grunt.config.get('md2pdf') || {};
md2pdf[file] = {
src: file,
dest: file + '.pdf'
};
grunt.config.set('md2pdf', md2pdf);
}
});
grunt.task.run('md2pdf');
});
};
根据,此任务使用grunt.files
utilitary函数。这对我们来说更容易
首先,在grunt中,创建不同的任务来查找任何其他任务中所需的文件是不常见的
也就是说,每个任务都应该接收它需要操作的文件
(请注意,此配置位于Gruntfile.coffee文件中,因此使用了CoffeeScript语法)
使用全局扩展的这种文件配置是最常见的配置之一。你可以找到
很明显:
在每个目录(**
)中,从资产/script/
中获取以.coffee
结尾的所有内容(/*
)。将其放入资产/script
。将扩展名重命名为.js
因此,您的任务可能可以这样配置:
md2pdf: {
main: {
files: [ {
expand: true,
src: ['**/*.md', '!node_modules/**/*'],
dest: "pdf/"
} ]
}
}
你需要它成为一项繁重的任务吗?是您开发工作流程的一部分吗?你会经常做吗?也许您可以简单地编写一个节点脚本?:)是的,我希望这是一项艰巨的任务。是的,这是我开发工作流程的一部分。我想我会经常做的。我目前正在做这个任务,阅读一些关于node的书籍,在标记文件中添加一些注释,并使用自定义CSS:DOk生成干净格式的PDF,然后。。。那么,让我们这样做。等一秒钟。看看这个任务的更好的结构化方法:)我想我很接近了。谢谢!这会起作用,并且有助于理解关于grunt文件系统的一些概念。但是,我需要使用markdown的文件名(book1.md book1.PDF)创建每个PDF文件,并且在与markdown文件相同的文件夹中。在这种情况下,只需更改dest。是的,但是如何使用该结构在dest中创建变量(文件夹和文件名?
dest:'./'
就可以了。
md2pdf: {
main: {
files: [ {
expand: true,
src: ['**/*.md', '!node_modules/**/*'],
dest: "pdf/"
} ]
}
}