【发布时间】:2019-07-08 11:52:32
【问题描述】:
我在我创建的自定义 npm 包中使用 find-up 将配置数据从项目根目录加载到 npm 包中。我遇到的问题是 file-up 使用了 fs 模块,它只在编译时运行。当我尝试将 npm 包与项目一起使用时,它会因为找不到 fs 包而失败。
该项目是一个 Next.js 应用程序。
所以基本上,在根 project 目录中,我有一个配置文件(我们称之为myConfig.js)。
我已经为这个项目安装了一个 npm 包(我们称之为myPackage)。
在node_modules/myPackage/index.js 中有代码将myConfig.js 中导出的对象与node_modules/myPackage/defaultConfig.js 中的默认配置文件合并。
这个新合并的配置文件随后被node_modules/myPackage/components/... 中的其他组件使用。然后我将组件导入我的应用程序。例如,我可能在pages/index.js 中有import CoolComponent from "myPackage"。
由于配置的合并是在运行时完成的,并且它需要 fs 模块,因此失败并显示无法找到 fs 模块的错误。我想做的是能够在编译时运行它,但我不知道该怎么做。
代码如下:
// node_modules/myPackage/index.js
import findUp from "find-up";
import deepMerge from "deepmerge";
import defaultConfig from "./defaultConfig";
const config = (() => {
const path = findUp.sync("myConfig.js");
if (path && path.length) {
const userConfigModule = module.require(path);
return deepMerge(defaultConfig, userConfigModule);
}
return defaultConfig;
})();
export default config;
同样,我也希望能够在编译期间从 CMS 获取,因为在运行期间获取会显着减慢初始加载时间,并且获取的数据不会经常更改。
我该怎么做?
【问题讨论】:
-
我去看看 rc.我的理解是这些在运行时不起作用(就像查找在运行时如何不起作用),这就是为什么我询问如何让它们在 React 的编译期间工作(特别是 Next. js) 应用程序
-
是的,那也行不通。我可以看到它需要“fs”模块,所以会出现同样的问题 - github.com/davidtheclark/cosmiconfig/blob/…
-
你不应该在运行时使用
fs,react 是一个基于网络的应用程序,你不会在浏览器中有fs模块。编译时获取实际上比运行时获取更快。我认为您问错了问题,我假设您的开发环境很慢,并且您得出结论是因为配置加载,这可能是真的,也可能不是。没有实际指标很难判断。 -
我想你可能对我的问题感到困惑。我在问如何进行编译时间获取。这正是我想要实现的目标。
标签: node.js reactjs npm next.js