首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
zivyou
V2EX  ›  Node.js

动态 require js module

  •  
  •   zivyou · 34 天前 · 4505 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个需求,是去判断一个目录下面有没有 js 文件,如果有的话,就 require 它(后续肯定会用到这些 js 文件里面的一些函数)。 现在我的写法是:

    const files = readdirSync(path);
    const jsFiles = files.filter((f) => f.endsWith('.js'));
    
    jsFiles.forEach((f) => {
        const jsFile = `${path}/${f}`;
        const mapping = require(jsFile);
       // do something with mapping
    });
    
    

    eslint 会提示 dynamic require 是一种不好的设计,查了一些资料,也有明确说不能动态 require js 文件的。 请问下各位老哥,这种情况有什么更好的方案吗?

    PS: 目前为止这段代码运行还没有带来什么问题

    3 回复  |  直到 2020-01-18 04:20:26 +08:00
    libook
        1
    libook   34 天前   ❤️ 1
    运行肯定是可以运行的,功能也能满足要求,ESLint 规则只是建议,并不一定代表程序一定有问题。

    动态 require 的问题可能有:
    1. 如果你用 Webpack 等打包工具分析代码依赖的时候,无法妥善处理动态 require 的代码,只能处理静态引用。
    2. 如果引用的文件有被替换或篡改的可能性(如上传功能),或如果引用的路径有被篡改的可能性,那么在文件第一次被 require 之前,可能会被攻击,并最终导致运行恶意代码。

    暂时想到的只有这么多,如果你的使用场景不具备以上风险的前提条件,就可以用。
    zivyou
        2
    zivyou   34 天前
    @libook 感谢
    xcstream
        3
    xcstream   33 天前
    可以先扫描一下目录 写出一个 js 文件里面都是 require, 再 require 它
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3275 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 12:52 · PVG 20:52 · LAX 04:52 · JFK 07:52
    ♥ Do have faith in what you're doing.