Пожалуйста, добавьте поддержку 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-sure мы не можем (node-sure несовместим с system.js).
Собственно, это запрос на упаковщик jspm, а не на загрузчик Systemjs.
Т.е. было бы хорошо, если бы для этого потребовалась прокладка jspm, но не добавляйте несовместимые изменения, такие как node -secure.
@Vanuan
Наличие в 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 загружается дважды, проблема была решена с помощью request.ensure () в webpack. Необходимо запретить загрузку файла ./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 -secure?
Если вы внимательно посмотрите, что дает 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 байт - более быстрый запуск страницы). «9d074593b165291f150e-worker.js» - рабочий, который запускает логику и не блокирует пользовательский интерфейс на медленных устройствах. Часть «1.bundle.js» загружается только при запуске disableWorker и для устаревших браузеров, таких как IE9.
Буду рад, если вы найдете решение получше.
Я ожидаю, что у systemjs может быть какая-то защита, чтобы не анализировать все, что требуется (замена "./pdf.worker.js" на "empty" для меня не сработала).
@Vanuan Можете ли вы
Похоже, самая последняя проблема на systemjs https://github.com/systemjs/systemjs/issues/983 ?
Что ж, я бы предпочел паршивое решение, чем полное отсутствие решения. Для моего случая достаточно даже остановки страницы на 1 секунду.
@Vanuan , ничего не изменилось в использовании файла pdf.combined.js (надеюсь) - похоже, нам нужно сохранить его для таких случаев. Вам нужно использовать это, как вы описали как проблему в # 6729. Из вашего описания было неясно, что вы планируете использовать systemjs для загрузки PDFJS.
ничего не изменилось при использовании файла pdf.combined.js
Ах, отлично!
Во всяком случае, что-то определенно изменилось в отношении использования его с worker.
Раньше мы могли использовать полный путь к worker, но внутри него было 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'));
Во всяком случае, что-то определенно изменилось в отношении использования его с worker.
Раньше мы могли использовать полный путь к worker,
pdf.combined.js полностью включен / включает pdf.worker.js и не требует указания workerSrc.
Изменения в pdf.combined.js https://github.com/mozilla/pdfjs-dist/commit/a7cd5f77b00bac19c0f6ee4c2cfd5bbf0fe45d8f#diff -eccf5b94e31b0939738de07167e02af6
Ага, я просто оцениваю варианты использования воркеров вместе с jspm.
Теперь проблема: pdf.worker.js загружается дважды, проблема была решена с помощью request.ensure () в webpack
Итак, теперь он загружается в основной поток и не использует importScripts ()?
Мой src / app.js:
import pdfjs from 'pdfjs-dist';
console.log(PDFJS);
Таким образом, он еще даже не использует getDocument, но в сетевом мониторе показывает две записи для pdf.worker.js
Странно. Я вижу только одну запись.
Странно. Я вижу только одну запись.
Это не должно быть AFAIK :)
То же самое в Firefox и Chrome:
Ах. Похоже, Systemjs тупо разбирает все require
s и пытается их загрузить ...
Условное требование - не очень распространенный вариант использования.
Вот почему он также пытается загрузить node -secure.
@yurydelendik
Каким образом требуется помощь webpack? 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 ().
PS протрите https://github.com/yurydelendik/pdf.js/tree/pdfjsumd
Ух, отлично, попробую, как только слит и выпустит.
Закрытие исправлено # 6825. Если остались проблемы, откройте новый выпуск.
Я также рекомендую переопределить формат модуля при использовании jspm: jspm install npm:pdfjs-dist -o "{format: 'amd'}"