systemjs์ ๋ํ ์ง์์ ์ถ๊ฐํ์ญ์์ค.
์์ ๊ฐ ์ ๊ณต๋์ง ์์์ผ๋ฏ๋ก ๋ ๋ง์ ์ ๋ณด๋ฅผ ์์ฒญํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Browserify๋ ํ์ฌ pdfjs-dist์ ํจ๊ป ์๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค (์ผ๋ถ ๋ชจ๋ ์์ธ ํฌํจ).
๋ค์์ systemjs๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ ๋๋ค.
npm install jspm
jspm init # use defaults
jspm install pdfjs-dist
index.html
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
System.import('src/app.js');
</script>
</body>
</html>
src / app.js
# ES6 syntax
import pdfjs from 'pdfjs-dist';
# expected pdfjs to be a window.PDFJS object
์๋ฅผ ๋ค์ด ๊ฐ์ฌํฉ๋๋ค
์ด์ ๋ฒ์ ์์๋ jspm shim์ ์ฌ์ฉํ์ฌ pdfjs๋ฅผ ์ฌ์ฉํ ์์์์ต๋๋ค.
https://github.com/jspm/registry/wiki/Configuring-Packages-for-jspm
๊ทธ๋ฌ๋ node-ensure๋ฅผ ํฌํจ์ํจ ํ์๋ ํ ์ ์์ต๋๋ค (node-ensure๋ system.js์ ํธํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค).
์ค์ ๋ก ์ด๊ฒ์ Systemjs ๋ก๋๊ฐ ์๋ jspm ํจํค์ง ํ๋ก๊ทธ๋จ์ ๋ํ ์์ฒญ์
๋๋ค.
์ฆ, jspm shim์ด ํ์ํ ๊ฒฝ์ฐ ๊ด์ฐฎ์ง ๋ง node-ensure์ ๊ฐ์ ํธํ๋์ง ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ๊ฐํ์ง ๋ง์ญ์์ค.
๋ฐ๋ ์
config.js์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
"npm:[email protected]": {
"process": "github:jspm/[email protected]",
"node-ensure": "empty",
"entry?name=[hash]-worker.js": "empty"
},
(๋น์ด์๋ ๊ฒ์ ๋ด์ฉ์ด์๋ empty.js ํ์ผ์ ๋๋ค)
๋น์ทํ ํดํน์ด Browserify์ ํ์ํฉ๋๋ค.
์ด์ ๋ฌธ์ : pdf.worker.js๊ฐ ๋ ๋ฒ๋ก๋๋์์ต๋๋ค. ๋ฌธ์ ๋ webpack์ request.ensure ()์ ์ํด ํด๊ฒฐ๋์์ต๋๋ค. './pdf.worker.js'๋ ์ค์ ๋ก ํ์ํ ๋๊น์ง๋ก๋๋์ง ์์์ผํฉ๋๋ค.
"PDFJS.disableWorker = true"๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ํด๊ฒฐํด? ๊ทธ๋ ์ง ์๋์?
System.import('./pdf.worker')
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ๋์ http ์์ฒญ ๋ง ๋ฐํํฉ๋๋ค.
๋๋ System.import('pdfjs-dist/build/pdf.worker')
node-ensure
์ด ์ฌ์ฉ ๋ ํน๋ณํ ์ด์ ๊ฐ ์์ต๋๊น? ์์คํ
๋ก๋๊ฐ Webpack์์ ์ ์๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
"PDFJS.disableWorker = true;" PDF ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฅธ ์ค๋ ๋๋ก ์ฎ๊ธฐ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ต์ ์ด ์๋๋๋ค. ๋์๊ด ์ฌ์ฉ์์๊ฒ ํํธ์๋ ์๋ฃจ์ ์ ์ ์ํ๊ณ ์ถ์ง ์์ต๋๊น?
๊ธ์, ๋๋ ์ ํ ํด๊ฒฐ์ฑ
์ด์๋ ๊ฒ๋ณด๋ค ํํธ์๋ ํด๊ฒฐ์ฑ
์ ์ ํธ ํ ๊ฒ์
๋๋ค. ๋ด ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ 1 ์ด ํ์ด์ง ๊ณ ์ ๋ ๊ด์ฐฎ์ต๋๋ค.
๋ ๋์ ํด๊ฒฐ์ฑ
์ ์ฐพ์ผ๋ฉด ๊ธฐ์ฉ๋๋ค.
node-ensure๊ฐ ์ฌ์ฉ ๋ ํน๋ณํ ์ด์ ๊ฐ ์์ต๋๊น?
examples / webpack /์ด ์์ฑํ๋ ๊ฒ์์ฃผ์ ๊น๊ฒ ์ดํด๋ณด๋ฉด :
pdf.js yury$ ls -la build/webpack/
total 2384
drwxr-xr-x 5 yury staff 170 Dec 22 15:20 .
drwxr-xr-x 34 yury staff 1156 Dec 22 10:08 ..
-rw-r--r-- 1 yury staff 546125 Dec 21 16:35 1.bundle.js
-rw-r--r-- 1 yury staff 546463 Dec 21 16:35 9d074593b165291f150e-worker.js
-rw-r--r-- 1 yury staff 122796 Dec 21 16:35 bundle.js
"bundle.js"๋๋ก๋๋๋ ๊ธฐ๋ณธ ํ์ผ์ ๋๋ค (์ฆ, 122796 ๋ฐ์ดํธ ํ์ UI๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ด๊ธฐํํ๋ฏ๋ก ํ์ด์ง ์์ ์๋๊ฐ ๋นจ๋ผ์ง). '9d074593b165291f150e-worker.js'๋ ๋ก์ง์ ์คํํ๊ณ ๋๋ฆฐ ๊ธฐ๊ธฐ์์ UI๋ฅผ ์ ๊ทธ์ง ์๋ ์์ ์์ ๋๋ค. "1.bundle.js"๋ถ๋ถ์ disableWorker๊ฐ ํธ๋ฆฌ๊ฑฐ ๋ ๊ฒฝ์ฐ ๋ฐ IE9์ ๊ฐ์ ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ์ ๋ํด์๋ง๋ก๋๋ฉ๋๋ค.
๋ ๋์ ํด๊ฒฐ์ฑ ์ ์ฐพ์ผ๋ฉด ๊ธฐ์ฉ๋๋ค.
๋๋ systemjs๊ฐ ๋ชจ๋ ์๊ตฌ ์ฌํญ์ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ์๋๋ก ์ฝ๊ฐ์ ๊ฐ๋๋ฅผ ๊ฐ์ง ๊ฒ์ผ๋ก ๊ธฐ๋ํ๊ณ ์์ต๋๋ค ( "./pdf.worker.js"๋ฅผ "empty"๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์์ต๋๋ค).
@Vanuan systemjs ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ฌ ๋ ๋์ ์ ์ด ์๋์ง ํ์ธํ ์ ์์ต๋๊น? ๊ฐ์ฌ.
systemjs https://github.com/systemjs/systemjs/issues/983์ ๋ง์ง๋ง ๋ฌธ์ ์ฒ๋ผ ๋ค๋ฆฌ๋์?
๊ธ์, ๋๋ ์ ํ ํด๊ฒฐ์ฑ ์ด์๋ ๊ฒ๋ณด๋ค ํํธ์๋ ํด๊ฒฐ์ฑ ์ ์ ํธ ํ ๊ฒ์ ๋๋ค. ๋ด ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ 1 ์ด ํ์ด์ง ๊ณ ์ ๋ ๊ด์ฐฎ์ต๋๋ค.
@Vanuan , pdf.combined.js ํ์ผ ์ฌ์ฉ์ ๋ณ๊ฒฝ๋ ์ฌํญ์ด ์์ต๋๋ค (ํฌ๋งํฉ๋๋ค)-์ด๋ฌํ ๊ฒฝ์ฐ์ ๋ํด ์ ์งํด์ผํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. # 6729์์ ๋ฌธ์ ๋ก ์ค๋ช ํ๋๋ก ์ฌ์ฉํด์ผํฉ๋๋ค. ๊ทํ์ ์ค๋ช ์์ systemjs๋ฅผ ์ฌ์ฉํ์ฌ PDFJS๋ฅผ๋ก๋ ํ ๊ณํ์ด ๋ถ๋ช ํ์ง ์์์ต๋๋ค.
pdf.combined.js ํ์ผ ์ฌ์ฉ์ ๋ณ๊ฒฝ๋ ์ฌํญ์ด ์์ต๋๋ค.
์, ์ข์์!
์ด์จ๋ ์์
์์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ๋ถ๋ช
ํ ๋ญ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.
์ด์ ์๋ ์์
์์ ๋ํ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์ ์์์ง๋ง ๊ทธ ์์ Uncaught ReferenceError: require is not defined
๋ฅผ ๋ฃ์ ์์์์ต๋๋ค.
PDFJS.workerSrc = 'jspm_packages/npm/[email protected]/build/pdf.worker.js';
์ด์ ํ์ผ์๋ก๋ํ๋ ์ค์ ๋ฉ์ถ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋๋ก๋ ์ฝ๋ฐฑ์ด ์๋ฃ๋์ง ์๋ ๊ฒ์ฒ๋ผ.
์์ฒญ ๋ ๋ง์ง๋ง ๋ชจ๋์ process
์
๋๋ค.
์๋ง๋ Systemjs๋ ๋ค์ ๊ตฌ์ฑ์ ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๋ค.
(function(process) {
if (typeof PDFJS === 'undefined') {
(typeof window !== 'undefined' ? window : this).PDFJS = {};
}
})(require('process'));
์ด์จ๋ ์์ ์์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ๋ถ๋ช ํ ๋ญ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.
์ด์ ์๋ ์์ ์์ ๋ํ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์ ์์์ง๋ง
pdf.combined.js๋ pdf.worker.js๋ฅผ ์์ ํ ํฌํจ / ํฌํจํ๋ฉฐ workerSrc๋ฅผ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
pdf.combined.js https://github.com/mozilla/pdfjs-dist/commit/a7cd5f77b00bac19c0f6ee4c2cfd5bbf0fe45d8f#diff -eccf5b94e31b0939738de07167e02af6์ ๋ณ๊ฒฝ ์ฌํญ
๋ค, jspm๊ณผ ํจ๊ป ์์ ์๋ฅผ ์ฌ์ฉํ๋ ์ต์ ์ ํ๊ฐํ๊ณ ์์ต๋๋ค.
์ด์ ๋ฌธ์ : pdf.worker.js๊ฐ ๋ ๋ฒ๋ก๋๋์์ต๋๋ค. ๋ฌธ์ ๋ webpack์ request.ensure ()์ ์ํด ํด๊ฒฐ๋์์ต๋๋ค.
์ด์ ์ฃผ ์ค๋ ๋์์๋ก๋๋๊ณ importScripts ()๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๊น?
๋ด src / app.js๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import pdfjs from 'pdfjs-dist';
console.log(PDFJS);
๋ฐ๋ผ์ ์์ง getDocument๋ฅผ ์ฌ์ฉํ์ง ์์ง๋ง ๋คํธ์ํฌ ๋ชจ๋ํฐ์๋ pdf.worker.js์ ๋ํ ๋ ๊ฐ์ ํญ๋ชฉ์ด ํ์๋ฉ๋๋ค.
์ด์ ํด์. ํญ๋ชฉ์ด ํ๋๋ง ํ์๋ฉ๋๋ค.
์ด์ ํด์. ํญ๋ชฉ์ด ํ๋๋ง ํ์๋ฉ๋๋ค.
AFAIK๊ฐ ์๋๋๋ค. :)
Firefox์ Chrome์์๋ ๋์ผํฉ๋๋ค.
์. ๊ทธ๋์ Systemjs๋ ๋ชจ๋ require
๋ฉ์ฒญํ๊ฒ ํ์ฑํ๊ณ ๋ก๋ํ๋ ค๊ณ ํฉ๋๋ค ...
์กฐ๊ฑด๋ถ ์๊ตฌ๋ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋๋๋ค.
์ด๊ฒ์ด ๋ ธ๋ ๋ณด์ฅ๋ก๋๋ฅผ ์๋ํ๋ ์ด์ ์ ๋๋ค.
์๋
ํ์ธ์.
์ด๋ป๊ฒ ๋์ ์นํฉ์ด ํ์ํฉ๋๊น? Webpack์ ์ฌ์ ํ โโimportScripts๋ฅผ ์ฌ์ฉํ์ฌ ์์
์๋ฅผ๋ก๋ํฉ๋๋ค.
์กฐ๊ฑด๋ถ ์๊ตฌ๋ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋๋๋ค.
๋์ํ์ง ์์ต๋๋ค. https://github.com/systemjs/systemjs/issues/983 ๋ฐ https://github.com/webpack/docs/wiki/code-splitting ์ด ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค.
Webpack์ ์ฌ์ ํ โโimportScripts๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์๋ฅผ๋ก๋ํฉ๋๋ค.
๊ทธ๋ ์ต๋๋ค. new Worker(..)
. ๊ทธ๋ฌ๋ ์์
์๊ฐ ๋นํ์ฑํ ๋ ๊ฒฝ์ฐ pdf.worker.js๋ฅผ ๋ชจ๋๋ก๋ก๋ํ๋ ์ต์
๋ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ # 6775์ ์ํด ํด๊ฒฐ ๋ ๊ฒ์ ๋๋ค. systemjs๋ ๋ชจ๋ ์ ํ์ ์๋ ๊ฐ์งํฉ๋๋ค. ์ด์ commonjs์ด๊ณ UMD๋ฅผ ์ฌ์ฉํ๋ฉด AMD๊ฐ๋๋ฏ๋ก require ()๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ์์ต๋๋ค.
https://github.com/yurydelendik/pdf.js/tree/pdfjsumd ์์ PS wip
์์ฐ, ์ ๋๋ค์. ํฉ๋ณํ๊ณ ํ์ด ์ฃผ ์๋ง์ ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค.
# 6825์ ์ํด ์์ ๋๋๋ก ๋ซํ๋๋ค. ๋จ์์๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์ ๋ฌธ์ ๋ฅผ์ฌ์ญ์์ค.
jspm์ ์ฌ์ฉํ ๋ ๋ชจ๋ ํ์์ ์ฌ์ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. jspm install npm:pdfjs-dist -o "{format: 'amd'}"