React-pdf: <hash>.worker.js๊ฐ€ ์˜ค๋ฅ˜ 404๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.</hash>

์— ๋งŒ๋“  2017๋…„ 11์›” 06์ผ  ยท  29์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: wojtekmaj/react-pdf

์•ˆ๋…•ํ•˜์„ธ์š”,

webpack.entry๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•˜๋ฉด ๋‚ด ์•ฑ์ด ์ถฉ๋Œํ•˜๊ณ  404๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜„์žฌ ๊ฒฝ๋กœ / cba38462455a43d162b5.worker.js ๋กœ ์ด๋™ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { Document, Page } from 'react-pdf/build/entry.webpack' ๊ฐ€์ ธ ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

๋‚ด webpack ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');

const settings = {
  entry: {
    bundle: [
      'babel-polyfill',
      "./src/frontend/index.js"
    ]
  },
  output: {
    filename: "[name].js",
    path: path.resolve("build")
  },
  resolve: {
    extensions: [".js", ".jsx", ".json", ".css"]
  },
  devtool: "eval-source-map",
  module: {
    rules: [
      {
        test: /\.(js|jsx)?$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          presets: [
            ["es2015", { modules: false }],
            "stage-0",
            "react"
          ],
          plugins: [
            "transform-decorators-legacy",
            "transform-node-env-inline"
          ],
          env: {
            development: {
              presets: ['react-hmre'],
              plugins: ["react-hot-loader/babel"]
            }
          }
        }
      },
      {
        test: /\.css$/,
         use: [ 'style-loader', 'css-loader','less-loader'],
        include: [/flexboxgrid/,/react-star-rating/]
      }
    ]
  },
  devServer: {
    contentBase: path.resolve("src/www"),
    publicPath: "http://localhost:8080/", // full URL is necessary for Hot Module Replacement if additional path will be added.
    quiet: false,
    hot: true,
    historyApiFallback: true,
    inline: true
  },
  plugins: [
    new webpack.NamedModulesPlugin(),
    new webpack.LoaderOptionsPlugin({
      debug: true
    }),
  ],
};

module.exports = settings;

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™ํ–ˆ๋‹ค!
๋‚ด tsconfig์— ์„ค์ •๋œ commonjs๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.
import {Document, Page} from 'react-pdf/dist/umd/entry.webpack'
์ข‹์•„ํ•˜์ง€ ์•Š๋Š”
import {Document, Page} from 'react-pdf' //BAD not working !

์ด์ œ ๋‚ด ๋…ธ๋“œ / ์ต์Šคํ”„๋ ˆ์Šค ์•ฑ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์ •์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๋Š” ๋‹ค๋ฅธ ์•ฑ์—์„œ
๋‚ด tsconfig.json์— ์„ค์ •๋œ esnext๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ˆ˜์ž…ํ•˜๊ณ ์žˆ๋‹ค

import {Document, Page} from 'react-pdf';

์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

์ฆ‰, ์„ค์ •๋œ ๋ชจ๋“ˆ ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.

