Grunt 递归动态地将 markdown 转换为 pdf
Grunt convert markdown to pdf recursively and dynamically
我一直在写一个 G运行tfile,它的目的是将一堆 Markdown 文件动态转换为 PDF。提供当前文件夹层次结构:
root/
|_subfolder1
| |_filename1.md
|_subfolder2
|_filename2.md
...
|_node_modules
|_subfolderN
|filenameN.md
我想要 运行 一个 Markdown 到 PDF 的任务,它将处理 md 文件并在同一输出目录中输出具有匹配文件名的 PDF 文件。
我确实创建了一个自定义任务,它正在解析当前目录,忽略 mode_modules 文件夹并获取降价文件,但我不知道如何配置具有良好属性的 md2pdf 任务以反映动态文件夹映射。
这是我当前的 G运行t 文件:
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
}
}
}
}
});
};
我正在使用这个插件:https://www.npmjs.com/package/grunt-md2pdf
所以我的问题是我应该如何配置 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');
});
};
根据 this line,此任务使用 grunt.files
实用函数。这让我们的事情变得更容易!
首先,在 grunt 中创建不同的任务来查找您在任何其他任务中需要的文件并不常见。
也就是说,每个任务都应该收到它需要操作的文件。 For example...
coffee:
main:
files: [
expand: true
cwd: 'assets/script'
src: ['**/*.coffee']
dest: "assets/script"
ext: '.js'
]
(请注意,此配置位于 Gruntfile.coffee 文件中,因此是 CoffeeScript 语法)
这种使用 glob 扩展 的文件配置是最常见的一种。你可以找到 details in the documentation。
很明显:
In every directory (**
), take everything (/*
) from assets/script/
that ends with .coffee
. Put it into assets/script
. Rename extensions to .js
.
那么,你的任务大概可以这样配置:
md2pdf: {
main: {
files: [ {
expand: true,
src: ['**/*.md', '!node_modules/**/*'],
dest: "pdf/"
} ]
}
}
我一直在写一个 G运行tfile,它的目的是将一堆 Markdown 文件动态转换为 PDF。提供当前文件夹层次结构:
root/
|_subfolder1
| |_filename1.md
|_subfolder2
|_filename2.md
...
|_node_modules
|_subfolderN
|filenameN.md
我想要 运行 一个 Markdown 到 PDF 的任务,它将处理 md 文件并在同一输出目录中输出具有匹配文件名的 PDF 文件。
我确实创建了一个自定义任务,它正在解析当前目录,忽略 mode_modules 文件夹并获取降价文件,但我不知道如何配置具有良好属性的 md2pdf 任务以反映动态文件夹映射。
这是我当前的 G运行t 文件:
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
}
}
}
}
});
};
我正在使用这个插件:https://www.npmjs.com/package/grunt-md2pdf
所以我的问题是我应该如何配置 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');
});
};
根据 this line,此任务使用 grunt.files
实用函数。这让我们的事情变得更容易!
首先,在 grunt 中创建不同的任务来查找您在任何其他任务中需要的文件并不常见。
也就是说,每个任务都应该收到它需要操作的文件。 For example...
coffee:
main:
files: [
expand: true
cwd: 'assets/script'
src: ['**/*.coffee']
dest: "assets/script"
ext: '.js'
]
(请注意,此配置位于 Gruntfile.coffee 文件中,因此是 CoffeeScript 语法)
这种使用 glob 扩展 的文件配置是最常见的一种。你可以找到 details in the documentation。
很明显:
In every directory (
**
), take everything (/*
) fromassets/script/
that ends with.coffee
. Put it intoassets/script
. Rename extensions to.js
.
那么,你的任务大概可以这样配置:
md2pdf: {
main: {
files: [ {
expand: true,
src: ['**/*.md', '!node_modules/**/*'],
dest: "pdf/"
} ]
}
}