Pdf.js: Sistem Pendukung js

Dibuat pada 22 Des 2015  ·  34Komentar  ·  Sumber: mozilla/pdf.js

Harap tambahkan dukungan untuk systemjs.

2-feature

Semua 34 komentar

Saya akan meminta lebih banyak informasi karena tidak ada contoh yang diberikan. Dan saya pikir Browserify bekerja dengan pdfjs-dist saat ini (dengan beberapa pengecualian modul).

Berikut contoh paling umum untuk menggunakan 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

Terima kasih contohnya

Di versi sebelumnya kita bisa menggunakan jspm shim untuk menggunakan pdfjs.
https://github.com/jspm/registry/wiki/Configuring-Packages-for-jspm
Tapi setelah penyertaan node-sure, kita tidak bisa (node-sure sepertinya tidak kompatibel dengan system.js).

Sebenarnya, ini adalah permintaan untuk jspm packager, bukan loader Systemjs khusus.
Yaitu akan baik-baik saja jika itu membutuhkan jspm shim, tetapi jangan menambahkan perubahan yang tidak kompatibel seperti node-memastikan.

@Van

Memiliki hal berikut di config.js untuk mengatasi masalah ini:

    "npm:[email protected]": {
      "process": "github:jspm/[email protected]",
      "node-ensure": "empty",
      "entry?name=[hash]-worker.js": "empty"
    },

(kosong adalah file empty.js tanpa konten)

Peretasan serupa diperlukan untuk Browserify

Sekarang masalah: pdf.worker.js dimuat dua kali, itu masalah telah diselesaikan oleh request.ensure () di webpack. './Pdf.worker.js' harus dilarang memuat sampai benar-benar dibutuhkan.

Saya pikir "PDFJS.disableWorker = true;" memecahkan itu? Bukan?

Jika Anda menggunakan System.import('./pdf.worker') , ini hanya akan mengeluarkan satu permintaan http.

Atau bahkan System.import('pdfjs-dist/build/pdf.worker')

Apakah ada alasan khusus mengapa node-ensure digunakan? Saya yakin System loader berfungsi dengan baik di Webpack.

"PDFJS.disableWorker = true;" bukanlah pilihan, karena kami ingin memindahkan pemrosesan PDF ke utas yang berbeda. Kami tidak ingin menyarankan solusi yang buruk untuk pengguna perpustakaan, bukan?

Yah, saya lebih suka solusi yang buruk daripada tidak ada solusi sama sekali. Untuk kasus penggunaan saya, bahkan pembekuan halaman 1 detik saja sudah cukup.
Saya akan senang jika Anda menemukan solusi yang lebih baik.

Apakah ada alasan khusus mengapa node-pastikan digunakan?

Jika Anda melihat dengan cermat contoh / webpack / produksi apa:

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" adalah file utama yang dimuat (artinya file tersebut akan membawa dan menginisialisasi UI setelah 122796 byte - halaman yang lebih cepat memulai). "9d074593b165291f150e-worker.js" adalah pekerja yang akan menjalankan logika dan tidak mengunci UI pada perangkat yang lambat. Bagian "1.bundle.js" dimuat hanya jika disableWorker dipicu dan untuk browser lama seperti IE9.

Saya akan senang jika Anda menemukan solusi yang lebih baik.

Saya mengharapkan systemjs mungkin memiliki semacam penjaga untuk tidak mengurai semua kebutuhan (mengganti "./pdf.worker.js" dengan "kosong" tidak berhasil untuk saya).

@Vanuan Dapatkah Anda mengajukan masalah dengan systemjs untuk melihat apakah mereka memiliki pemikiran yang lebih baik? Terima kasih.

Kedengarannya seperti masalah terakhir di systemjs https://github.com/systemjs/systemjs/issues/983 ?

Yah, saya lebih suka solusi yang buruk daripada tidak ada solusi sama sekali. Untuk kasus penggunaan saya, bahkan pembekuan halaman 1 detik saja sudah cukup.

@Vanuan , tidak ada yang berubah dalam penggunaan file pdf.combined.js (saya harap) - sepertinya kami perlu menyimpannya untuk kasus seperti itu. Anda perlu menggunakannya seperti yang Anda jelaskan sebagai masalah di # 6729. Dari uraian Anda, tidak jelas Anda berencana menggunakan systemjs untuk memuat PDFJS.