commonjs ์šฉ
` 'react-pdf'์—์„œ {Document, Page} ๊ฐ€์ ธ ์˜ค๊ธฐ

esnext ์šฉ
import {Document, Page} from 'react-pdf/dist/umd/entry.webpack'

๋ชจ๋“  29 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @benoj , ๋Šฆ๊ฒŒ ํšŒ์‹  ํ•ด .worker.js ๊ฐ€์žˆ๋Š” ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜๋ฉด ํ•˜๋‚˜๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@wojtekmaj ๊ฑฑ์ • ๋งˆ์„ธ์š”-๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๊นŒ?

์ž‘์—…์ž๊ฐ€ /<hash>.worker.js ์—์„œ๋กœ๋“œ๋˜๋ฏ€๋กœ / ์„๋กœ๋“œํ•˜๋ฉด ์•ฑ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ /subresource ์—๋กœ๋“œํ•˜๋ฉด /subresource/<hash>.worker.js ๋Œ€ํ•ด 404๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‚ด devserver๊ฐ€ ์ž‘์—…์ž๊ฐ€ ์ƒ์„ฑ ๋œ ๋นŒ๋“œ ํด๋”์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์—…์ž๊ฐ€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ์ด๊ฒƒ์„ ๋ฌด์‹œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@benoj ์˜ˆ์œ ์†”๋ฃจ์…˜์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ devServer์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ devServer ํ”„๋ก์‹œ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ์š”์ฒญ์„ ๋ฆฌ๋””๋ ‰์…˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@wojtekmaj ์•„๋‹ˆ์š” ํ”„๋กœ๋•์…˜ ์•ฑ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์•ฑ์€ ๋ฐ˜์‘ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์ผ ํŽ˜์ด์ง€ ์•ฑ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์ˆ˜์ค€์—์„œ ์•ฑ์„ ์—ด๋ฉด ์ž‘์—…์ž์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ /{hash}.worker.js ๋Œ€ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ํ•ด์‹œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ณ„์‚ฐ๋˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์ผ์ •ํ•˜๋‹ค๋ฉด?

๋ฒค

ํ  ... Webpack์—์„œ ๋™์ ์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋ชจ๋“  ํŒŒ์ผ์ด ๋™์ผํ•œ ๋…ผ๋ฆฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ / ์ด์™ธ์˜ ๋‹ค๋ฅธ ๊ณณ์—์žˆ๋Š” ๋™์•ˆ ๋™์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋œ ๋ชจ๋“  ๋ฒˆ๋“ค์— ๋ฌธ์ œ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Webpack ๊ตฌ์„ฑ์—์„œ output.publicPath ์ด ๋ˆ„๋ฝ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์›นํŒฉ (์œ„)์„ ๋‹ค์Œ์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

  output: {
    filename: "js/[name].js",
    path: path.resolve("build"),
    publicPath: '/js'
  }

ํ•˜์ง€๋งŒ [hash].worker.js ์ด /js ํด๋”์— ๋นŒ๋“œ๋˜์ง€ ์•Š๊ณ  ์•ฑ์˜ ์š”์ฒญ์ด ์ด์ œ /subresource/js/[hash].worker.js ํ•˜๋ฏ€๋กœ ์—ฌ์ „ํžˆ 404๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๊นŒ? ๋‚ด ์›นํŒฉ์€ ์ƒ๋‹นํžˆ ํ‘œ์ค€์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๊นŒ?

์—…๋ฐ์ดํŠธ : ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ž์‹ ์˜ pdf.worker๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด webpack์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 entry: {
    bundle: [
      'babel-polyfill',
      "./src/frontend/index.js"
    ],
    'pdf.worker': 'pdfjs-dist/build/pdf.worker.entry'
  },
  output: {
    filename: "js/[name].js",
    path: path.resolve("build"),
    publicPath: 'js/'
}

workerSrc๋ฅผ js ์ถœ๋ ฅ ๊ฒฝ๋กœ์— ์ˆ˜๋™์œผ๋กœ ์„ค์ •

import Document from 'react-pdf/build/Document';
import Outline from 'react-pdf/build/Outline';
import Page from 'react-pdf/build/Page';
import React from 'react';
const pdfjs = require('pdfjs-dist');
pdfjs.PDFJS.workerSrc = '/js/pdf.worker.js';

ํ , ์ „ํ˜€ ๋‚˜์œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค!
๋‚˜๋Š” ์ด๊ฒƒ์ด webpack-loader ์˜ ์ €์žฅ์†Œ์—์„œ ๋” ๋งŽ์ด ๋…ผ์˜๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ์ฝ” Webpack ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ž‘์—…์ž๊ฐ€ ์ผ๋ฐ˜ ๋ฒˆ๋“ค๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์กฐ๊ธˆ ๋” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž์‹ ์˜ PDFJS ์„ค์ •์„ ์„ค์ •ํ•˜๋Š” ์ง€์›์ด ๊ณง ์ œ๊ณต ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @benoj ,
ํ•ดํ‚น์—†์ด ์‚ฌ์šฉ์ž ์ง€์ • PDF.js ์„ค์ •์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ด์ œ React-PDF 2.3.0์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

import { setOptions, <WhateverElseYouNeed> } from 'react-pdf';

setOptions({
  workerSrc: '/js/pdf.worker.js',
});

๋„ค๊ฐ€ ์ข‹์•„ํ•˜๊ธธ ๋ฐ”๋ž˜!

@wojtekmaj ๊ต‰์žฅ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๊ฐ์‚ฌ :)

์ด๊ฒƒ์ด ์˜๋„ ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
setOptions ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.
๋ฐฑ์—”๋“œ์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๋นŒ๋“œ ๋ฃจํŠธ์—์„œ <hash>.worker.js ํŒŒ์ผ์„ ๊ณ„์† ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
prod webpack config ์—์„œ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (ํ•ด์‹œ๋ฅผ ์•ž์— ๋ถ™์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค), ์ด์ƒํ•˜๊ฒŒ๋„ dev์—์„œ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...์ด ์›์ธ์„ ํŒŒ์•…ํ•˜๋ฉด ๋‹ค์‹œ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ @benoj ์›๋ž˜ ์†”๋ฃจ์…˜์— ์˜์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๋ชฉํ•ด์•ผ ํ•  ์ค‘์š”ํ•œ ์ ์€ entry.webpack์˜ ์œ ์ผํ•œ ๋ชฉ์ ์€ ์‚ฌ์šฉ์ž ์ธก์—์„œ ๊ตฌ์„ฑ์—†์ด PDF.js ์ž‘์—…์ž๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ํ•ญ๋ชฉ ์ธ entry.webpack์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ๋™์ ์œผ๋กœ ๊ฐ€์ ธ ์˜ค๊ธฐ / ์ฐธ์กฐ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์กฐ๊ธˆ ๋” ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pdfjs ์„ (๋ฅผ) window ์— ๊ฐ€์ ธ ์˜ค๊ฑฐ๋‚˜ ์ฒจ๋ถ€ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
setOptions๊ฐ€ ์ปจํ…์ŠคํŠธ์—†์ด ํ˜ธ์ถœ๋˜๋„๋ก ๊ตฌ์„ฑ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ถ๊ธˆํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.
์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด pdfjs ์ˆ˜๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  workerSrc๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

// importing these on their own
import Document from 'react-pdf/build/Document';
import Page from 'react-pdf/build/Page';
// configuring pdfjs
const pdfjs = require('pdfjs-dist');
pdfjs.PDFJS.workerSrc = '/js/pdf.worker.js';

ํŽธ์ง‘ํ•˜๋‹ค:

์†Œ์Šค๋ฅผ ๋ณด๋ฉด ๋‚ด ๋ฌธ์ œ๊ฐ€ entry.webpack ์—์„œ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์˜๋„ ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

import { Document, Page, setOptions } from "react-pdf/build/entry";

setOptions({
  workerSrc: "/js/worker.pdf.js"
});

๋‚˜์—๊ฒŒ ๊ดœ์ฐฎ์•„ ๋ณด์ธ๋‹ค;) ๋ฌผ๋ก  ๋กœ๋”๋ฅผ ์ง์ ‘ ๋ณต์‚ฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ๊ตฌ์„ฑ์„ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ด๊ฒƒ์ด ๊ธฐ๋ณธ ์ง„์ž… ์ ์ด๋ฏ€๋กœ from 'react-pdf' ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

์ด ๋ฌธ์ œ์— ์ง์ ‘ ์ง๋ฉดํ•ฉ๋‹ˆ๋‹ค. ReactPDF๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒ๋Œ€ ๊ฒฝ๋กœ์—์„œ ์ž‘์—…์ž๋ฅผ๋กœ๋“œํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๊ทธ๊ฒƒ์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” webpack์— ๋„ˆ๋ฌด ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Laravel Mix๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๊ธฐ์—์„œ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค-๋‚ด ์•ฑ์€ /static ์ •์  ์ž์‚ฐ์„ ์ œ๊ณตํ•˜์ง€๋งŒ webpack์—์„œ workerjs ํŒŒ์ผ์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@joshbrw , @tjwebb , ์œ„ ์˜

setOptions ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ทธ๋™์•ˆ ์–ด๋”˜๊ฐ€๋กœ ์˜ฎ๊ฒจ์ง„ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ์œ„์˜ ์ฃผ์„ ์—์žˆ๋Š” ์šด๋™์€ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉด ๋‹ค์Œ์ด ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

import { pdfjs } from 'react-pdf';
pdfjs.GlobalWorkerOptions.workerSrc = `/path/to/your/worker.js`

๊ทธ๋Ÿฌ๋‚˜ DevTools์—์„œ ์‹œ๋„๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—ฌ์ „ํžˆ ํ˜„์žฌ URL์— ์ƒ๋Œ€์ ์ด๋ฉฐ ์ ˆ๋Œ€์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฆฌ ์•กํŠธ ์•ฑ ๋‚ด์—์„œ PDF๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 'react-pdf'๊ฐ€์ ธ ์˜ค๊ธฐ ๋˜๋Š” 'react-pdf / dist / entry.webpack'๋˜๋Š” pdfjs.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js'; (์—ฌ๊ธฐ์„œ '=`)๋ฅผ ์‚ฌ์šฉํ•˜๋“  ๋กœ์ปฌ์—์„œ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ๋˜๋Š” ์„ธ ๋ฒˆ์งธ ์˜ต์…˜์€ ๋ชจ๋‘ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์ƒ์‚ฐ.

