gpt4 book ai didi

javascript - 我如何动态生成文件名列表以用于 Grunt 任务?

转载 作者:数据小太阳 更新时间:2023-10-29 04:31:03 26 4
gpt4 key购买 nike

我正在使用 load-grunt-configgrunt-prompt ,我正在开发一个 init 任务,它在两个文件夹之间复制一些 php 模板。

现在模板文件名是硬编码的,但我宁愿让 grunt 扫描正确的文件夹并动态提供文件名。

我试过使用 grunt.file.expand ,但我无法让它工作。是否可以扫描一个文件夹并以 grunt-prompt 期望的格式返回一个文件名数组(或对象,不确定你会怎么调用它)?

// -------------------------------------
// Grunt prompt
// -------------------------------------

module.exports = {

// ----- Initialization prompt ----- //

init: {
options: {
questions: [{
// Set the authors name
config: 'init.author.name',
type: 'input',
message: 'What is your name?'
}, {
// Set the name of the project
config: 'init.project.name',
type: 'input',
message: 'What is the name of your project?'
}, {
// Select templates to be used
config: 'init.php.templates',
type: 'checkbox',
message: 'Which templates do you want to use?',
choices: [{
name: '404.php',
checked: false
}, {
name: 'archive.php',
checked: false
}, {
name: 'comments.php',
checked: false
}]
}]
}
}
};

顺便说一句,我找到了这个答案:https://stackoverflow.com/a/22270703/1694077 ,这与问题有关。但它没有详细说明如何具体解决这个问题。此外,我需要比文件名数组更具体的语法:

[{
name: '404.php'
}, {
name: 'archive.php'
}]

最佳答案

基本原则

这是一种使用 Grunt 的文件匹配功能来获取文件列表的方法。以下代码将在名为 templates 的子目录中寻找模板。您只需将 php 文件放在那里,脚本就会找到它。请注意,我省略了 load-grunt-config 的使用,因为它不是获取文件列表的特定问题的一个因素。

关键是使用grunt.file.expand来获取文件。

module.exports = function (grunt) {

// List all files in the templates directory.
var templates = grunt.file.expand({filter: "isFile", cwd: "templates"},
["*"]);

// Make actual choices out of them that grunt-prompt can use.
var choices = templates.map(function (t) {
return { name: t, checked: false};
});

grunt.initConfig({
prompt: {
init: {
options: {
questions: [{
// Set the authors name
config: 'init.author.name',
type: 'input',
message: 'What is your name?'
}, {
// Set the name of the project
config: 'init.project.name',
type: 'input',
message: 'What is the name of your project?'
}, {
// Select templates to be used
config: 'init.php.templates',
type: 'checkbox',
message: 'Which templates do you want to use?',
choices: choices
}]
}
}
}
});

grunt.task.loadNpmTasks("grunt-prompt");
grunt.registerTask("default", ["prompt"]);
};

您可以使用比 "*" 更复杂的东西作为模式。例如,如果您打算在其中放置您不想列出的其他类型的文件,则会指示 "*.php"。我还为 filter 选项使用了 isFile 以避免列出目录。我使用 cwd 将工作目录更改为 templates before 列出文件,这意味着返回的文件名不是 在他们的名字中包含 templates/。也可以这样做:

var templates = grunt.file.expand({filter: "isFile"}, ["templates/*"]);

并获取名称中包含 templates/ 目录的文件列表。

使用load-grunt-config

默认情况下,load-grunt-config 需要一个 package.json 文件(因为它调用了 load-grunt-tasks)。这是我用过的:

{
"dependencies": {
"load-grunt-config": "^0.8.0",
"grunt-prompt": "^1.1.0",
"grunt": "^0.4.4"
}
}

Gruntfile.js 变成:

module.exports = function (grunt) {

grunt.registerTask("default", ["prompt"]);
require('load-grunt-config')(grunt);
};

然后在 grunt/prompt.js 中你需要这个:

module.exports = function(grunt) {
// List all files in the templates directory.
var templates = grunt.file.expand({filter: "isFile", cwd: "templates"},
["*"]);

// Make actual choices out of them that grunt-prompt can use.
var choices = templates.map(function (t) {
return { name: t, checked: false};
});

return {
init: {
options: {
questions: [{
// Set the authors name
config: 'init.author.name',
type: 'input',
message: 'What is your name?'
}, {
// Set the name of the project
config: 'init.project.name',
type: 'input',
message: 'What is the name of your project?'
}, {
// Select templates to be used
config: 'init.php.templates',
type: 'checkbox',
message: 'Which templates do you want to use?',
choices: choices
}]
}
}
};
};

关于javascript - 我如何动态生成文件名列表以用于 Grunt 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com