Pdf.js: Webpack μ§€μΉ¨μœΌλ‘œ 인해 μ—¬μ „νžˆ 'κ°€μ§œ μž‘μ—…μž'κ°€λ‘œλ“œ 됨

에 λ§Œλ“  2016λ…„ 09μ›” 07일  Β·  32μ½”λ©˜νŠΈ  Β·  좜처: mozilla/pdf.js

ꡬ성 :

  • μ›Ή λΈŒλΌμš°μ € 및 버전 : Chrome 52
  • 운영 체제 및 버전 : OS X Yosemite
  • PDF.js 버전 : 1.4.237
  • ν™•μž₯ : μ•„λ‹ˆμš”

문제λ₯Ό μž¬ν˜„ν•˜λŠ” 단계 :
λ‚΄ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

import pdflib from 'pdfjs-dist'
pdflib.PDFJS.workerSrc = './node_modules/pdfjs-dist/build/pdf.worker.entry.js'

https://github.com/mozilla/pdf.js/wiki/Setup-pdf.js-in-a-website#with -webpack에 μ„€λͺ… λœλŒ€λ‘œ μ •ν™•νžˆ
κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œ λ¬Έμ„œλ₯Όλ‘œλ“œ ν•  λ•Œ μ½˜μ†”μ— Warning: Setting up fake worker.' λ˜μ–΄ 지침이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

λ˜ν•œ "PDFJS.workerSrc _shall_이 νŒŒμΌμ„ 가리 킀도둝 μ„€μ • 됨"(ν˜„μž¬ 문ꡬ)이 μžλ™μœΌλ‘œ 섀정됨을 μ˜λ―Έν•˜κ³  "PDFJS.workerSrc _should_가이 νŒŒμΌμ„ 가리 킀도둝 μ„€μ • 됨"은 직접 μ„€μ •ν•˜μ‹­μ‹œμ˜€.
예제 μ½”λ“œ λŠ” PDFJSλ₯Ό κ°€μ Έ μ˜€λŠ” μ‚¬λžŒμ΄ μˆ˜ν–‰ ν•  μˆ˜μ—†λŠ” μ €μž₯μ†Œ ( pdfjsLib.PDFJS.workerSrc = '../../build/webpack/pdf.worker.bundle.js'; )에 λŒ€ν•œ μƒλŒ€ 경둜λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ 그닀지 λ„μ›€μ΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž‘μ—…μž 슀크립트λ₯Ό μžλ™μœΌλ‘œλ‘œλ“œν•˜λŠ” https://github.com/mozilla/pdf.js/pull/6595 와 같은 1 λ…„ 미만의 문제 / PR을 검색 ν•  λ•Œ ν˜Όλž€ μŠ€λŸ½μ§€λ§Œ ν•΄λ‹Ή μ½”λ“œλŠ” κ·Έλž˜μ„œ workerSrc μ„€μ •ν•˜κ³  μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ κ°€μ§œ μž‘μ—…μžκ°€λ‘œλ“œλ©λ‹ˆλ‹€. κ°€μ§œ μž‘μ—…μžλŠ” webpackμ—μ„œ λΉŒλ“œ ν•œ μž‘μ—…μž 슀크립트λ₯Ό 찾을 μˆ˜μžˆλŠ” μœ„μΉ˜λ₯Ό μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€ (예 : 1.bundle.js λŠ” μž‘μ—…μžμ΄κ³  bundle.js κ°€ 슀크립트)μ΄λ―€λ‘œ μ‹€μ œ μž‘μ—…μžκ°€μ΄ 논리도 μ‚¬μš©ν•  μˆ˜μ—†λŠ” μ΄μœ κ°€ ν˜Όλž€ μŠ€λŸ½μŠ΅λ‹ˆλ‹€.
workerSrc μ—μ„œ 생성 된 1.bundle.js νŒŒμΌμ„ 가리킀고 심지어 webpack의 μž‘μ—…μž λ‘œλ” λ₯Ό μ‚¬μš©ν•˜μ—¬ PDFWorker ( pdflib.PDFJS.PDFWorker = require('worker!pdfjs-dist/build/pdf.worker.entry.js') )λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜κ³  λŒ€μ²΄ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ 그렇지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μž‘λ™ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μž‘μ—…μžκ°€ webpack을 μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ™„μ „νžˆ μžƒμ–΄ λ²„λ Έμ–΄μš”.

1-other

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚΄ μ›ΉνŒ© ν”„λ‘œμ νŠΈμ—μ„œ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμ§€λ§Œ λ‹€λ₯΄κ²Œ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. webpack의 λ²ˆλ“€λ§ λ˜λŠ” λ‘œλ”μ— μ˜μ‘΄ν•˜λŠ” λŒ€μ‹  CopyWebpackPlugin 을 μ‚¬μš©ν•˜μ—¬ μž‘μ—…μž μ†ŒμŠ€λ₯Ό λ‚΄ λΉŒλ“œ 디렉토리에 λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ λ·°μ–΄μ—μ„œ :

import pdfjsLib from 'pdfjs-dist';

if (process.env.NODE_ENV !== 'production') {
   //in dev, get it from the node_modules directory
   //NOTE: don't use the "entry" file -- the script will fail and the web worker will not be used
   pdfjsLib.PDFJS.workerSrc = `${process.env.APP_ROOT}/node_modules/pdfjs-dist/build/pdf.worker.js`;
} else {
   //in prod, get it from the build directory
   pdfjsLib.PDFJS.workerSrc = `${process.env.APP_ROOT}/build/pdf.worker.js`;
}

webpack.config.js :

const CopyWebpackPlugin = require('copy-webpack-plugin');

return {
   //... rest of config omitted
   plugins: [{
      new CopyWebpackPlugin([{
         from: 'node_modules/pdfjs-dist/build/pdf.worker.js',
         to: 'pdf.worker.js'
      }])
   }]
}

λͺ¨λ“  32 λŒ“κΈ€

κ°€μ§œ μž‘μ—…μžλŠ” webpackμ—μ„œ λΉŒλ“œ ν•œ μž‘μ—…μž 슀크립트λ₯Ό 찾을 μˆ˜μžˆλŠ” μœ„μΉ˜λ₯Ό μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€ (예 : bundle.jsκ°€ 슀크립트 일 λ•Œ 1.bundle.jsλŠ” μž‘μ—…μžμž…λ‹ˆλ‹€). κ·Έλž˜μ„œ μ‹€μ œ μž‘μ—…μžκ°€μ΄ 논리λ₯Ό μ‚¬μš©ν•  μˆ˜μ—†λŠ” μ΄μœ κ°€ ν—·κ°ˆλ¦½λ‹ˆλ‹€.

bundle.js에 μž‘μ—…μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. (νŽ˜μ΄μ§€ λ‘œλ”© μ„±λŠ₯ 및 크기둜 인해) κ±°κΈ°μ—μžˆλŠ” 것이 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 전체 pdf.worker.js νŒŒμΌμ€ λ³„λ„μ˜ λ²ˆλ“€μ— λ°°μΉ˜λ©λ‹ˆλ‹€.

예제 μ½”λ“œλŠ” μ‚¬λžŒμ΄ κ°€μ Έ μ˜€λŠ” μ €μž₯μ†Œ (pdfjsLib.PDFJS.workerSrc = '../../build/webpack/pdf.worker.bundle.js';)에 λŒ€ν•œ μƒλŒ€ 경둜λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 그닀지 λ„μ›€μ΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. PDFJSλŠ” λΆ„λͺ…νžˆ ν•  수 없을 κ²ƒμž…λ‹ˆλ‹€ (맀우 μœ μš©ν•œ μ˜ˆλŠ” μ•„λ‹™λ‹ˆλ‹€).

