如何根据项目中的实际 twig 文件创建数据列表



我正在使用 https://www.npmjs.com/package/grunt-twig-render 通过NPM创建一个应用程序。它本质上是树枝.js。我保持苗条,所以现在没有任何其他 php 或类似的东西。只是 npm/twig.js 和其他 npm 包,包括 Grunt。

这就是我要做的。现在,我在目录的子文件夹中有一堆树枝文件。

我想做的是生成该子目录中的 .twig 文件的数据列表。这样的东西可能效果很好

files: [
{
"name": "file1.twig"
"path": "/folder1"
},
{
"name": "file2.twig"
"path": "/folder1"
},
{
"name": "file3.twig"
"path": "/folder1"
}
]

但我不是很挑剔。只是看看是否有人找到了通过 npm 或 twigjs 或类似的东西在文件夹中创建文件列表的方法。

如果它生成一个 .json 文件,那将是理想的。这将是构建过程的一部分,因此通过 Grunt 执行此操作也会很好。

提前谢谢你

您可以在Gruntfile.js中注册一个自定义的grunt任务,该任务利用shelljsfind方法来检索每个.twig文件的路径。

shelljs 是一个为 Node.js 提供可移植 Unix shell 命令的软件包。它find方法类似于 Bash find 命令。

以下步骤描述了如何满足您的要求:

  1. cd到项目目录并通过运行以下命令安装shelljs

    npm i -D shelljs
    
  2. 按如下方式配置Gruntfile.js

    咕噜咕噜.js

    module.exports = function(grunt) {
    // requirements
    var path = require('path'),
    find = require('shelljs').find;
    grunt.initConfig({
    // other tasks ...
    });
    /**
    * Custom grunt task generates a list of .twig files in a directory
    * and saves the results as .json file.
    */
    grunt.registerTask('twigList', 'Creates list of twig files', function() {
    var obj = {};
    obj.files = find('path/to/directory')
    .filter(function(filePath) {
    return filePath.match(/.twig$/);
    })
    .map(function(filePath) {
    return {
    name: path.basename(filePath),
    path: path.dirname(filePath)
    }
    });
    grunt.file.write('twig-list.json', JSON.stringify(obj, null, 2));
    });
    grunt.registerTask('default', ['twigList']);
    };
    

解释

  1. shelljs和节点内置path模块都requireGruntfile.js中。

  2. 接下来,注册名为twigList的自定义任务。

    • 在函数的主体中,我们初始化一个空对象并将其分配给一个名为obj的变量

    • 接下来,调用 shelljsfind方法,传入包含.twig文件的子目录的路径。当前路径设置为path/to/directory,因此需要根据需要重新定义此路径。

      注意:find方法还可以接受多个目录路径的数组作为参数。例如:

      find(['path/to/directory', 'path/to/another/directory'])
      
    • find方法返回在给定目录中找到的所有路径的数组(深许多级别)。我们利用数组的filter()方法,通过向字符串match方法提供正则表达式(.twig$),仅return具有.twig文件扩展名的文件路径。

    • 生成的.twig文件路径数组的每一项都传递给 Array 的map()方法。它return具有两个属性(namepath)的对象。name属性的值是使用节点path.basename()方法从完整文件路径获取的。同样,path属性的值是使用节点path.dirname()方法从完整文件路径获取的。

    • 最后,使用咕噜声file.write()方法将.json文件写入磁盘。当前第一个参数设置为twig-list.json。这将导致名为twig-list.json的文件保存到Gruntfile.js所在的项目目录的顶层。需要根据需要重新定义此输出路径。第二个参数是通过利用JSON.stringify()obj转换为 JSON 提供的。生成的 JSON 由两个空格缩进。

附加信息

如前所述,shelljsfind方法列出了给定目录路径中的所有文件(许多级别 deeep)。如果提供的目录路径包含包含要排除.twig文件的子文件夹,则可以在filter()方法中执行以下操作:

.filter(function(file) {
return filePath.match(/.twig$/) && !filePath.match(/^foo/bar/);
})

这将匹配所有.twig文件,并忽略给定目录的子目录foo/bar中的文件,例如path/to/directory.

最新更新