2017-10-13 18 views
5

प्रसंगमैं टाइपप्रति एक तरीका है कि काम कर रहे Node.js कोड उत्पन्न में PDF.js NPM मॉड्यूल और @types बाइंडिंग लोड करने के लिए कैसे मिल सकता है?

मैं एक टाइपप्रति परियोजना में PDF.JS आयात करने के लिए कोशिश कर रहा हूँ। मैं pdfjs-dist के लिए DefinitelyTyped bindings, npm install @types/pdfjs-dist और npm install pdfjs-dist के माध्यम से स्थापित उपयोग कर रहा हूँ।

समस्या

मैं अपने प्रोजेक्ट को संकलित करने के टाइपप्रति प्राप्त नहीं कर पा रहे। मैं DefinitelyTyped पर परीक्षण से सीधे कॉपी स्रोत कोड का उपयोग कर रहा हूँ। इस सरलीकृत (विलोपन केवल) कोड मैं संकलित करने के लिए कोशिश कर रहा हूँ (DefinitelyTyped से परीक्षण कोड का एक सटीक प्रतिलिपि भी उसी तरह से विफल रहता है) है:

import { PDFJSStatic } from 'pdfjs-dist'; 
var PDFJS: PDFJSStatic; 
PDFJS.getDocument('helloworld.pdf').then(console.log); 

टाइपप्रति प्रकार घोषणाओं मॉड्यूल पाता है, और समझता है वैध होने के लिए PDFJSStatic का आयात। यह लगता है कि यह नहीं है कि PDFJS कभी आरंभ नहीं हो जाता, लेकिन अगर मैं tsconfig में strict बंद कर देते हैं, कोड को संकलित करता है, लेकिन यह करने के लिए संकलित:

"use strict"; 
exports.__esModule = true; 
var PDFJS; 
PDFJS.getDocument('helloworld.pdf').then(console.log); 

कौन सा स्पष्ट रूप से काम नहीं करता। यह किसी भी चीज़ में import कथन को संकलित नहीं कर रहा है।

प्रश्न

कैसे मैं एक टाइपप्रति परियोजना में PDF.JS आयात और @types/pdfjs-dist में घोषणा फ़ाइलों के माध्यम से Node.js कोड काम में यह संकलन कर सकते हैं?

मैं

मैं import पर विभिन्न रूपों की कोशिश की है क्या कोशिश की है कोई लाभ नहीं हुआ। require पर स्विच करने से भी मदद नहीं मिलती है।

मैंने सत्यापित किया है कि pdjs-dist निर्भरता, और @types/pdfjs-dist निर्भरताएं सीधे, अद्यतन, और सीधे नोडजेएस (गैर-टाइपस्क्रिप्ट प्रोग्राम) से उपयोग योग्य हैं।

मैं अपने tsconfig में module के लिए विभिन्न मूल्यों की कोशिश की है। वे कभी-कभी जेनरेट कोड बदलते हैं, लेकिन उनमें से कोई भी आवश्यक आयात को बदलने के लिए इसे बदलता नहीं है।

मैं import रेखा से ऊपर /// <reference path="../node_modules/@types/pdfjs-dist/index.d.ts" /> जोड़ने की कोशिश की है। उसने व्यवहार को नहीं बदला।

पर्यावरण

tsc संस्करण 2.4.2, नोड 8.5, और 5.3 npm

{ 
    "compilerOptions": { 
     "allowJs":true, 
     "rootDir": ".", 
     "outDir": "dist", 
     "moduleResolution": "node" 
    }, 
    "include": [ 
     "src/**/*" 
    ], 
    "exclude": [ 
     "**/*.spec.ts", 
     "dist/**/*" 
    ] 
} 
+1

मुझे एक ही समस्या है। – uiii

+0

मुझे एक ही समस्या है, क्या आपको इस समस्या को हल करने के लिए कोई समाधान मिला है? –

+0

हैलो। क्या आपको समस्या का समाधान मिला? मैं एक ही समस्या के साथ बैठा हूं, और मैं अपने बालों को फेंक रहा हूं। इसे इतना कठिन क्यों होना चाहिए? –

उत्तर

2

शायद तुम require फ़ंक्शन का उपयोग कर सकते हैं: मैं अपने प्रोजेक्ट जड़ में निम्नलिखित tsconfig.json है।

@types/node संकुल जोड़ें, और अपने स्रोत कोड के शीर्ष पर require('pdfjs-dist') लिखें। तो, आप नीचे की तरह अपने कोड को संशोधित कर सकते हैं।

अब, यह कोड काम करेंगे।

import { PDFJSStatic } from 'pdfjs-dist'; 
const PDFJS: PDFJSStatic = require('pdfjs-dist'); 
PDFJS.getDocument('helloworld.pdf').then(console.log); 

मुझे लगता है कि @types/pdfjs-dist इसके कार्यान्वयन में समस्याएं हैं।

+0

अब, यह विधि काम नहीं करती है। कृपया '@ प्रकार/नोड' के इस परिवर्तन को देखें https://github.com/DefinitelyTyped/DefinitelyTyped/commit/41e178d963a2e55106e20f423fd7f311e8632861#diff-21e9d6e91ee2c9204daebf0a94339b21 – Azoson

+1

अब, यह कोड काम करेगा। आयात 'pdfjs-जिले' से {PDFJSStatic}; कॉन्स पीडीएफजेएस: पीडीएफजेएसएसटीएटी = आवश्यकता ('पीडीएफजेएस-डिस्ट'); पीडीएफजेएस.getDocument ('helloworld.pdf')। फिर (console.log); मुझे लगता है कि '@ प्रकार/पीडीएफजेएस-डिस्ट' के कार्यान्वयन में समस्याएं हैं। – Azoson

0

मैं भी अलग अलग तरीकों की कोशिश की है। मेरे लिए, सबसे अधिक पठनीय यह था:

import * as pdfjslib from 'pdfjs-dist'; 
let PDFJS = pdfjslib.PDFJS; 
PDFJS.disableTextLayer = true; 
PDFJS.disableWorker = true; 
+0

यह काम नहीं करता है। मुझे नाम के रूप में 'नामस्थान' pdfjslib 'का उपयोग नहीं किया जा सकता है।' –

संबंधित मुद्दे