pdf.worker.js λͺ¨λ“ˆμ„ ν¬ν•¨ν•˜λŠ” λ²ˆλ“€ 좜λ ₯으둜 생성 ν•œ pdf.worker.bundle.js 파일 (pdfjs-distμ—μ„œ κ°€μ Έμ˜΄)

λ¬Έμ œμ— λŒ€ν•œ μ„€λͺ…이 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™„μ „ν•œ 예제 μ†ŒμŠ€ μ½”λ“œλ₯Ό 제곡 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

bundle.js에 μž‘μ—…μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. (νŽ˜μ΄μ§€ λ‘œλ”© μ„±λŠ₯ 및 크기둜 인해) κ±°κΈ°μ—μžˆλŠ” 것이 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 전체 pdf.worker.js νŒŒμΌμ€ λ³„λ„μ˜ λ²ˆλ“€μ— λ°°μΉ˜λ©λ‹ˆλ‹€.

동봉 된 μ½”λ“œλ₯Ό ν™•μΈν•˜κ³  μž‘μ—…μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ•žμ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ μž‘μ—…μž μŠ€ν¬λ¦½νŠΈλŠ” 1.bundle.js λ²ˆλ“€λ‘œ μ œκ³΅λ©λ‹ˆλ‹€. PDFλ₯Όλ‘œλ“œ ν•  λ•Œ 1.bundle.js λŒ€ν•œ 슀크립트 νƒœκ·Έκ°€ λ‚΄ <head> νƒœκ·Έμ— μ‚½μž…λ©λ‹ˆλ‹€ (PDFJS λ˜λŠ” μ›ΉνŒ©μ—μ„œ κ°€μ Έμ˜¨ 것인지 ν™•μ‹€ν•˜μ§€ μ•ŠμŒ).

pdf.worker.js λͺ¨λ“ˆμ„ ν¬ν•¨ν•˜λŠ” λ²ˆλ“€ 좜λ ₯으둜 생성 ν•œ pdf.worker.bundle.js 파일 (pdfjs-distμ—μ„œ κ°€μ Έμ˜΄)

node_modules μ—μ„œ μž‘μ—…μž 슀크립트λ₯Όλ‘œλ“œν•˜λŠ” Wiki의 첫 번째 방법이며 μ„ ν˜Έν•˜λŠ” 방법을 μ‚¬μš©ν•˜λŠ” μ˜ˆμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ? μœ„ν‚€ μ„Ήμ…˜μ—μ„œ : "μž‘μ—…μžλŠ” λ³„λ„μ˜ λ²ˆλ“€λ‘œ λΉŒλ“œλ©λ‹ˆλ‹€."./node_modules/pdfjs-dist/build/pdf.worker.entry.js "파일 κ°€μ Έ 였기"

@yurydelendik 더 이상 μ½”λ“œλ² μ΄μŠ€μ—μ—†λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” # 6595μ—μ„œ μž‘μ—…μžμ˜ μžλ™ 감지 /λ‘œλ“œμ— λŒ€ν•΄ μžμ„Ένžˆ

λ¬Έμ œμ— λŒ€ν•œ μ„€λͺ…이 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™„μ „ν•œ 예제 μ†ŒμŠ€ μ½”λ“œλ₯Ό 제곡 ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ„μ›€μ΄λ˜κ±°λ‚˜ κ΄€λ ¨μ„±μ΄λ³„λ‘œ μ—†κΈ° λ•Œλ¬Έμ— μ†ŒμŠ€ μ½”λ“œλ₯Ό μ²¨λΆ€ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ 여기에 50 쀄 μš”μ•½μ΄ μžˆμŠ΅λ‹ˆλ‹€. http://pastebin.com/raw/PHs6bfby. file μΈμˆ˜λŠ” 말 κ·ΈλŒ€λ‘œ <input type='file' /> μš”μ†Œμ˜ νŒŒμΌμž…λ‹ˆλ‹€.

@yurydelendik 더 이상 μ½”λ“œλ² μ΄μŠ€μ—μ—†λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” # 6595μ—μ„œ μž‘μ—…μžμ˜ μžλ™ 감지 /λ‘œλ“œμ— λŒ€ν•΄ μžμ„Ένžˆ

이 κΈ°λŠ₯은 번 λ“€λŸ¬ / νŒ¨ν‚€μ € 용이 μ•„λ‹™λ‹ˆλ‹€.

pdf.jsλ₯Ό μ‚¬μš©ν•˜λŠ” 라이브러리λ₯Ό ꡬ좕 μ€‘μ΄λ―€λ‘œ λˆ„κ΅°κ°€κ°€ λ‚΄ 라이브러리λ₯Ό μž‘λ™μ‹œν‚€κΈ° μœ„ν•΄ pdf.js μ½”λ“œλ₯Ό κ°€μ Έμ™€μ•Όν•œλ‹€λ©΄ μ•½κ°„ μ„± κ°€μ‹€ κ²ƒμž…λ‹ˆλ‹€ (쒅속성 쒅속성 관리).

μ§€κΈˆκΉŒμ§€ μš°λ¦¬λŠ” μ›Ή μž‘μ—…μžλ₯Ό μ μ ˆν•˜κ²Œ κ΄€λ¦¬ν•˜λŠ” 번 λ“€λŸ¬λ₯Ό 찾지 λͺ»ν–ˆκ³  μ›ΉνŒ©μ΄λ‚˜ λΈŒλΌμš°μ € 화에 λŒ€ν•œ μ„ ν˜Έλ„λ₯Ό λΆ€μ—¬ν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€. λ™μ‹œμ— λ‘˜ λ‹€ μ§€μ›ν•˜λŠ” 데 λ¬Έμ œκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

해결책은 μ’…μ†μ„±μ˜ 쒅속성을 κ΄€λ¦¬ν•˜λŠ” 것이 κ°„λ‹¨ν•˜μ§€ μ•Šμ€ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ PDF의 효율적인 ꡬ문 뢄석 및 λ Œλ”λ§μ€ κ°„λ‹¨ν•œ μž‘μ—…μ΄ μ•„λ‹™λ‹ˆλ‹€. μ›Ή μ›Œμ»€ μ‚¬μš©μ„ ν¬κΈ°ν•˜κ³  자유둭게 ν•  수 μžˆλ‹€λ©΄ UI μ„±λŠ₯이 μ €ν•˜λ˜κ³  νŠΈλ ˆμ΄λ“œ μ˜€ν”„κ°€ 될 κ²ƒμž…λ‹ˆλ‹€.

μœ μš©ν•˜κ±°λ‚˜ κ΄€λ ¨μ„±μ΄λ³„λ‘œ μ—†κΈ° λ•Œλ¬Έμ— μ†ŒμŠ€ μ½”λ“œλ₯Ό μ²¨λΆ€ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ‹¬μ„±ν•˜λ €λŠ” μ˜λ„λ₯Ό λ³΄μ—¬μ£ΌλŠ” 라이브러리의 μž‘μ€ 예λ₯Ό κ²Œμ‹œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 제곡된 μ½”λ“œ 슀 λ‹ˆνŽ«μ€ μœ μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‹€ν–‰ κ°€λŠ₯ν•˜μ§€ μ•Šκ³  μˆ˜ν–‰ν•˜λ €λŠ” μž‘μ—…μ΄ μ•„λ‹Œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. https://cdn.kidoju.com/support/viewer/index.html을 μ°Έμ‘°
μ½”λ“œλŠ” https://github.com/kidoju/Kidoju-Help μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€ build cmd νŒŒμΌμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
https://github.com/kidoju/Kidoju-Help/issues/2λ₯Ό μ°Έμ‘°

이 κΈ°λŠ₯은 번 λ“€λŸ¬ / νŒ¨ν‚€μ € 용이 μ•„λ‹™λ‹ˆλ‹€.

