Adicione suporte para systemjs.
Eu solicitaria mais informações, pois nenhum exemplo é fornecido. E eu acho que o Browserify funciona com pdfjs-dist atualmente (com algumas exceções de módulos).
Este é o exemplo mais comum para usar o 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
Obrigado por exemplo
Nas versões anteriores, podíamos usar jspm shim para usar pdfjs.
https://github.com/jspm/registry/wiki/Configuring-Packages-for-jspm
Mas, após a inclusão de node-sure, não podemos (node-garantir não parece ser compatível com system.js).
Na verdade, este é um pedido para o jspm packager, não especificamente para o carregador Systemjs.
Ou seja, não haveria problema se fosse necessário shim jspm, mas não adicione alterações incompatíveis como o node-garantir.
@Vanuan
Ter o seguinte no config.js solução alternativa para o problema:
"npm:[email protected]": {
"process": "github:jspm/[email protected]",
"node-ensure": "empty",
"entry?name=[hash]-worker.js": "empty"
},
(vazio é um arquivo empty.js sem conteúdo)
Hack semelhante é necessário para o Browserify
Agora problema: pdf.worker.js é carregado duas vezes, esse problema foi resolvido por request.ensure () no webpack. O './pdf.worker.js' deve ser proibido de carregar até que seja realmente necessário.
Eu pensei "PDFJS.disableWorker = true;" resolve isso? Não é?
Se você usar System.import('./pdf.worker')
, ele emitirá apenas uma solicitação http.
Ou mesmo System.import('pdfjs-dist/build/pdf.worker')
Existe uma razão específica pela qual node-ensure
foi usado? Eu acredito que o carregador do sistema funciona bem no Webpack.
"PDFJS.disableWorker = true;" não é uma opção, uma vez que queremos mover o processamento de PDF para o segmento diferente. Não queremos sugerir uma solução ruim para usuários de bibliotecas, queremos?
Bem, eu preferiria uma solução ruim do que nenhuma solução. Para o meu caso de uso, mesmo o congelamento de página de 1 segundo é adequado.
Eu ficaria feliz se você encontrar uma solução melhor.
Existe uma razão específica pela qual o node-garantir foi usado?
Se você observar cuidadosamente quais exemplos / webpack / produz:
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" é o arquivo principal que carrega (isso significa que ele trará e inicializará a IU após 122796 bytes - inicialização de página mais rápida). "9d074593b165291f150e-worker.js" é um trabalhador que executa a lógica e não bloqueia a IU em dispositivos lentos. A parte "1.bundle.js" é carregada apenas se disableWorker for acionado e para navegadores legados, como o IE9.
Eu ficaria feliz se você encontrar uma solução melhor.
Estou esperando que o systemjs tenha algum tipo de proteção para não analisar todos os requisitos (substituir "./pdf.worker.js" por "vazio" não funcionou para mim).
@Vanuan Você pode registrar um problema com o systemjs para ver se eles têm algo melhor em mente? Obrigado.
Parece a última edição em systemjs https://github.com/systemjs/systemjs/issues/983 ?
Bem, eu preferiria uma solução ruim do que nenhuma solução. Para o meu caso de uso, mesmo o congelamento de página de 1 segundo é adequado.
@Vanuan , nada mudou no uso do arquivo pdf.combined.js (espero) - parece que precisamos mantê-lo para esses casos. Você precisa usá-lo conforme descrito como um problema em # 6729. Pela sua descrição, não ficou claro se você planeja usar o systemjs para carregar o PDFJS.
nada mudou no uso do arquivo pdf.combined.js
Ah, ótimo!
Enfim, algo mudou definitivamente em relação ao uso com o trabalhador.
Anteriormente, poderíamos usar o caminho completo para o trabalhador, mas obter Uncaught ReferenceError: require is not defined
dentro dele:
PDFJS.workerSrc = 'jspm_packages/npm/[email protected]/build/pdf.worker.js';
Agora, parece que ele travou no carregamento de arquivos. Como se o retorno de chamada do módulo carregado nunca fosse concluído.
O último módulo solicitado é process
.
Provavelmente, Systemjs não pode processar a seguinte construção:
(function(process) {
if (typeof PDFJS === 'undefined') {
(typeof window !== 'undefined' ? window : this).PDFJS = {};
}
})(require('process'));
Enfim, algo mudou definitivamente em relação ao uso com o trabalhador.
Anteriormente, podíamos usar o caminho completo para o trabalhador,
pdf.combined.js totalmente incluído / inclui pdf.worker.js e não precisa de workerSrc para ser especificado.
Alterações em pdf.combined.js https://github.com/mozilla/pdfjs-dist/commit/a7cd5f77b00bac19c0f6ee4c2cfd5bbf0fe45d8f#diff -eccf5b94af31b0939738de07167e026
Sim, estou apenas avaliando opções de uso de workers junto com o jspm.
Agora problema: pdf.worker.js é carregado duas vezes, esse problema foi resolvido por request.ensure () no webpack
Então, agora ele está sendo carregado na thread principal e não usa importScripts ()?
Meu src / app.js é:
import pdfjs from 'pdfjs-dist';
console.log(PDFJS);
Portanto, ainda nem está usando getDocument, mas no monitor de rede ele mostra duas entradas para pdf.worker.js
É estranho. Eu só vejo uma entrada.
É estranho. Eu só vejo uma entrada.
Não deve ser nenhum AFAIK :)
O mesmo no Firefox e no Chrome:
Ah. Então, parece que Systemjs estupidamente analisa todos os require
s e tenta carregá-los ...
A exigência condicional não é um caso de uso muito comum.
É por isso que ele tenta carregar o nó-garantir também.
@yurydelendik
Como tal requer ajuda do webpack? O Webpack ainda carrega o trabalhador usando importScripts, certo?
A exigência condicional não é um caso de uso muito comum.
Eu discordo, https://github.com/systemjs/systemjs/issues/983 e https://github.com/webpack/docs/wiki/code-splitting são casos de uso comuns.
O Webpack ainda carrega o trabalhador usando importScripts, certo?
É verdade. via new Worker(..)
. Mas também tem a opção de carregar pdf.worker.js como módulo se os trabalhadores estiverem desabilitados.
O problema será resolvido por # 6775 - o systemjs tem detecção automática para o tipo de módulo. Agora é commonjs, com UMD será AMD, então não tentará analisar require ().
PS wip em https://github.com/yurydelendik/pdf.js/tree/pdfjsumd
Uau, ótimo, vou tentar assim que for mesclado e lançado.
Fechamento corrigido por # 6825. Se houver problemas restantes, abra um novo problema.
Também recomendo substituir o formato do módulo ao usar jspm: jspm install npm:pdfjs-dist -o "{format: 'amd'}"