javascript - 如何自动更新我的 javascript 文件以导入新检测到的文件?

标签 javascript reactjs ecmascript-6 watchman

我标记了 watchman,因为它可能是我正在寻找的解决方案,但我不太知道如何以这种方式使用它!

我有一个目录

/imgs
    /icons
        /bird.png
        /cat.png
        /dog.png
        /pig.png

我有一个文件

/imgs/index.js

我的index.js 负责导入所有图像,然后导出单个对象以供项目的其余部分使用。

const bird = require('./icons/bird.png');
const cat = require('./icons/cat.png');
const dog = require('./icons/dog.png');
const pig = require('./icons/pig.png');

const Icons = { bird, cat, dog, pig };

export default Icons;

我想要做的是监视我的 imgs 文件夹中的新添加内容,并自动更新我的 index.js 以导入这些新文件并将它们添加到我的对象中。我需要使用 Common.js 导入它们并使用 ES6 导出它们。

有人知道解决这个问题的好方法吗?

最佳答案

一个潜在的解决方案是编写一个 JavaScript 脚本来生成 index.js,如下所示:

'use strict';

const fs = require('fs');
const DIR = __dirname + '/imgs/icons';
const output = __dirname + '/imgs/index.js';

return fs.readdir(DIR, (err, files) => {
  let result = '';
  let references = [];
  files.forEach(item => {
    // assuming item has the format animal.png
    let newReference = item.split('.')[0];
    references.push(newReference);
    result += `const ${newReference} = require('./icons/${item}');\n`;
  });
  result += `\nconst Icons = { ${references} };\n\nexport default Icons;`;
  fs.writeFile(output, result, err => {
    if (err) throw err;
    console.log(output + ' updated');
  });
});

将该文件(为此目的,我们将其称为 watcher.js)放在 imgs 的父目录中,并让 watchman 在检测到图标目录中的更改时运行它:

watchman imgs/icons“node watcher.js”

请注意,如果将新文件放入监视目录中,则创建 index.js 的脚本将不会重新运行。仅当它再次更改时(即使只是使用相同的数据再次保存),index.js 才会反射(reflect)该更改。

您可以通过运行 touch imgs/icons/crabigator.png 两次并查看 watchman 日志和/或 index.js 的内容来简单地进行测试。

关于javascript - 如何自动更新我的 javascript 文件以导入新检测到的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080588/

相关文章:

Javascript 呈现(访问者)和 html 呈现(机器人)。合法吗?搜索引擎优化

javascript - 使用 Backbone sync 与预先存在的 Javascript API

reactjs - 保持 Material UI 选项卡和 React Router 同步

javascript - 从提交 React.js 生成元素

javascript - 为什么我的 babel polyfill 不工作?

javascript - React Native - 未定义不是对象(评估 'item.menu_desc' )

Javascript - Sweetalert - 添加值到选择列表

reactjs - React-Table 中的固定列

javascript - 静态变量 JavaScript ECMA6

javascript - 针对某个类的最近标签,而不是原型(prototype)中的第一个标签