λͺ°λžμ–΄μš” πŸ‘

μ§€κΈˆκΉŒμ§€ μš°λ¦¬λŠ” μ›Ή μž‘μ—…μžλ₯Ό μ μ ˆν•˜κ²Œ κ΄€λ¦¬ν•˜λŠ” 번 λ“€λŸ¬λ₯Ό 찾지 λͺ»ν–ˆκ³  μ›ΉνŒ©μ΄λ‚˜ λΈŒλΌμš°μ € 화에 λŒ€ν•œ μ„ ν˜Έλ„λ₯Ό λΆ€μ—¬ν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€. λ™μ‹œμ— λ‘˜ λ‹€ μ§€μ›ν•˜λŠ” 데 λ¬Έμ œκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
해결책은 μ’…μ†μ„±μ˜ 쒅속성을 κ΄€λ¦¬ν•˜λŠ” 것이 κ°„λ‹¨ν•˜μ§€ μ•Šμ€ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ PDF의 효율적인 ꡬ문 뢄석 및 λ Œλ”λ§μ€ κ°„λ‹¨ν•œ μž‘μ—…μ΄ μ•„λ‹™λ‹ˆλ‹€. μ›Ή μ›Œμ»€ μ‚¬μš©μ„ ν¬κΈ°ν•˜κ³  자유둭게 ν•  수 μžˆλ‹€λ©΄ UI μ„±λŠ₯이 μ €ν•˜λ˜κ³  νŠΈλ ˆμ΄λ“œ μ˜€ν”„κ°€ 될 κ²ƒμž…λ‹ˆλ‹€.

@yurydelendik λ‚˜λŠ” λ‹Ήμ‹ κ³Ό λ™μ˜ν•˜μ§€λ§Œ κ·Έ μ ˆμΆ©μ•ˆμ΄ λ§Œλ“€μ–΄ 질 ν•„μš”κ°€ μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ›ΉνŒ©μ€μ΄ λ…Έλ™μž λ‘œλ” 및 BrowserifyλŠ”μ΄ webworkify이 - λ“€λŸ¬ μ‹œμŠ€ν…œμ„ κ°μ§€ν•˜κ³  ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, λ‹€λ₯Έ ν•˜λ‚˜λŠ”μ΄ 문제λ₯Ό μ™„μ „νžˆ ν•΄κ²°ν•˜μ§€ μ•Šμ„κΉŒμš”?

μ—¬κΈ°μ—μ„œ ν•  μˆ˜μžˆλŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€ : https://github.com/mozilla/pdf.js/blob/master/src/display/api.js#L1132 , μž‘μ—…μž ν•­λͺ©μ— λŒ€ν•œ 직접 경둜λ₯Ό μ‚¬μš©ν•˜μ—¬
μ›ΉνŒ©μ˜ var worker = require('worker!../pdf.worker.entry.js') λ˜λŠ”
Browserifyμ—μ„œ var worker = require('webworkerify')('../pdf.worker.entry.js') .
λ‚΄κ°€ κ·Έκ²ƒμœΌλ‘œ 마크λ₯Ό μ³€λ‹€κ³  μƒκ°ν•œλ‹€λ©΄, λ‚˜λŠ” 그것에 λŒ€ν•œ PR을 μž‘μ„±ν•˜κ²Œλ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

λ‹¬μ„±ν•˜λ €λŠ” μ˜λ„λ₯Ό λ³΄μ—¬μ£ΌλŠ” 라이브러리의 μž‘μ€ 예λ₯Ό κ²Œμ‹œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 제곡된 μ½”λ“œ 슀 λ‹ˆνŽ«μ€ μœ μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‹€ν–‰ κ°€λŠ₯ν•˜μ§€ μ•Šκ³  μˆ˜ν–‰ν•˜λ €λŠ” μž‘μ—…μ΄ μ•„λ‹Œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

λ‚΄κ°€ 첨뢀 ν•œ 슀 λ‹ˆνŽ«μ€ ν˜„μž¬ λΌμ΄λΈŒλŸ¬λ¦¬μ—μžˆλŠ” λͺ¨λ“  μ½”λ“œμž…λ‹ˆλ‹€ ( pdf-to-dataURL ). @jlchereau 의 μ˜ˆμ œκ°€ μΆ©λΆ„ν•˜μ§€ μ•Šμ€ 경우 ν•΄λ‹Ή 슀 λ‹ˆνŽ«μ„ μ‚¬μš©ν•˜λŠ” λΉ λ₯Έ 예제λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€ (NPMμ—μ„œ pdfjs-dist λ₯Ό μš”κ΅¬ν•˜μ§€ μ•ŠλŠ” 것 κ°™μœΌλ―€λ‘œ 정확성에 λŒ€ν•΄ ν™•μ‹ ν•˜μ§€ λͺ»ν•¨)

Webpackμ—λŠ” μž‘μ—…μž λ‘œλ”κ°€ 있고 Browserifyμ—λŠ” webworkerifyκ°€ μžˆμŠ΅λ‹ˆλ‹€. 번 λ“€λŸ¬ μ‹œμŠ€ν…œμ„ κ°μ§€ν•˜μ§€ λͺ»ν•˜κ³  λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜λ©΄μ΄ λ¬Έμ œκ°€ μ™„μ „νžˆ ν•΄κ²°λ©λ‹ˆκΉŒ?

예, # 6785μ—μ„œ μ‹œλ„ν•˜κ³  λ‚˜μ€‘μ— # 6791μ—μ„œ μ‹œλ„ν•œ λ‹€μŒ 되돌 λ ΈμŠ΅λ‹ˆλ‹€. require('worker!... 있으면 browserifyμ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜κ³  require('webworkerify')(...) κ°€ webpackμ—μ„œ λ°œμƒν•©λ‹ˆλ‹€.

λ‚΄κ°€ κ·Έκ²ƒμœΌλ‘œ 마크λ₯Ό μ³€λ‹€κ³  μƒκ°ν•œλ‹€λ©΄, λ‚˜λŠ” 그것에 λŒ€ν•œ PR을 μž‘μ„±ν•˜κ²Œλ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

예, μΌν•˜λŠ” PR이 있으면 정말 μ’‹μŠ΅λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ pdfjs-distλŠ” μ–΄λ–»κ²Œ λ“  webpackκ³Ό ν•¨κ»˜ μž‘λ™ν•˜κ³ , system.js 및 node.js와 ν•¨κ»˜ λΈŒλΌμš°μ € ν™”λ©λ‹ˆλ‹€. 그리고 μš°λ¦¬λŠ” 그것을 μ΄λ ‡κ²Œ μœ μ§€ν•˜λ €κ³  λ…Έλ ₯ν•  κ²ƒμž…λ‹ˆλ‹€. 감사.

λ˜ν•œ μ–΄λ–€ 이유둜 μž‘μ—…μžλ₯Ό μ‚¬μš©ν•  μˆ˜μ—†λŠ” 경우 (λ³΄μ•ˆ λ˜λŠ” λ ˆκ±°μ‹œ λΈŒλΌμš°μ €) μ½”λ“œλ₯Ό 슀크립트 νƒœκ·Έλ‘œλ‘œλ“œν•΄μ•Όν•©λ‹ˆλ‹€. μ›Ή μž‘μ—…μžλ₯Ό 맀개 λ³€μˆ˜λ‘œ λ°›μ•„λ“€μ΄λŠ” PDFWorker에 μ˜€λ²„λ‘œλ“œ 된 μƒμ„±μžλ₯Ό μΆ”κ°€ ν•  κ³„νšμ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이것은 일뢀 webpack / browserify μ‚¬μš© 사둀에 λŒ€ν•œ λŒ€μ²΄ μ†”λ£¨μ…˜μ„ 제곡 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