ํ”„๋กœ๋•์…˜์—์„œ 'react-pdf'๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด pdf.worker.js๊ฐ€ URL / pdf.work.js์—์„œ ํ˜ธ์ถœ๋˜๋ฉฐ (์ƒํƒœ) "์ทจ์†Œ๋จ"์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ CDN์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜๊ณ  ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ๋กœ๋“œ๋˜์—ˆ์ง€๋งŒ ๋‘ ์ƒํ™ฉ ๋ชจ๋‘์—์„œ ํƒญ์ด ๋ฉˆ์ถ”๊ณ  ๊ฒฐ๊ตญ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. devTool Sources์— "์ž ์žฌ์  ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์ถฉ๋Œ ์ „์— ์ผ์‹œ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊บผ๋‚ด์•ผํ–ˆ๊ณ , ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ „ํ˜€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. 371 , 378- ๋‹ต๋ณ€ ์—†์Œ , pdf.js์˜ 8305

์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜์†”์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ณ  404๊ฐ€ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉํ•  ๋•Œ : import { Document, Page } from "react-pdf"; pdf ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ import { Document, Page } from 'react-pdf/dist/entry.webpack'; ์‚ฌ์šฉํ•  ๋•Œ ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
onDocumentLoadSuccess ํ˜ธ์ถœ ํ•œ ์ ์ด ์—†์œผ๋ฉฐ Loading PDFโ€ฆ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜๋กœ๋“œ ํ•˜๋Š”
๋‹ค์Œ ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • onLoadError (๋ฌธ์„œ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด๋ถ€)
  • onSourceError (๋ฌธ์„œ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด๋ถ€)
  • onLoadError (ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด๋ถ€)
  • onRenderError (ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด๋ถ€)
  • onLoadProgress (ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด๋ถ€)

