NextJS에서 SVG가 포함 된 외부 npm 패키지를 참조 할 때 빌드하는 방법은 무엇입니까?

Willem

내 nextjs 프로젝트 (TheHost라고합시다)는 다른 npm 패키지를 참조합니다 (ThePackage라고합시다).

SVG는 TheHost 내에서 정의 될 때 잘로드되지만 다음에 svg를 자바 스크립트로 해석하려고 시도하기 때문에 ThePackage 가져 오기가 실패합니다. 따라서 다음과 같은 오류가 발생합니다 next build.

SyntaxError: Unexpected token '<'

다시 말하면 SVG는 TheHost 자체에 정의 된 svg를 참조 할 때 잘 작동합니다. 문제는 SVG가 포함 된 npm 패키지를 가져 오는 것 같습니다.

SVG를 사용하는 ThePackage에서 컴포넌트를 가져 왔는지 여부는 중요하지 않습니다. 단지 npm 패키지의 어딘가에 "import xxx from '../path/to/svg'가 next build.

그만한 가치를 위해 ThePackage의 트랜스 파일 된 자바 스크립트는 다음과 같이 svg를 읽습니다.

var _mysvg = require("../path/to/the-svg.svg");

많은 세부 사항 :

다음 빌드 스택 추적은 다음과 같습니다.

> Using external babel configuration
> Location: "/Users/w/dev/TheHost/.babelrc"
Creating an optimized production build

Compiled successfully.

> Build error occurred
/Users/w/dev/TheHost/node_modules/ThePackage/build/assets/card_background.svg:1
<svg viewBox="0 0 860 382" fill="none" xmlns="http://www.w3.org/2000/svg">
^