btw, webpackμ—λŠ” workerSrc와 ν•¨κ»˜ μ‚¬μš©ν•  μˆ˜μžˆλŠ” μ—”νŠΈλ¦¬ λ‘œλ”κ°€ μžˆμŠ΅λ‹ˆλ‹€.

예, # 6785μ—μ„œ μ‹œλ„ν•˜κ³  λ‚˜μ€‘μ— # 6791μ—μ„œ μ‹œλ„ν•œ λ‹€μŒ 되돌 λ ΈμŠ΅λ‹ˆλ‹€. require ( 'worker! ...λŠ” browserifyμ—μ„œ 문제λ₯Ό μΌμœΌν‚€κ³ , require ('webworkerify ') (...)λŠ” webpackμ—μ„œ λ°œμƒν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ __webpack_require__ μ—¬κΈ°μ—μ„œ ν™•μΈν•˜μ§€ μ•Šκ² μŠ΅λ‹ˆκΉŒ?
https://github.com/mozilla/pdf.js/pull/6785/commits/79c2f69c3288494c5ce2809182c896484bf4be5c#diff -5f93a8d6c23cf0a169c6ee7347477ce8R30은 browserifyκ°€ ν•΄λ‹Ή 문을 ꡬ문 λΆ„μ„ν•˜μ§€ λͺ»ν•˜λ„둝 μ°¨λ‹¨ν•©λ‹ˆκΉŒ? ( ensure 뢀뢄이 문제λ₯Ό μΌμœΌν‚€λŠ” 지 ν™•μ‹€ν•˜μ§€ μ•ŠμŒ)

예, μΌν•˜λŠ” PR이 있으면 정말 μ’‹μŠ΅λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ pdfjs-distλŠ” μ–΄λ–»κ²Œ λ“  webpackκ³Ό ν•¨κ»˜ μž‘λ™ν•˜κ³ , system.js 및 node.js와 ν•¨κ»˜ λΈŒλΌμš°μ € ν™”λ©λ‹ˆλ‹€. 그리고 μš°λ¦¬λŠ” 그것을 μ΄λ ‡κ²Œ μœ μ§€ν•˜λ €κ³  λ…Έλ ₯ν•  κ²ƒμž…λ‹ˆλ‹€. 감사.

λ‹€μŒ μ£Ό ν›„λ°˜μ—μ΄ λ‚΄μš©μ— λŒ€ν•΄ μ„€λͺ… ν•  κ²ƒμž…λ‹ˆλ‹€. λ‹€μ–‘ν•œ 번 λ“€λŸ¬ / ν”Œλž«νΌμ„ ν™•μΈν•˜κΈ° μœ„ν•΄ μ‹€ν–‰ν•  ν…ŒμŠ€νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

μ›Ή μž‘μ—…μžλ₯Ό 맀개 λ³€μˆ˜λ‘œ λ°›μ•„λ“€μ΄λŠ” PDFWorker에 μ˜€λ²„λ‘œλ“œ 된 μƒμ„±μžλ₯Ό μΆ”κ°€ ν•  κ³„νšμ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이것은 일뢀 webpack / browserify μ‚¬μš© 사둀에 λŒ€ν•œ λŒ€μ²΄ μ†”λ£¨μ…˜μ„ 제곡 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것이 ν™˜μƒμ μΈ λŒ€μ•ˆμ΄ 될 것이라고 μƒκ°ν•©λ‹ˆλ‹€! 특히 Worker 클래슀λ₯Ό λ°›μ•„ 듀일 수 μžˆλ‹€λ©΄ webpack μ‚¬λžŒλ“€μ€ λ‹€μŒκ³Ό 같은 것을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ : webworkify-webpack 및 webworkifyλ₯Ό μ‚¬μš©ν•˜κ³  loader / Workerλ₯Ό 인수둜 μ „λ‹¬ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ 그것은
μ˜€λ²„λ‘œλ“œ 된 경우 var worker = new WorkerFromArgs('../pdf.worker.entry.js') .
이것은 μž‘μ—…μž λ‘œλ” 둜직의 ꡬ성을 μ‚¬μš©μž μ˜μ—­μœΌλ‘œ μ˜€ν”„λ‘œλ“œν•˜λ―€λ‘œ ν”Œλž«νΌ / 번 λ“€λŸ¬λ₯Ό pdf.js둜 ν™•μΈν•˜λŠ” 잠재적으둜 μ§€μ €λΆ„ν•œ PR이 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ–΄μ¨Œλ“  μ μ ˆν•œ λ‘œλ”λ₯Ό μ„€μΉ˜ν•˜λŠ” 것은 μ‚¬μš©μžμ—κ²Œ μžˆμŠ΅λ‹ˆλ‹€).

κ·ΈλŸ¬λ‚˜ κ²½κ³  : κ°€μ§œ μž‘μ—…μž μ„€μ •. ' μ‹€μ œλ‘œ λ¬Έμ„œλ₯Όλ‘œλ“œ ν•  λ•Œ μ½˜μ†”μ—μ„œ 지침이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

ν›Œλ₯­ν•˜μ§€λ§Œ μœ„μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ μ™„μ „ν•œ 예제 μ—†μ΄λŠ” 문제λ₯Ό ν•΄κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이걸 λ‹«κ³  PR을 κΈ°λ‹€λ¦΄κΉŒμš”?

@jlchereau λŠ” https://github.com/mozilla/pdf.js/issues/7612#issuecomment -245973303 ν•˜λ‚˜μ˜ 예λ₯Ό μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€. μ½˜μ†”μ—μ„œ Warning: Setting up fake worker λ₯Ό λΉ„μŠ·ν•˜κ²Œ λ³Ό 수 있고 ν•„μš”ν•œ 경우 λ‹€λ₯Έ 것을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” workerSrc 이 ν˜„μž¬ κ΅¬ν˜„μ—μ„œ μž‘λ™ν•˜μ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ—¬μ „νžˆ 관련이 μžˆμŠ΅λ‹ˆλ‹€.
μ–΄μ¨Œλ“  PR은이 문제λ₯Ό ν•΄κ²°ν•  κ²ƒμ΄λ―€λ‘œ κ·Έλ•ŒκΉŒμ§€ 좔적을 μœ„ν•΄ 열어두면 μ•ˆλ©λ‹ˆκΉŒ?

PR을 μ‹œμž‘ν•˜κΈ° 전에 μœ„μ˜ μ§ˆλ¬Έμ— λŒ€ν•œ κ·€ν•˜μ˜ ν”Όλ“œλ°±μ„ λ“£κ³  μ‹ΆμŠ΅λ‹ˆλ‹€ ( __webpack_require__ ν™•μΈν•˜λ €κ³  ν•  λ•Œ browserifyκ°€ λΆˆλ§Œμ„ 제기 ν•œ μ΄μœ μ— κ΄€ν•΄μ„œλŠ” PRμ—μ„œλ„ λ˜‘κ°™μ΄ ν•  κ²ƒμž…λ‹ˆλ‹€. λͺ¨λ“  번 λ“€λŸ¬ / ν”Œλž«νΌμ„ λ™μ‹œμ— ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ μ‹€ν–‰)

@ agilgur5 , 당신은 λ§ν•©λ‹ˆλ‹€ :

