我正在处理一个 monorepo 中的 CLI 包,该包具有一个名为buildX
的命令: 遍历多个目录,尝试require
存在于这些目录中的某些文件中的模块。
所以基本上我会尝试做这样的事情:
buildX --source ./somewhere --target ./somewhere/else
它应该在某个地方对这些模块执行一些操作并将其保存在目标中。
问题是:如果我有:
* - somewhere
* | - index.js
*
*somewhere else
索引.js:
import { coolFunction } from 'cool-library';
export default coolFunction({some: object, generated: dynamically })
在执行require('./somewhere/index.js')
时,有一个异常:它无法在指定的路径中找到模块。这是因为在执行__dirname时,显示的路径是存储bin
的路径,而不是执行的路径。
如何以动态方式要求索引.js?我尝试了SystemJS
,也尝试了 eval,也尝试了dynamic-import-support
.
我只想能够执行索引.js导出默认值。
完全欢迎任何建议或解决方案!提前致谢
找到了一个基于 ESLint 库的解决方案。具有 util 功能,可帮助从当前工作区导入飞行中的配置文件,而不是使用__dirname
.
对于人们在成功要求后可能会发现的问题,例如 ES6 导入或节点版本不支持的任何其他功能,您可以使用 babel-register 在飞行中构建模块,而不是预先构建它们。