tidak ada yang berubah dalam penggunaan file pdf.combined.js

Ah, bagus!

Bagaimanapun, ada sesuatu yang pasti berubah sehubungan dengan menggunakannya dengan pekerja.
Sebelumnya, kita bisa menggunakan path lengkap ke pekerja, tapi dapatkan Uncaught ReferenceError: require is not defined di dalamnya:

PDFJS.workerSrc = 'jspm_packages/npm/[email protected]/build/pdf.worker.js';

Sekarang, sepertinya macet saat memuat file. Seolah-olah modul yang dimuat callback tidak pernah selesai.
Modul terakhir yang diminta adalah process .

Mungkin, Systemjs tidak dapat memproses konstruksi berikut:

(function(process) {
  if (typeof PDFJS === 'undefined') {
    (typeof window !== 'undefined' ? window : this).PDFJS = {};
  }
})(require('process'));

Bagaimanapun, ada sesuatu yang pasti berubah sehubungan dengan menggunakannya dengan pekerja.
Sebelumnya, kita bisa menggunakan jalur lengkap ke pekerja,

pdf.combined.js sepenuhnya disertakan / termasuk pdf.worker.js dan tidak membutuhkan workerSrc untuk ditentukan.

Perubahan pada pdf.combined.js https://github.com/mozilla/pdfjs-dist/commit/a7cd5f77b00bac19c0f6ee4c2cfd5bbf0fe45d8f#diff -eccf5b94e31b0939738de07167e02af6

Ya, saya hanya mengevaluasi opsi menggunakan pekerja bersama dengan jspm.

Sekarang masalah: pdf.worker.js dimuat dua kali, itu masalah diselesaikan oleh request.ensure () di webpack

Jadi, sekarang sedang dimuat di utas utama dan tidak menggunakan importScripts ()?

Src / app.js saya adalah:

import pdfjs from 'pdfjs-dist';

console.log(PDFJS);

Jadi bahkan belum menggunakan getDocument, tetapi di monitor jaringan itu menunjukkan dua entri untuk pdf.worker.js

Ini aneh. Saya hanya melihat satu entri.

Ini aneh. Saya hanya melihat satu entri.

Tidak akan ada AFAIK :)

Hal yang sama di Firefox dan Chrome:
screen shot 2015-12-22 at 5 34 42 pm

Ah. Jadi, sepertinya Systemjs dengan bodohnya mem-parsing semua require s dan mencoba memuatnya ...

Persyaratan bersyarat bukanlah kasus penggunaan yang sangat umum.

Itulah mengapa ia mencoba memuat node-memastikan juga.

@yuryelend
Bagaimana membutuhkan bantuan webpack? Webpack masih memuat pekerja menggunakan importScripts, bukan?

Persyaratan bersyarat bukanlah kasus penggunaan yang sangat umum.

Saya tidak setuju, https://github.com/systemjs/systemjs/issues/983 dan https://github.com/webpack/docs/wiki/code-splitting adalah kasus penggunaan umum.

Webpack masih memuat pekerja menggunakan importScripts, bukan?

Memang. melalui new Worker(..) . Tetapi itu juga memiliki opsi untuk memuat pdf.worker.js sebagai modul jika pekerja dinonaktifkan.

Masalah ini akan diselesaikan dengan # 6775 - systemjs memiliki deteksi otomatis untuk jenis modul. Sekarang sudah biasa, dengan UMD itu akan menjadi AMD sehingga tidak akan mencoba mengurai require ().

PS wip di https://github.com/yurydelendik/pdf.js/tree/pdfjsumd

Wah, bagus, saya akan coba segera setelah digabung dan dirilis.

Penutupan sebagaimana ditetapkan oleh # 6825. Jika masih ada masalah, buka edisi baru.

Saya juga merekomendasikan untuk mengganti format modul saat menggunakan jspm: jspm install npm:pdfjs-dist -o "{format: 'amd'}"

Apakah halaman ini membantu?
0 / 5 - 0 peringkat