The snippet I attached is all of the code that would be in the library for now (pdf-to-dataURL).
I could make a quick example that uses that snippet if <strong i="7">@jlchereau</strong>'s example isn't good enough
(it doesn't seem to require pdfjs-dist from NPM, so not sure about the accuracy of it).

https://github.com/kidoju/Kidoju-Help/blob/master/src/main.js λ₯Ό μ°Έμ‘°ν•˜κ³  μ μ ˆν•˜λ‹€κ³  μƒκ°λ˜λ©΄ 주석을 μ œκ±°ν•˜μ‹­μ‹œμ˜€.

require('../web/viewer.css');
require('../web/compatibility.js');
// require('pdfjs-dist/web/compatibility.js');
require('../web/l10n.js');
window.pdfjsDistBuildPdf = require('../build/pdf.js');
// window.pdfjsDistBuildPdf = require('pdfjs-dist/build/pdf.js');
// require('../web/debugger.js');
require('./viewer.js');

λ‚΄κ°€ λ‘˜ λ‹€ μ‹œλ„ν•œ μ΄μœ λŠ” https://github.com/mozilla/pdf.js/blob/master/web/viewer.js 및 https://github.com/mozilla/pdfjs-dist/blob/master/ web / pdf_viewer.js λŠ” λ™μΌν•˜μ§€ μ•ŠμœΌλ©° λ™μΌν•œ μ†ŒμŠ€ / λ²„μ „μ˜ λͺ¨λ“  νŒŒμΌμ„ μœ μ§€ν•˜λŠ” 데 더 관련성이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ–΄μ¨Œλ“ , λ‘˜ λ‹€ λ…Έλ™μžμ— κ΄€ν•œ ν•œ λ™μΌν•œ 행동을 λ³΄μž…λ‹ˆλ‹€.

@yurydelendik 아직 @jlchereau 의 예λ₯Ό ν™•μΈν•˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. λ˜ν•œ pdf-to-dataURL을이 버그λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μž‘μ€ νŒ¨ν‚€μ§€λ‘œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

μ›Ή μž‘μ—…μžλ₯Ό 맀개 λ³€μˆ˜λ‘œ λ°›μ•„λ“€μ΄λŠ” PDFWorker에 μ˜€λ²„λ‘œλ“œ 된 μƒμ„±μžλ₯Ό μΆ”κ°€ ν•  κ³„νšμ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이것은 일뢀 webpack / browserify μ‚¬μš© 사둀에 λŒ€ν•œ λŒ€μ²΄ μ†”λ£¨μ…˜μ„ 제곡 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? 이전에 μ–ΈκΈ‰ν–ˆλ“―μ΄ 이것이 μ œκ°€ μ œμ•ˆν•œ 것보닀 훨씬 더 λ‚˜μ€ μ†”λ£¨μ…˜μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€ (μ œκ°€ μ§ˆλ¬Έμ— λ‹΅ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ–΄μ¨Œλ“  μ‹€μ œλ‘œ PR을 λ§Œλ“€ 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€). λ‹€λ₯Έ 번 λ“€λŸ¬.

λ‚΄ μ›ΉνŒ© ν”„λ‘œμ νŠΈμ—μ„œ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμ§€λ§Œ λ‹€λ₯΄κ²Œ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. webpack의 λ²ˆλ“€λ§ λ˜λŠ” λ‘œλ”μ— μ˜μ‘΄ν•˜λŠ” λŒ€μ‹  CopyWebpackPlugin 을 μ‚¬μš©ν•˜μ—¬ μž‘μ—…μž μ†ŒμŠ€λ₯Ό λ‚΄ λΉŒλ“œ 디렉토리에 λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ λ·°μ–΄μ—μ„œ :

import pdfjsLib from 'pdfjs-dist';

if (process.env.NODE_ENV !== 'production') {
   //in dev, get it from the node_modules directory
   //NOTE: don't use the "entry" file -- the script will fail and the web worker will not be used
   pdfjsLib.PDFJS.workerSrc = `${process.env.APP_ROOT}/node_modules/pdfjs-dist/build/pdf.worker.js`;
} else {
   //in prod, get it from the build directory
   pdfjsLib.PDFJS.workerSrc = `${process.env.APP_ROOT}/build/pdf.worker.js`;
}

webpack.config.js :

const CopyWebpackPlugin = require('copy-webpack-plugin');

return {
   //... rest of config omitted
   plugins: [{
      new CopyWebpackPlugin([{
         from: 'node_modules/pdfjs-dist/build/pdf.worker.js',
         to: 'pdf.worker.js'
      }])
   }]
}

@ agilgur5 , 방금이 λ¬Έμ œκ°€ λ°œμƒν–ˆμœΌλ©° CommonsChunkPlugin을 μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 제 κ²½μš°μ—λŠ” μ›Ή μž‘μ—…μžκ°€λ‘œλ“œ μ€‘μ΄μ—ˆμ§€λ§Œ Uncaught ReferenceError: webpackJsonp is not defined 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€ (μ½”λ“œκ°€ 곡톡 청크둜 가져와 μž‘μ—…μžκ°€ μ‚¬μš©ν•  수 μ—†μ—ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€). 이둜 인해 μž‘μ—…μžκ°€ 일찍 μ’…λ£Œλ˜κ³  κ°€μ§œ κ΅¬ν˜„μœΌλ‘œ λŒ€μ²΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

CommonsChuckPlugin을 μ‚¬μš©ν•˜κ±°λ‚˜ @ctowlerκ°€ μ œμ•ˆν•œ μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이것이 문제λ₯Ό ν•΄κ²°ν•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

λͺ¨λ‘ μ•ˆλ…•,
pdf.jsλ₯Ό Webpackκ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ§Žμ€ λ…Έλ ₯을 κΈ°μšΈμ˜€μŠ΅λ‹ˆλ‹€. 핡심은 μž‘μ—…μžκ°€ λ³„λ„μ˜ νŒŒμΌμ—μžˆλŠ” 것을 μ›ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λˆ„κ΅°κ°€ λ‹€μŒκ³Ό 같은 λ¬Έμ œμ— 직면 ν•œ 경우 :

  • Warning: Setting up fake worker. λ©”μ‹œμ§€,
  • μž‘λ™ν•˜μ§€ μ•ŠλŠ” PDF.js μž‘μ—…μžλ‘œ νœ΄μ§€ν†΅ λ²ˆλ“€μ„ μƒμ„±ν•˜λŠ” Webpack,
  • λ²ˆλ“€μ— μž‘μ—…μžλ₯Ό 두 번 ν¬ν•¨ν•˜λŠ” Webpack,
    당신은 ν™•μ‹€νžˆ λ΄μ•Όν•©λ‹ˆλ‹€.

λ‹¨κ³„μ μœΌλ‘œ

  1. νŒŒμΌμ„ 일반 ν…μŠ€νŠΈλ‘œ κ°€μ Έμ˜¬ 수 μžˆλ„λ‘ package.json에 raw-loader ν–ˆμŠ΅λ‹ˆλ‹€.

    "raw-loader": "latest",
    
  2. pdf.worker.jsκ°€ raw-loader λ₯Ό ν†΅ν•΄λ‘œλ“œλ˜λ„λ‘ Webpack을 κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

      module: {
        rules: [
          {
            test: /pdf\.worker(\.min)?\.js$/,
            use: 'raw-loader',
          },
          {
            test: /\.(js|jsx)$/,
            exclude: [/node_modules/, /pdf\.worker(\.min)?\.js$/],
            use: 'babel-loader',
          },
        ],
      },
    
  3. 이제 κΉŒλ‹€λ‘œμš΄ 뢀뢄이 μžˆμŠ΅λ‹ˆλ‹€. μž‘μ—…μžλ₯Ό PDF.js둜 μ „λ‹¬ν•˜λŠ” μœ μΌν•œ 방법은 workerSrc 섀정을 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λΆˆνŽΈν•˜κ²Œλ„

    pdfjsLib.PDFJS.workerSrc = require('pdfjs-dist/build/pdf.worker');
    

    μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    κ·ΈλŸ¬λ‚˜! μš°λ¦¬λŠ” Blob sμ—μ„œ μ¦‰μ„μ—μ„œ URL을 λ§Œλ“€ 수 있고 λ¬Έμžμ—΄μ—μ„œ μ¦‰μ„μ—μ„œ Blob sλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€!
    κ·Έλž˜μ„œ λ‚˜λ₯Όμœ„ν•œ μž‘μ—… μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    const pdfjsLib = require('pdfjs-dist');
    const pdfjsWorker = require('pdfjs-dist/build/pdf.worker.min');
    
    const pdfjsWorkerBlob = new Blob([pdfjsWorker]);
    const pdfjsWorkerBlobURL = URL.createObjectURL(pdfjsWorkerBlob);
    
    pdfjsLib.PDFJS.workerSrc = pdfjsWorkerBlobURL;
    

    πŸŽ‰ : D

  4. ν•œ 가지 더. PDF.jsλŠ” μž‘μ—…μžλ₯Όλ‘œλ“œν•˜λŠ” 데 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ λ§Žμ€ 폴백을 μ œκ³΅ν•©λ‹ˆλ‹€.
    js require.ensure([], function () { var worker; worker = require('./pdf.worker.js'); callback(worker.WorkerMessageHandler); });
    λ²ˆλ“€ 크기에 관심이 있고 λ‚΄κ°€ν–ˆλ˜ κ²ƒμ²˜λŸΌ pdf.worker.min ν–ˆλ‹€λ©΄ Webpack은 ν˜Όλž€μŠ€λŸ¬μ›Œν•˜κ³  μ–΄μ¨Œλ“  pdf.worker.js ν•©λ‹ˆλ‹€. 더 λ‚˜μœ 것은 PDF.js 의 μΆ•μ†Œ 된 버전쑰차도 μΆ•μ†Œ λ˜μ§€ μ•Šμ€ pdf.worker.js ν•©λ‹ˆλ‹€. 그렇닀면이 μ“°λ ˆκΈ°λ₯Ό μ–΄λ–»κ²Œ 처리 ν•  수 β€‹β€‹μžˆμŠ΅λ‹ˆκΉŒ?
    Webpack에 λ‹€μŒκ³Ό 같이 ν•œ λͺ¨λ“ˆμ„ λ‹€λ₯Έ λͺ¨λ“ˆλ‘œ κ΅μ²΄ν•˜λ„λ‘ μ§€μ‹œν•©λ‹ˆλ‹€.
    js new webpack.NormalModuleReplacementPlugin( /pdf\.worker(\.min)?\.js$/, path.join(__dirname, 'node_modules', 'pdfjs-dist', 'build', 'pdf.worker.min.js'), ),
    μ΄λŠ” /pdf\.worker(\.min)?\.js$/ -보닀 ꡬ체적으둜 pdf.worker.js 및 pdf.worker.min.js 와 μΌμΉ˜ν•˜λŠ” λͺ¨λ“  파일이 μΆ•μ†Œ 된 λ²„μ „μœΌλ‘œ λŒ€μ²΄λ˜λ„λ‘ν•©λ‹ˆλ‹€.

휴. 이것이 λˆ„κ΅¬μ—κ²Œλ‚˜ λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€!

@wojtekmaj μš°λ¦¬λŠ” webpack μ‚¬μš©μžλ₯Όμœ„ν•œ 제둜 ꡬ성을 μœ„ν•΄ pdfjs-dist / webpack을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. https://github.com/yurydelendik/pdfjs-react μ—μ„œ μ‚¬μš©λ²•μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

@yurydelendik κ°μ‚¬ν•©λ‹ˆλ‹€, 예, μ €λŠ” 이것을 μ•Œκ³ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ™„μ „νžˆ μž‘λ™ν•˜λ„λ‘ κ΄€λ¦¬ν•˜μ§€λŠ” λͺ»ν–ˆμ§€λ§Œ ν•˜λ‚˜μ˜ 컴파일 된 파일둜 λλ‚˜λŠ” 것이 ν•„μš”ν–ˆκΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ λ¬Έμ œμ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€.

κ·Έ μ΄μœ λŠ” λ‚΄κ°€ react-pdfλ₯Ό μž‘μ—…

webpack, browserify 및 기타에 λŒ€ν•œ 지침을 μž‘μ„±ν•˜λŠ” 것은 말할 것도없고 pdf.worker.jsλ₯Ό 슀슀둜 νŒŒμ•…ν•˜λΌκ³  말할 μˆ˜μžˆλŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€.

λ‚΄ μ‚¬μš©μžκ°€ μ‰½κ²Œ μ„€μΉ˜ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. package.json + import, boom, λ‹€λ₯Έ 것은 μ—†μŠ΅λ‹ˆλ‹€.

@wojtekmaj λ‚˜λŠ” λ‹Ήμ‹ μ˜ μš”κ΅¬ 사항을 μ •λ§λ‘œ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. pdfjs-distλ₯Ό μΆ”κ°€ν•˜κ³  pdfjs-dist / webpack을 μ‚¬μš©ν•˜λŠ” 것이 λ°˜μ‘ ꡬ성 μš”μ†Œ ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ–΄λ–»κ²Œ λΆˆκ°€λŠ₯할지 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 그리고 μ‚¬μš©μžλŠ” μ „μž (ꡬ성 μš”μ†Œ ν”„λ‘œμ νŠΈ) 만 ν¬ν•¨ν•©λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ 컴파일 된 파일둜 λλ‚˜λŠ” 것은 λ‚˜μ—κ²Œ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ 컴파일 된 νŒŒμΌμ€ 당신이 μ›ν•˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€ : a) νŽ˜μ΄μ§€ μ‹œμž‘, b) 캐싱 및 전솑 크기, c) μž‘μ—…μžμ˜ κ°€λŠ₯ν•œ 문제-ν•˜μ§€λ§Œ λ‹Ήμ‹ μ˜ μ„ νƒμž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”.
μ£„μ†‘ν•©λ‹ˆλ‹€. 이전 κ²Œμ‹œλ¬Όμ„ 잘λͺ» μ½μ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 당신이 μ™„μ „νžˆ λ‹€λ₯Έ / examples / webpack에 λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. pdfjs / webpack을 μ‚¬μš©ν•˜λ„λ‘ ν™•μ‹€νžˆ μ—…λ°μ΄νŠΈν•΄μ•Όν•©λ‹ˆλ‹€! κ°μ‚¬ν•©λ‹ˆλ‹€!

