使用npm将文件列表写入js文件

时间:2015-04-13 22:05:55

标签: file npm cross-platform command-line-interface

我想为npm创建一个执行以下操作的脚本:

  • 获取文件夹(和子文件夹)中的文件列表
  • 将其写入JS文件,格式如下:

    module.exports = [
      "folder/filename.png",
      "folder/subfolder/filename.png"
    ];
    

我目前正在使用Linux中的cli这样做:

echo 'module.exports = [' | tee files.js && find . -name "*png" | sed s:"./":"  '": | sed s:".png":".png',": | tee files.js --append && echo '];' | tee files.js --append

这有点做作,而不是真正的跨平台。有没有提供类似功能的npm软件包?我有点迷失了。

1 个答案:

答案 0 :(得分:0)

我不觉得傻。从来没有直接使用过节点,但写一个脚本来做这件事是微不足道的。

#!/usr/bin/env node

var fs = require('fs');
var list = [];

function traverse(folder) {
  var files = fs.readdirSync(folder);
  for (var i = 0; i < files.length; i++) {
    if (files[i].indexOf('.png') > -1 || files[i].indexOf('.jpg') > -1) {
      list.push(folder + "/" + files[i]);
      console.log(i + folder + "/" + files[i]);
    } else {
      var path = folder + "/" + files[i];
      if (fs.lstatSync(path).isDirectory()) {
        traverse(path);
      }
    }
  }
}

function start() {
  traverse('./images');
  var string = "module.exports = [\n";
  for (var i = 0; i < list.length; i++) {
    string += "  '" + list[i];
    if (list[i] !== list[list.length - 1]) {
      string += "',\n";
    } else {
      string += "'\n];"
    }
  }
  fs.writeFile("./src/assets.js", string, function (err) {
    if (err) {
      return console.log(err);
    }

    console.log("Assets file was updated!");
  });
}


start();