@ b-asaf ๋•Œ๋กœ๋Š” ํŠนํžˆ 404 ๋Œ€์‹  ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์šฐํŒ…์ด์žˆ๋Š” ์ตœ์‹  ์•ฑ์—์„œ HTML ํŽ˜์ด์ง€๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ ์‹ค์ œ HTTP 404 ์˜ค๋ฅ˜ ์ฝ”๋“œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ณ  200์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๊นŒ๋‹ค๋กญ๊ธฐ ๋•Œ๋ฌธ์— PDF.js์˜ ๊ธฐ๋ณธ cdn์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { pdfjs } from 'react-pdf';
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;

์—ฌ๊ธฐ์— ๋ชจ๋“  ๋‹ต๋ณ€์— ๊ฐ์‚ฌํ•˜์ง€๋งŒ CDN์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ 

import { pdfjs } from 'react-pdf';
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;

๋„๋ฉ”์ธ ๊ฐ„ ์š”์ฒญ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ ์ถœ๋ ฅ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์„ค์ •ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

pdfjs.GlobalWorkerOptions.workerSrc = '/dist/vendors~pdfjsWorker.js';

์ด ๋„๊ตฌ๋ฅผ ๋งŽ์ด ์ข‹์•„ํ–ˆ์ง€๋งŒ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. SPA ์•ฑ์—์„œ ์ž‘์—… ์ค‘์ด๋ฉฐ http://example.com/check/id/language ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ ํ•˜๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ.