ν•œ 가지 더 ... pdfjs-dist / webpack을 μ‚¬μš©ν•œλ‹€κ³ ν•΄μ„œ pdf.js μžμ²΄κ°€ pdf.worker.jsλ₯Ό μš”κ΅¬ν•˜λŠ” 것을 막을 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‹€μŒμœΌλ‘œ λλ‚©λ‹ˆλ‹€.

  • entry.bundle.js
  • abcdef1234567890.worker.bundle.js

pdf.workerλ₯Ό ν•­λͺ© 쀑 ν•˜λ‚˜λ‘œ μ •μ˜ν•˜λ©΄ 더 λ‚˜ 빠지고 λ‹€μŒ κ³Ό 같이 λλ‚©λ‹ˆλ‹€.

  • entry.bundle.js
  • abcdef1234567890.worker.bundle.js
  • pdf.worker.bundle.js

이 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•©λ‹ˆκΉŒ?

μœ„μ˜ react-pdf 예제둜 yarn build λ₯Ό μ‹€ν–‰ ν•œ ν›„ λ‹€μŒ νŒŒμΌμ„ μ–»μ—ˆμŠ΅λ‹ˆλ‹€.

...
File sizes after gzip:

  198.42 KB  build/7b14afe24b211632ecc8.worker.js
  197.76 KB  build/static/js/0.974e8de4.chunk.js
  130.14 KB  build/static/js/main.5a79c9e3.js
  4.19 KB    build/static/css/main.d852b162.css
