在 NodeJS 中动态要求

Require Dynamically in NodeJS

我正在 monorepo 中开发一个 CLI 包,它有一个名为 buildX 的命令: 遍历多个目录,尝试 require 存在于这些目录的某些文件中的模块。

所以基本上我会尝试做类似的事情:

buildX --source ./somewhere --target ./somewhere/else 

它应该在某个地方对这些模块进行一些操作并将其保存在目标中。

问题是: 如果我有:

* - somewhere
*   | - index.js
*
*somewhere else

Index.js:

import { coolFunction } from 'cool-library';

export default coolFunction({some: object, generated: dynamically })

在做require('./somewhere/index.js')时出现异常:找不到指定路径下的模块。这是因为执行__dirname的时候出现的路径是bin所在的路径,而不是执行的路径

如何以动态方式要求 index.js?我试过 SystemJS,也试过 eval,也试过 dynamic-import-support

我只想能够执行 index.js 导出默认值。

完全欢迎任何建议或解决方案!提前致谢

找到了基于ESLint 库的解决方案。它们有一个 util 函数,可以帮助从当前工作区导入飞行中的配置文件,而不是使用 __dirname.

对于 require 成功后人们可能会发现的问题,例如 ES6 导入或您的节点版本不支持的任何其他功能,您可以使用 babel-register 在飞行中构建模块而不是预构建他们。