>

맞춤형 npm 패키지에서 찾기 를 사용하고 있습니다. 프로젝트 루트에서 npm 패키지로 구성 데이터를로드하기 위해 작성되었습니다. 내가 겪고있는 문제는 파일 업이 fs 를 사용한다는 것입니다.  컴파일 타임에만 실행되는 모듈. 프로젝트에서 npm 패키지를 사용하려고하면 fs 를 찾을 수 없으므로 실패합니다.  패키지.

이 프로젝트는 Next.js 앱입니다.

기본적으로 루트프로젝트디렉토리 내에 구성 파일이 있습니다 ( myConfig.js 라고 부릅니다). ).

이 프로젝트와 함께 npm 패키지를 설치했습니다 ( myPackage 라고합시다) ).

node_modules/myPackage/index.js 내   myConfig.js 에서 내 보낸 객체를 병합하는 코드가 있습니다   node_modules/myPackage/defaultConfig.js 에있는 기본 구성 파일 .

이 새로운 병합 된 구성 파일은 node_modules/myPackage/components/... 내의 다른 구성 요소에 의해 사용됩니다. . 그런 다음 구성 요소를 내 앱으로 가져옵니다. 예를 들어 import CoolComponent from "myPackage" 가있을 수 있습니다.   pages/index.js 내 .

구성의 병합은 런타임에 수행되므로 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에서 가져올 수 있기를 원합니다.

어떻게해야합니까?

  • 답변 # 1

    제공된 Next.js 구성 관리 예제를 사용할 수 있습니다

    next.config.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;
    })();
    module.exports = {
        env: {
          ...config
       }
    }
    
    

    그리고 process.env.YOUR_VARIABLE 를 통해 변수에 접근 할 수 있습니다

  • 이전 linux - Bash while 루프에서 "and"사용
  • 다음 kdb - 가능한 날짜 문자열을 테이블 행과 일치시키는 방법은 무엇입니까?