...

μ •μƒμž…λ‹ˆλ‹€. 앱은 'build / static / js / main.5a79c9e3.js'ν•­λͺ© (pdf.js + react), 'build / static / js / 0.974e8de4.chunk.js'λŠ” pdf.worker.js λŒ€μ²΄ μ½”λ“œμž…λ‹ˆλ‹€. μž‘μ—…μžκ°€ λΉ„ν™œμ„±ν™”λ˜κ³  'build / 7b14afe24b211632ecc8.worker.js'μž‘μ—…μž μ½”λ“œκ°€λ‘œλ“œλ©λ‹ˆλ‹€. λ‚΄κ°€ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

@wojtekmaj μ‚¬μš©μžμ˜ ν…ŒμŠ€νŠΈ μ•±μœΌλ‘œ μ™„μ „ν•œ λ°˜μ‘ ꡬ성 μš”μ†Œ (예?)λ₯Ό μ€€λΉ„ν•˜κ³  STRκ³Ό ν•¨κ»˜ λ³„λ„μ˜ λ¬Έμ œλ‘œλ³΄κ³ ν•˜μ‹­μ‹œμ˜€-νŠΉμ • λ¬Έμ œκ°€μ΄ λ¬Έμ œμ™€ 관련이 μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

PDFJS.workerSrc = 'scripts.bundle.js';
PDFJS.getDocument (getPdfName) .then ((pdfFile : any) => {
this.pdfFile = pdfFile;
this.renderPdfIntoPages (pdfFile, getPdfPages, this.pdfReady);
});

λ‹€μŒκ³Ό 같은 κ°€μΉ˜λ₯Ό ν• λ‹Ήν•˜κ³  κ·Έ μž‘ν’ˆ ...

감사...

@yurydelendik μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜λŠ” λ™μ•ˆ λˆ„κ΅°κ°€ window μ •μ˜λ˜μ§€ μ•Šμ€ 였λ₯˜λ₯Ό λ°›μœΌλ©΄

globalObject: 'true'

μ›ΉνŒ© κ΅¬μ„±μ˜ output μ„Έκ·Έλ¨ΌνŠΈμ—μ„œ.
webpack에 λ²„κ·Έκ°€μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. web workers μž‘μ—… ν•  λ•Œ webpack이 window 객체λ₯Ό μ—‰λ§μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€. λ”°λΌμ„œ μœ„μ˜ 해킹은 κ·Έ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

@wojtekmaj :
μ†”λ£¨μ…˜μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! Chrome, FF, Edge, Opera, Safariμ—μ„œ 잘 μž‘λ™ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ babel-loader μ—μ„œ μ œμ™Έν•˜λ©΄ ES5둜 λ‹€μ‹œ λ³€ν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ IE11 λ“±μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. μ•„λ‹ˆλ©΄ 거기에 λ­”κ°€ λΉ μ‘Œλ‚˜μš”?

λ‚΄κ°€ μ—¬κΈ°μ„œ λ­”κ°€ 잘λͺ»ν•˜κ³  μžˆμ„μ§€λ„ λͺ¨λ₯΄λ‹ˆ 였 λ˜‘λ˜‘ν•œ μ‚¬λžŒλ“€μ„ @wojtekmaj 의 μƒκ°μ˜ κΈ°μ°¨λ₯Ό 타고 훨씬 더 κ°„λ‹¨ν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

webpack.configμ—μ„œ :

...
{
    test: /pdf\.worker(\.min)?\.js$/,
    loader: 'file-loader'
},

그리고 λ‚΄ μ½”λ“œμ—μ„œ :

import PDFJS from 'pdfjs-dist';
import PDFJSWorker from 'pdfjs-dist/build/pdf.worker.min';

PDFJS.GlobalWorkerOptions.workerSrc = PDFJSWorker;
...

ꡬ성 :

  • pdfjs-dist : 2.1.266
  • μ›ΉνŒ© : 4.35.0

이봐, λ‚˜λŠ” webpackκ³Ό pdfjsλ₯Ό μ‚¬μš©ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.

λ‚΄κ°€ μƒκ°ν•˜λŠ” 것 (λ‚˜λŠ” 아무것도 ν™•μ‹  ν• λ§ŒνΌ pdfjsλ₯Ό λͺ¨λ₯Έλ‹€)

webpack 물건으둜 인해 μž‘μ—…μžλ₯Όλ‘œλ“œν•˜λ €κ³  μ‹œλ„ν•˜λŠ” λ™μ•ˆμ΄ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

image

λ‚˜λŠ” 그것을 κ³ μΉ  μ–΄λ–€ 것도 찾을 수 μ—†μ—ˆλ‹€.
vendor_pdfjsWorkerκ°€ μ‘΄μž¬ν–ˆμ§€λ§Œμ΄ κ²½λ‘œμ— μ—†μ—ˆμŠ΅λ‹ˆλ‹€. 제 κ²½μš°μ—λŠ” μž‘μ—…μžκ°€ pdf.js와 같은 μœ„μΉ˜μ— 있기λ₯Ό μ›ν•©λ‹ˆλ‹€.
μ²˜μŒμ—λŠ” wojtekmajκ°€ μ„€λͺ…ν–ˆλ“―이 workerSrcλ₯Ό λ³€κ²½ν•˜λ €κ³ ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚΄ workerSrcλŠ” μž‘μ—…μžλ₯Ό μ–»κΈ° μœ„ν•΄ pdfjsμ—μ„œ μ‚¬μš©λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. Webpack ꡬ문 뢄석 λ³€κ²½ pdfjs (l.9915) :

  if (typeof window === 'undefined') {
    isWorkerDisabled = true;

    if (typeof require.ensure === 'undefined') {
      require.ensure = require('node-ensure');
    }

    useRequireEnsure = true;
  } else if (typeof require !== 'undefined' && typeof require.ensure === 'function') {
    useRequireEnsure = true;
  }

으둜

  if (typeof window === 'undefined') {
    isWorkerDisabled = true;

    if (typeof require.ensure === 'undefined') {
      require.ensure = require('node-ensure');
    }

    useRequireEnsure = true;
  } else if (true) {
    useRequireEnsure = true;
  }