SyntaxError: Unexpected token '<'
    at Module._compile (internal/modules/cjs/loader.js:895:18)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
    at Module.load (internal/modules/cjs/loader.js:815:32)
    at Function.Module._load (internal/modules/cjs/loader.js:727:14)
    at Module.require (internal/modules/cjs/loader.js:852:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/Users/w/dev/TheHost/node_modules/TheProject/build/card/style.js:14:47)
    at Module._compile (internal/modules/cjs/loader.js:959:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
    at Module.load (internal/modules/cjs/loader.js:815:32) {
  type: 'SyntaxError'
}
Automatically optimizing pages .%

.babelrc 파일 :

{
  "presets": [
    "next/babel"
  ],
  "plugins": [
    "babel-plugin-styled-components",
    "inline-react-svg"
  ]
}

next.config.js 파일 :

const withSourceMaps = require("@zeit/next-source-maps");
const withImages = require("next-images");

module.exports = withImages(
  withSourceMaps({
    env: { *** redacted *** },
    publicRuntimeConfig: { *** redacted *** },
    webpack: (config, options) => {
      if (!options.isServer) {
        config.resolve.alias["@sentry/node"] = "@sentry/browser";
      }
      config.module.rules.push({
        test: /\.svg$/,
        use: ["@svgr/webpack"]
      });
      return config;
    }
  })
);

nextjs svgr 패키지 버전은 다음과 같습니다.

"next": "^9.2.1",
"next-images": "^1.3.0",
"@svgr/webpack": "^5.1.0",
"babel-eslint": "^10.0.3",
"babel-plugin-inline-react-svg": "^1.1.1",

ThePackage는 다음 출력 구성 (webpack)으로 빌드됩니다.

  entry: './src/index.js',
  output: {
    path: buildFolder,
    filename: 'ThePackage.js',
    library: 'ThePackage',
    libraryTarget: 'umd', /* Note: umd */
    umdNamedDefine: true
  },
Seagyn Davis

NextJS는 node_modules기본적으로 무시 하므로 구성이 패키지를 트랜스 파일 할 수 있도록 특별히 허용해야합니다. 다행히 누군가 이미 NextJS 플러그인을 만들어이를 허용했습니다 : https://github.com/martpie/next-transpile-modules

또한 Next Compose Plugins사용하여 구성 을 정리하는 것이 좋습니다 . 결국 next.config.js는 다음과 같이 보일 것입니다.

const withSourceMaps = require("@zeit/next-source-maps");
const withImages = require("next-images");
const withPlugins = require('next-compose-plugins');
const withTM = require('next-transpile-modules')(['ThePackage']);

module.exports = withPlugins([
    withTM,
    [
        withImages,
        {
            exclude: /\.svg$/
        }
    ],
    withSourceMaps
],
{
    env: { *** redacted *** },
    publicRuntimeConfig: { *** redacted *** },
    webpack: (config, options) => {
      if (!options.isServer) {
        config.resolve.alias["@sentry/node"] = "@sentry/browser";
      }
      config.module.rules.push({
        test: /\.svg$/,
        use: ["@svgr/webpack"]
      });
      return config;
    }
});

또한에서 처리되는 SVG를 제외했습니다 withImages.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

QWidget.createWindowContainer가 포함 된 외부 창이 닫힐 때 감지하는 방법은 무엇입니까?

분류에서Dev

<object> 요소가 참조하는 svg에서 부모 문서에 정의 된 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

<object> 요소가 참조하는 svg에서 부모 문서에 정의 된 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

Electron : index.html에서 npm 패키지 관리자를 사용하여 설치된 CSS를 가져 오거나 포함하는 방법은 무엇입니까?

분류에서Dev

웹 애플리케이션 용 Maven 빌드에 여러 jar가 포함 된 외부 폴더를 추가하는 방법은 무엇입니까?

분류에서Dev

수식 내에서 와일드 카드가 포함 된 셀을 참조하는 방법은 무엇입니까?

분류에서Dev

"미해결 외부 기호 _gladLoadGLLoader 함수에서 참조 된 _main"및 "미해결 외부 기호 _glad_glViewport"를 수정하는 방법은 무엇입니까?

분류에서Dev

SQL에서 개수를 반환 할 때 개수가 존재하지 않는 그룹화 된 항목에 값을 포함하는 방법은 무엇입니까?

분류에서Dev

누락 된 데이터를 포함 할 때 "dplyr"에서 rowSums ()를 사용하는 방법은 무엇입니까?

분류에서Dev

Self에 대한 참조를 반환하는 메서드가 포함 된 특성 개체를 사용하는 방법은 무엇입니까?

분류에서Dev

ActiveRecord를 사용할 때 Postgres에 저장된 json의 일부를 제외하는 방법은 무엇입니까?

분류에서Dev

배포 할 때 새로 빌드 된 Docker 이미지를 시작하는 방법은 무엇입니까?

분류에서Dev

PHP 부모 함수가있는 경우 자식에서 재정의 된 함수를 참조하는 방법은 무엇입니까?

분류에서Dev

외부 모듈에서 함수를 참조하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 클래스 외부에서 클래스 내에 포함 된 변수를 증가시키는 방법은 무엇입니까?

분류에서Dev

MXNET을 빌드 할 때 _gfortran_concat_string 및 _gfortran_etime에 대한 정의되지 않은 참조를 수정하는 방법은 무엇입니까?

분류에서Dev

Servlet 3.0에 포함 된 Tomcat-스캔 할 때 특정 jar를 건너 뛰는 방법은 무엇입니까?

분류에서Dev

서비스가 컴포넌트에 주입 된 후 Angular 앱을로드 할 때 발생하는 문제를 해결하는 방법은 무엇입니까?

분류에서Dev

npm을 통해 설치된 라이브러리에서 CSS를 참조하는 방법은 무엇입니까?

분류에서Dev

Xamarin Forms APK에 "필요하지 않은"어셈블리 참조가 포함 된 이유는 무엇입니까?

분류에서Dev

가변 배열 참조도받는 함수에 가변 배열 참조를 전달할 때 & mut이 지정되지 않은 이유는 무엇입니까?

분류에서Dev

Rust에서 때때로 참조 데이터를 소유하기 위해 참조 보유 구조체가 필요할 때의 패턴은 무엇입니까?

분류에서Dev

객체 리터럴 foo 외부에서 foo 내부 메서드의 내부 함수를 호출하는 방법은 무엇입니까? (아래 코드 참조)

분류에서Dev

사용 가능한 백 포트 된 패키지를 찾고 수동으로 업그레이드 할 때 패키지 손실을 방지하는 방법은 무엇입니까?

분류에서Dev

사용 가능한 백 포트 된 패키지를 찾고 수동으로 업그레이드 할 때 패키지 손실을 방지하는 방법은 무엇입니까?

분류에서Dev

서로에 대한 참조가있는 웹 API에서 빌드 된 Python 객체를 처리하는 방법은 무엇입니까?

분류에서Dev

열 이름을 참조하지 않고 첫 번째 열에 특정 문자가 포함 된 모든 행을 삭제하는 방법은 무엇입니까?

분류에서Dev

ReSharper가 참조를 제안 할 때 NuGet 패키지를 추가하지 않는 이유는 무엇입니까?

분류에서Dev

커밋 메시지에 특정 단어가 포함 된 최신 git 커밋을 참조하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    QWidget.createWindowContainer가 포함 된 외부 창이 닫힐 때 감지하는 방법은 무엇입니까?

  2. 2

    <object> 요소가 참조하는 svg에서 부모 문서에 정의 된 함수를 호출하는 방법은 무엇입니까?

  3. 3

    <object> 요소가 참조하는 svg에서 부모 문서에 정의 된 함수를 호출하는 방법은 무엇입니까?

  4. 4

    Electron : index.html에서 npm 패키지 관리자를 사용하여 설치된 CSS를 가져 오거나 포함하는 방법은 무엇입니까?

  5. 5

    웹 애플리케이션 용 Maven 빌드에 여러 jar가 포함 된 외부 폴더를 추가하는 방법은 무엇입니까?

  6. 6

    수식 내에서 와일드 카드가 포함 된 셀을 참조하는 방법은 무엇입니까?

  7. 7

    "미해결 외부 기호 _gladLoadGLLoader 함수에서 참조 된 _main"및 "미해결 외부 기호 _glad_glViewport"를 수정하는 방법은 무엇입니까?

  8. 8

    SQL에서 개수를 반환 할 때 개수가 존재하지 않는 그룹화 된 항목에 값을 포함하는 방법은 무엇입니까?

  9. 9

    누락 된 데이터를 포함 할 때 "dplyr"에서 rowSums ()를 사용하는 방법은 무엇입니까?

  10. 10

    Self에 대한 참조를 반환하는 메서드가 포함 된 특성 개체를 사용하는 방법은 무엇입니까?

  11. 11

    ActiveRecord를 사용할 때 Postgres에 저장된 json의 일부를 제외하는 방법은 무엇입니까?

  12. 12

    배포 할 때 새로 빌드 된 Docker 이미지를 시작하는 방법은 무엇입니까?

  13. 13

    PHP 부모 함수가있는 경우 자식에서 재정의 된 함수를 참조하는 방법은 무엇입니까?

  14. 14

    외부 모듈에서 함수를 참조하는 방법은 무엇입니까?

  15. 15

    파이썬에서 클래스 외부에서 클래스 내에 포함 된 변수를 증가시키는 방법은 무엇입니까?

  16. 16

    MXNET을 빌드 할 때 _gfortran_concat_string 및 _gfortran_etime에 대한 정의되지 않은 참조를 수정하는 방법은 무엇입니까?

  17. 17

    Servlet 3.0에 포함 된 Tomcat-스캔 할 때 특정 jar를 건너 뛰는 방법은 무엇입니까?

  18. 18

    서비스가 컴포넌트에 주입 된 후 Angular 앱을로드 할 때 발생하는 문제를 해결하는 방법은 무엇입니까?

  19. 19

    npm을 통해 설치된 라이브러리에서 CSS를 참조하는 방법은 무엇입니까?

  20. 20

    Xamarin Forms APK에 "필요하지 않은"어셈블리 참조가 포함 된 이유는 무엇입니까?

  21. 21

    가변 배열 참조도받는 함수에 가변 배열 참조를 전달할 때 & mut이 지정되지 않은 이유는 무엇입니까?

  22. 22

    Rust에서 때때로 참조 데이터를 소유하기 위해 참조 보유 구조체가 필요할 때의 패턴은 무엇입니까?

  23. 23

    객체 리터럴 foo 외부에서 foo 내부 메서드의 내부 함수를 호출하는 방법은 무엇입니까? (아래 코드 참조)

  24. 24

    사용 가능한 백 포트 된 패키지를 찾고 수동으로 업그레이드 할 때 패키지 손실을 방지하는 방법은 무엇입니까?

  25. 25

    사용 가능한 백 포트 된 패키지를 찾고 수동으로 업그레이드 할 때 패키지 손실을 방지하는 방법은 무엇입니까?

  26. 26

    서로에 대한 참조가있는 웹 API에서 빌드 된 Python 객체를 처리하는 방법은 무엇입니까?

  27. 27

    열 이름을 참조하지 않고 첫 번째 열에 특정 문자가 포함 된 모든 행을 삭제하는 방법은 무엇입니까?

  28. 28

    ReSharper가 참조를 제안 할 때 NuGet 패키지를 추가하지 않는 이유는 무엇입니까?

  29. 29

    커밋 메시지에 특정 단어가 포함 된 최신 git 커밋을 참조하는 방법은 무엇입니까?

뜨겁다태그

보관