Pdf.js: دعم Systemjs

تم إنشاؤها على ٢٢ ديسمبر ٢٠١٥  ·  34تعليقات  ·  مصدر: mozilla/pdf.js

الرجاء إضافة دعم لـ systemjs.

2-feature

ال 34 كومينتر

أود أن أطلب مزيدًا من المعلومات نظرًا لعدم تقديم أمثلة. وأعتقد أن 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
ولكن بعد إدراج ضمان العقدة ، لا يمكننا (ضمان العقدة لا يبدو أنه متوافق مع system.js).

في الواقع ، هذا طلب لـ jspm packager ، وليس مُحمل Systemjs تحديدًا.
على سبيل المثال ، سيكون من الجيد أن يتطلب الأمر jspm shim ، لكن لا تضيف تغييرات غير متوافقة مثل ضمان العقدة.

تضمين التغريدة

وجود ما يلي في الملف config.js لحل المشكلة:

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

(فارغ هو ملف فارغ بدون محتوى)

هناك حاجة إلى اختراق مماثل لـ Browserify

المشكلة الآن: تم تحميل pdf.worker.js مرتين ، وقد تم حل هذه المشكلة عن طريق request.ensure () في حزمة الويب. يجب منع تحميل "./pdf.worker.js" حتى يتم الحاجة إليه حقًا.

اعتقدت أن "PDFJS.disableWorker = صحيح ؛" يحل ذلك؟ أليس كذلك؟

إذا كنت تستخدم System.import('./pdf.worker') ، فسيصدر طلب http واحد فقط.

أو حتى System.import('pdfjs-dist/build/pdf.worker')

هل هناك سبب محدد لاستخدام node-ensure ؟ أعتقد أن أداة تحميل النظام تعمل بشكل جيد في Webpack.

"PDFJS.disableWorker = صحيح ؛" ليس خيارًا ، لأننا نريد نقل معالجة PDF على سلسلة مختلفة. لا نريد اقتراح حل رديء لمستخدمي المكتبة ، أليس كذلك؟

حسنًا ، سأفضل حلًا رديئًا على عدم وجود حل على الإطلاق. بالنسبة لحالة الاستخدام الخاصة بي ، لا بأس من تجميد الصفحة لمدة ثانية واحدة.
سأكون سعيدًا إذا وجدت حلاً أفضل.

هل هناك سبب محدد لاستخدام ضمان العقدة؟

إذا نظرت بعناية إلى الأمثلة / 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" بـ "فارغ" لم ينجح معي).

Vanuan هل يمكنك تقديم مشكلة مع systemjs لمعرفة ما إذا كان لديهم شيء أفضل في الاعتبار؟ شكر.

يبدو وكأنه آخر مشكلة في systemjs https://github.com/systemjs/systemjs/issues/983 ؟

حسنًا ، سأفضل حلًا رديئًا على عدم وجود حل على الإطلاق. بالنسبة لحالة الاستخدام الخاصة بي ، لا بأس من تجميد الصفحة لمدة ثانية واحدة.

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 مرتين ، وتم حل هذه المشكلة عن طريق request.ensure () في حزمة الويب

الآن يتم تحميله في الموضوع الرئيسي ولا يستخدم importScripts ()؟

src / app.js الخاصة بي هي:

import pdfjs from 'pdfjs-dist';

console.log(PDFJS);

لذلك فهي لا تستخدم getDocument حتى الآن ، ولكن في شاشة الشبكة تعرض إدخالين لـ pdf.worker.js

هذا غريب. لا أرى سوى إدخال واحد.

هذا غريب. لا أرى سوى إدخال واحد.

لا يجب أن يكون أفايك :)

الشيء نفسه على Firefox و Chrome:
screen shot 2015-12-22 at 5 34 42 pm

آه. لذا يبدو أن Systemjs يحلل كل require s ويحاول تحميلها ...

الشرط الشرطي ليس حالة استخدام شائعة جدًا.

لهذا السبب يحاول تحميل ضمان العقدة أيضًا.

تضمين التغريدة
كيف هذا يتطلب مساعدة 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 بالكشف التلقائي عن نوع الوحدة. الآن أصبح الأمر مشتركًا ، مع UMD سيكون AMD لذلك لن يحاول تحليل يتطلب ().

مسح PS على https://github.com/yurydelendik/pdf.js/tree/pdfjsumd

رائع ، رائع ، سأحاول بمجرد دمجها وإصدارها.

إغلاق كما تم تحديده بواسطة # 6825. إذا كانت هناك مشاكل متبقية ، فيرجى فتح مشكلة جديدة.

أوصي أيضًا بتجاوز تنسيق الوحدة النمطية عند استخدام jspm: jspm install npm:pdfjs-dist -o "{format: 'amd'}"

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات