Npm 如何基于项目中的实际细枝文件创建数据列表

Npm 如何基于项目中的实际细枝文件创建数据列表,npm,gruntjs,Npm,Gruntjs,我正在使用NPM创建一个应用程序。它本质上是twig.js。我保持它的苗条,所以现在没有任何其他php或类似的东西。只有npm/twig.js和其他npm包,包括Grunt 这就是我要做的。现在,我在一个目录的子文件夹中有一堆细枝文件 我想做的是生成该子目录中.twig文件的数据列表。像这样的东西可能很管用 files: [ { "name": "file1.twig" "path": "/folder1" }, { "name": "file2.twig" "path": "/folder1"

我正在使用NPM创建一个应用程序。它本质上是twig.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中注册一个,该文件使用shelljs方法检索每个.twig文件的路径

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

以下步骤描述了如何实现您的要求:

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

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

Grunfile.js

module.exports=functiongrunt{ //要求 变量路径=需要“路径”, find=require'shelljs'。find; grunt.initConfig{ //其他任务。。。 }; /** *自定义grunt任务在目录中生成.twig文件列表 *并将结果保存为.json文件。 */ registerTask'twigList','创建细枝文件列表',函数{ var obj={}; obj.files=find'path/to/directory' .filterfunctionfilePath{ 返回filePath.match/\.twig$/; } .mapfunctionfilePath{ 返回{ 名称:path.basenamefilePath, 路径:path.dirnamefilePath } }; 编写'twig-list.json',json.stringifyobj,null,2; }; registerTask'default',['twigList']; }; 解释 Grunfile.js中需要shelljs和内置模块的节点

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

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

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

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

查找['path/to/directory','path/to/other/directory'] find方法返回在给定目录中找到的所有路径的数组,深度很多。通过向Strings方法提供regex\.twig$,我们利用数组的方法只返回扩展名为.twig的文件路径

.twig filepath的结果数组的每一项都被传递给数组的方法。它返回一个具有两个属性name和path的对象。name属性的值是使用nodes方法从完整文件路径获得的。类似地,path属性的值是使用nodes方法从完整文件路径获得的

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

附加信息 如前所述,shelljs find方法列出了给定目录路径中的所有文件。如果提供的目录路径包含包含要排除的.twig文件的子文件夹,则可以在筛选器方法中执行以下操作:

.FilterFunction文件{ 返回filePath.match/\.twig$/&!filePath.match/^foo\/bar/; } 这将匹配所有.twig文件,并忽略给定目录的子目录foo/bar中的文件,例如path/to/directory