์ด๊ฒƒ์€ CDN ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋‚ด ๋กœ์ปฌ ์•ฑ ์ค‘ ํ•˜๋‚˜์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ ๋‹ค๋ฅธ ์•ฑ์—์„œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์•ฑ ์ค‘ ํ•˜๋‚˜์—์„œ react static์„ ์‚ฌ์šฉํ•˜์—ฌ web-pack dev server๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” webpack๊ณผ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” ๋…ธ๋“œ / ์ต์Šคํ”„๋ ˆ์Šค ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ํ”„๋ŸฐํŠธ ์—”๋“œ๋Š” ๋‹ค์‹œ React์ž…๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

pdf ํ•ญ๋ชฉ์˜ ๊ตฌ์„ฑ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋‚ด ๋…ธ๋“œ / ์ต์Šคํ”„๋ ˆ์Šค ์›น ํŒฉ ์„ค์ •์œผ๋กœํ•ด์•ผ ํ•  ์ผ์ด ์žˆ์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
๊ธ‰ํ–‰ ๋…ธ์„ ๊ณผ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ ; ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋‹ค์‹œ ๋Œ์•„ ์˜ค๊ฑฐ๋‚˜, ๋ฌด์Šจ ์ผ์ธ์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ๊ณต์œ ํ•ด์ฃผ์„ธ์š”.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™ํ–ˆ๋‹ค!
๋‚ด tsconfig์— ์„ค์ •๋œ commonjs๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.
import {Document, Page} from 'react-pdf/dist/umd/entry.webpack'
์ข‹์•„ํ•˜์ง€ ์•Š๋Š”
import {Document, Page} from 'react-pdf' //BAD not working !

์ด์ œ ๋‚ด ๋…ธ๋“œ / ์ต์Šคํ”„๋ ˆ์Šค ์•ฑ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์ •์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๋Š” ๋‹ค๋ฅธ ์•ฑ์—์„œ
๋‚ด tsconfig.json์— ์„ค์ •๋œ esnext๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ˆ˜์ž…ํ•˜๊ณ ์žˆ๋‹ค

import {Document, Page} from 'react-pdf';

์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

์ฆ‰, ์„ค์ •๋œ ๋ชจ๋“ˆ ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.

commonjs ์šฉ
` 'react-pdf'์—์„œ {Document, Page} ๊ฐ€์ ธ ์˜ค๊ธฐ

esnext ์šฉ
import {Document, Page} from 'react-pdf/dist/umd/entry.webpack'

@nickjohngray react-pdf/dist/umd/entry.webpack ์—์„œ ๊ฐ€์ ธ ์˜ค๋ ค๊ณ ํ•˜๋Š”๋ฐ Typescript๊ฐ€ ํ•˜์œ„ ๋ชจ๋“ˆ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „ ์ธ @types/react-pdf ๋ฒ„์ „ 4.0.6์ด ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํ˜• ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ ํ–ˆ์Šต๋‹ˆ๊นŒ?

typecheck๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด ์ž‘์—…์ž๊ฐ€ ์ž˜ ์ปดํŒŒ์ผ๋˜๊ณ  ์žˆ๊ณ  dist/umd ์‚ฌ์šฉํ•  ๋•Œ PDF๊ฐ€๋กœ๋“œ ๋ฐ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ typecheck๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  IDE๋„ ๋ถˆํ‰ :

Error:(4, 30) TS7016: Could not find a declaration file for module 'react-pdf/dist/umd/entry.webpack'. 
  E:/Users/Rob/workspace/gTove/node_modules/react-pdf/dist/umd/entry.webpack.js' implicitly has an 'any' type.
  If the 'react-pdf' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-pdf`