λ”°λΌμ„œ fakeWorkerFilesLoaderκ°€ μ„€μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€ (l.9932).
fakeWorkerFilesLoader = useRequireEnsure ? function () {

그런 λ‹€μŒ λ‚΄ workerSrcκ°€ fakeWorkerFilesLoaderκ°€ μ •μ˜λ˜μ–΄ 있기 λ•Œλ¬Έμ— 얻을 수 μ—†μŠ΅λ‹ˆλ‹€.

    var loader = fakeWorkerFilesLoader || function () {
      return (0, _dom_utils.loadScript)(_getWorkerSrc()).then(function () {
        return window.pdfjsWorker.WorkerMessageHandler;
      });
    };

μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€

λ‚΄ μ›ΉνŒ© κ΅¬μ„±μ—μ„œ λ‹€μŒμ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

    module: {
        noParse: (filename) => {
            return /\\node_modules\\pdfjs-dist\\build\\pdf.js/.test(filename);
        },
        rules: [
        .......................
        ]
    },

그리고이 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
image

λ‚΄ 슀크립트 "ecm_viewer.worker.js"κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.
λ‚΄ webpack ꡬ성에 ν•­λͺ©μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

entry: {
    'ecm_viewer': getFileList(),
    'ecm_viewer.worker': './node_modules/pdfjs-dist/build/pdf.worker.entry',
}

그리고 noParse ν•¨μˆ˜λ₯Ό μ œκ±°ν•˜λ”λΌλ„ μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€. 이 noParse webpack μ˜΅μ…˜μ„ μΆ”κ°€ ν•  λ•ŒκΉŒμ§€ μ‹€μ œ 였λ₯˜λ₯Ό 디버깅 ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

내가이 글을 쓰기에 μ μ ˆν•œ μœ„μΉ˜μ— μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ‚΄ κ²Œμ‹œλ¬Όμ„ stackoverflow λ˜λŠ” λ‹€λ₯Έ 곳으둜 이동할 수 μžˆμŠ΅λ‹ˆλ‹€. μ–Έμ  κ°€ λˆ„κ΅°κ°€μ—κ²Œ 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄ μ›ΉνŒ© ν”„λ‘œμ νŠΈμ—μ„œ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμ§€λ§Œ λ‹€λ₯΄κ²Œ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. webpack의 λ²ˆλ“€λ§ λ˜λŠ” λ‘œλ”μ— μ˜μ‘΄ν•˜λŠ” λŒ€μ‹  CopyWebpackPlugin 을 μ‚¬μš©ν•˜μ—¬ μž‘μ—…μž μ†ŒμŠ€λ₯Ό λ‚΄ λΉŒλ“œ 디렉토리에 λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ λ·°μ–΄μ—μ„œ :

import pdfjsLib from 'pdfjs-dist';

if (process.env.NODE_ENV !== 'production') {
   //in dev, get it from the node_modules directory
   //NOTE: don't use the "entry" file -- the script will fail and the web worker will not be used
   pdfjsLib.PDFJS.workerSrc = `${process.env.APP_ROOT}/node_modules/pdfjs-dist/build/pdf.worker.js`;
} else {
   //in prod, get it from the build directory
   pdfjsLib.PDFJS.workerSrc = `${process.env.APP_ROOT}/build/pdf.worker.js`;
}

webpack.config.js :

const CopyWebpackPlugin = require('copy-webpack-plugin');

return {
   //... rest of config omitted
   plugins: [{
      new CopyWebpackPlugin([{
         from: 'node_modules/pdfjs-dist/build/pdf.worker.js',
         to: 'pdf.worker.js'
      }])
   }]
}

이것은 우리 νŒ€μ΄ WEEKS λ™μ•ˆ 사λƒ₯ν•˜λ˜ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. @ctowler κ°μ‚¬ν•©λ‹ˆλ‹€ : D <3

@yurydelendik μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜λŠ” λ™μ•ˆ λˆ„κ΅°κ°€ window μ •μ˜λ˜μ§€ μ•Šμ€ 였λ₯˜λ₯Ό λ°›μœΌλ©΄

globalObject: 'true'

μ›ΉνŒ© κ΅¬μ„±μ˜ output μ„Έκ·Έλ¨ΌνŠΈμ—μ„œ.
webpack에 λ²„κ·Έκ°€μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. web workers μž‘μ—… ν•  λ•Œ webpack이 window 객체λ₯Ό μ—‰λ§μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€. λ”°λΌμ„œ μœ„μ˜ 해킹은 κ·Έ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

@vivektiwary 같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 계속 ReferenceError: Can't find variable: window

Webpack.config νŒŒμΌμ— globalObject:'true' 섀정을 λ„£μ—ˆμ§€λ§Œ 이제 앱이 μ „ν˜€λ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž‘λ™ ν–ˆλ‚˜μš”?

@yurydelendik μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜λŠ” λ™μ•ˆ λˆ„κ΅°κ°€ window μ •μ˜λ˜μ§€ μ•Šμ€ 였λ₯˜λ₯Ό λ°›μœΌλ©΄

globalObject: 'true'

μ›ΉνŒ© κ΅¬μ„±μ˜ output μ„Έκ·Έλ¨ΌνŠΈμ—μ„œ.
webpack에 λ²„κ·Έκ°€μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. web workers μž‘μ—… ν•  λ•Œ webpack이 window 객체λ₯Ό μ—‰λ§μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€. λ”°λΌμ„œ μœ„μ˜ 해킹은 κ·Έ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

@vivektiwary 같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 계속 ReferenceError: Can't find variable: window

Webpack.config νŒŒμΌμ— globalObject:'true' 섀정을 λ„£μ—ˆμ§€λ§Œ 이제 앱이 μ „ν˜€λ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž‘λ™ ν–ˆλ‚˜μš”?

예 @taihuuho , κ΅¬μ„±μ˜ 좜λ ₯ obj에 λ„£μ—ˆμŠ΅λ‹ˆκΉŒ?
btw 당신이 μ–»λŠ” 였λ₯˜λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@vivektiwary λ‚˜λŠ”μ΄ 였λ₯˜λ₯Ό μ–»κ³ μžˆλ‹€ ReferenceError: Can't find variable: window μ‚¬μš©ν•  λ•Œ pdfjs-dist/webpack

λ‚΄κ°€ μ—¬κΈ°μ„œ λ­”κ°€ 잘λͺ»ν•˜κ³  μžˆμ„μ§€λ„ λͺ¨λ₯΄λ‹ˆ 였 λ˜‘λ˜‘ν•œ μ‚¬λžŒλ“€μ„ @wojtekmaj 의 μƒκ°μ˜ κΈ°μ°¨λ₯Ό 타고 훨씬 더 κ°„λ‹¨ν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

webpack.configμ—μ„œ :

...
{
    test: /pdf\.worker(\.min)?\.js$/,
    loader: 'file-loader'
},

그리고 λ‚΄ μ½”λ“œμ—μ„œ :

import PDFJS from 'pdfjs-dist';
import PDFJSWorker from 'pdfjs-dist/build/pdf.worker.min';

PDFJS.GlobalWorkerOptions.workerSrc = PDFJSWorker;
...

λ‚˜λŠ” @varunarora 의 μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜κ²Œ https://github.com/mozilla/pdf.js/tree/master/examples/webpack에 λŒ€ν•œμ΄ λ¬Έμ„œ νŽ˜μ΄μ§€λŠ” λͺ¨λ“  μ‚¬λžŒμ—κ²Œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

webpack ꡬ성을 νŽΈμ§‘ ν•  ν•„μš”μ—†μ΄ :

PDFJS.GlobalWorkerOptions.workerSrc = require('!!file-loader!pdfjs-dist/build/pdf.worker.min.js').default;

λ˜λŠ”

import PDFJS from 'pdfjs-dist';
import PDFJSWorker from '!!file-loader!pdfjs-dist/build/pdf.worker.min.js';

PDFJS.GlobalWorkerOptions.workerSrc = PDFJSWorker;

λ¬Όλ‘  file-loader μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

파일 λ‘œλ”κ°€ μž‘μ—…μžλ₯Ό 디렉토리에 μ˜¬λ¦¬λ„λ‘ν•˜λŠ” electron-forgeλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμœΌλ―€λ‘œ μ‚¬μš©ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€.

PDFJS.GlobalWorkerOptions.workerSrc = '../' + require('!!file-loader!pdfjs-dist/build/pdf.worker.min.js').default;

https://webpack.js.org/concepts/loaders/#inline

파일 λ‘œλ”λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€λ₯Έ librairiesκ°€ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— λ‚΄ μ•±μ˜ λ‚˜λ¨Έμ§€ 뢀뢄에 λΆ€μž‘μš©μ΄μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚΄κ°€ 찾은 λ‹€λ₯Έ 방법은 cdnμ—μ„œ pdf.worker.js νŒŒμΌμ„ μ–»λŠ” κ²ƒμž…λ‹ˆλ‹€.

cf μ—¬κΈ° : https://github.com/wojtekmaj/react-pdf/issues/321#issuecomment -451291757

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
5 / 5 - 1 λ“±κΈ‰