์•ˆ๋…•ํ•˜์„ธ์š” @RobRendell
๋‚˜๋Š” ์œ ํ˜• ์˜ค๋ฅ˜๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ์œ ํ˜• ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ค‘์ง€๋˜๋Š” ๊ฒฝ์šฐ any ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@nickjohngray any ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ (๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฌธ), ๊ฐ€์ ธ ์˜ค๊ธฐ ์•ž์— // @ts-ignore ๋ผ๋Š” ์ค„์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” ์ ์ ˆํ•œ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. .d.ts ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋“ˆ ์„ ์–ธ์„ ํ™•์žฅํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

import {pdfjs, Document, Page, Outline} from 'react-pdf';

declare module 'react-pdf/dist/umd/entry.webpack' {
    export {pdfjs, Document, Page, Outline};
}

...ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Typescript์— ๋Šฅ์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹ฌ์„ฑํ•ด์•ผ ํ•  ๋งˆ๊ฐ์ผ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋๋‚˜๋ฉด ๋„์™€ ์ค„ ์ˆ˜์žˆ์–ด
์ € ๋ฌผ๊ฑด . ๋ฌธ์ œ๋Š” ์ž‘๊ณ  ์งœ์ฆ๋‚˜๋Š” ์œ ํ˜•์˜ ๋ฌธ์ œ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” typescript๋ฅผ ์™„์ „ํžˆ ์ง€์›ํ•˜์ง€ ์•Š๋Š” libs์— ๋Œ€ํ•œ ํŒจ์Šค์—์„œ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋“ค์„ ์œ„ํ•ด ์œ ํ˜•์„ ์ž‘์—…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ•  ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์‹œ๊ฐ„์€ ์ œํ•œ๋˜์–ด ์žˆ๊ณ 
ํ‚ฅ ์—‰๋ฉ์ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ณ ์น˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๋ ‡๊ฒŒ ์ด‰๊ตฌํ•ฉ๋‹ˆ๋‹ค
๋˜‘๊ฐ™๋‹ค . ๐Ÿ˜€

๊ณ ๋งˆ์›Œ ๋‹‰.

์›”์š”์ผ, 2020 ๋…„ 9 ์›” 28 ์ผ, ์˜คํ›„ 8:01 Rob Rendell, [email protected] ์ž‘์„ฑ :

@nickjohngray https://github.com/nickjohngray ๋‚˜๋Š” ์œ ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
(์ด๊ฒƒ์€ import ๋ฌธ์ž…๋‹ˆ๋‹ค), ๊ทธ๋Ÿฌ๋‚˜ //๋ผ๋Š” ์ค„์„ ๊ฐ€์ ธ ์˜ค๊ธฐ ์ „์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@ ts-ignore๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” ์ ์ ˆํ•œ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋…ธ๋ ฅํ•˜๊ณ ์žˆ๋‹ค
.d.ts ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋“ˆ ์„ ์–ธ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

'react-pdf'์—์„œ {pdfjs, Document, Page, Outline} ๊ฐ€์ ธ ์˜ค๊ธฐ;

์„ ์–ธ ๋ชจ๋“ˆ 'react-pdf / dist / umd / entry.webpack'{
{pdfjs, ๋ฌธ์„œ, ํŽ˜์ด์ง€, ๊ฐœ์š”} ๋‚ด๋ณด๋‚ด๊ธฐ;
}

...ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Šฅ์ˆ™ํ•˜์ง€ ์•Š๋‹ค
Typescript์—์„œ ๊ทธ๊ฒŒ ๋ฌด์Šจ ์ผ์ธ์ง€ ์•Œ๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/wojtekmaj/react-pdf/issues/97#issuecomment-699818238 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AD3TSIQUIASADKB6UASTNRDSIAYEZANCNFSM4ECOS2TQ
.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